channels

package
v1.0.10 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 4, 2020 License: BSD-3-Clause, MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	InvalidContactNameError    = utils.Error("InvalidContactNameError")
	InvalidContactMessageError = utils.Error("InvalidContactMessageError")
	InvalidContactRequestError = utils.Error("InvalidContactRequestError")
)

Defining Versions

Variables

This section is empty.

Functions

func SendMessageOnChatChannel

func SendMessageOnChatChannel(channel *Channel, message string) (uint32, error)

SendMessageOnChatChannel is a wrapper function which performs some necessary boilerplate to make sending messages easier.

Types

type Channel

type Channel struct {
	ID int32

	Type           string
	Direction      Direction
	Handler        Handler
	Pending        bool
	ServerHostname string
	ClientHostname string

	// Functions for updating the underlying Connection
	SendMessage           func([]byte)
	CloseChannel          func()
	DelegateAuthorization func()
	DelegateEncryption    func([32]byte)
}

Channel holds the state of a channel on an open connection

type ChatChannel

type ChatChannel struct {
	// Methods of Handler are called for chat events on this channel
	Handler ChatChannelHandler
	// contains filtered or unexported fields
}

ChatChannel implements the ChannelHandler interface for a channel of type "im.ricochet.chat". The channel may be inbound or outbound.

ChatChannel implements protocol-level sanity and state validation, but does not handle or acknowledge chat messages. The application must provide a ChatChannelHandler implementation to handle chat events.

func (*ChatChannel) Acknowledge

func (cc *ChatChannel) Acknowledge(messageID uint32, accepted bool)

Acknowledge indicates that the given messageID was received, and whether it was accepted.

func (*ChatChannel) Bidirectional

func (cc *ChatChannel) Bidirectional() bool

Bidirectional - for chat channels are not bidrectional

func (*ChatChannel) Closed

func (cc *ChatChannel) Closed(err error)

Closed is called when the channel is closed for any reason.

func (*ChatChannel) OnlyClientCanOpen

func (cc *ChatChannel) OnlyClientCanOpen() bool

OnlyClientCanOpen - for chat channels any side can open

func (*ChatChannel) OpenInbound

func (cc *ChatChannel) OpenInbound(channel *Channel, raw *Protocol_Data_Control.OpenChannel) ([]byte, error)

OpenInbound is the first method called for an inbound channel request. If an error is returned, the channel is rejected. If a RawMessage is returned, it will be sent as the ChannelResult message.

func (*ChatChannel) OpenOutbound

func (cc *ChatChannel) OpenOutbound(channel *Channel) ([]byte, error)

OpenOutbound is the first method called for an outbound channel request. If an error is returned, the channel is not opened. If a RawMessage is returned, it will be sent as the OpenChannel message.

func (*ChatChannel) OpenOutboundResult

func (cc *ChatChannel) OpenOutboundResult(err error, crm *Protocol_Data_Control.ChannelResult)

OpenOutboundResult is called when a response is received for an outbound OpenChannel request. If `err` is non-nil, the channel was rejected and Closed will be called immediately afterwards. `raw` contains the raw protocol message including any extension data.

func (*ChatChannel) Packet

func (cc *ChatChannel) Packet(data []byte)

Packet is called for each raw packet received on this channel.

func (*ChatChannel) RequiresAuthentication

func (cc *ChatChannel) RequiresAuthentication() string

RequiresAuthentication - chat channels require hidden service auth

func (*ChatChannel) SendMessage

func (cc *ChatChannel) SendMessage(message string) uint32

SendMessage sends a given message using this channel, and returns the messageID, which will be used in ChatMessageAck when the peer acknowledges this message.

func (*ChatChannel) SendMessageWithTime

func (cc *ChatChannel) SendMessageWithTime(message string, when time.Time) uint32

SendMessageWithTime is identical to SendMessage, but also sends the provided time.Time as a rough timestamp for when this message was originally sent. This should be used when retrying or sending queued messages.

func (*ChatChannel) Singleton

func (cc *ChatChannel) Singleton() bool

Singleton - for chat channels there can only be one instance per direction

func (*ChatChannel) Type

func (cc *ChatChannel) Type() string

Type returns the type string for this channel, e.g. "im.ricochet.chat".

type ChatChannelHandler

type ChatChannelHandler interface {
	// OpenInbound is called when a inbound chat channel is opened
	OpenInbound()
	// ChatMessage is called when a chat message is received. Return true to acknowledge
	// the message successfully, and false to NACK and refuse the message.
	ChatMessage(messageID uint32, when time.Time, message string) bool
	// ChatMessageAck is called when an acknowledgement of a sent message is received.
	ChatMessageAck(messageID uint32, accepted bool)
}

ChatChannelHandler is implemented by an application type to receive events from a ChatChannel.

Note that ChatChannelHandler is composable with other interfaces, including ConnectionHandler; there is no need to use a distinct type as a ChatChannelHandler.

type ContactRequestChannel

type ContactRequestChannel struct {
	// Methods of Handler are called for chat events on this channel
	Handler ContactRequestChannelHandler

	// Properties of the request
	Name    string
	Message string
	// contains filtered or unexported fields
}

ContactRequestChannel implements the ChannelHandler interface for a channel of type "im.ricochet.contact.request". The channel may be inbound or outbound.

func (*ContactRequestChannel) Bidirectional

func (crc *ContactRequestChannel) Bidirectional() bool

Bidirectional - only clients can send messages

func (*ContactRequestChannel) Closed

func (crc *ContactRequestChannel) Closed(err error)

Closed is called when the channel is closed for any reason.

func (*ContactRequestChannel) OnlyClientCanOpen

func (crc *ContactRequestChannel) OnlyClientCanOpen() bool

OnlyClientCanOpen - only clients can open contact requests

func (*ContactRequestChannel) OpenInbound

func (crc *ContactRequestChannel) OpenInbound(channel *Channel, oc *Protocol_Data_Control.OpenChannel) ([]byte, error)

OpenInbound is the first method called for an inbound channel request. If an error is returned, the channel is rejected. If a RawMessage is returned, it will be sent as the ChannelResult message.

func (*ContactRequestChannel) OpenOutbound

func (crc *ContactRequestChannel) OpenOutbound(channel *Channel) ([]byte, error)

OpenOutbound is the first method called for an outbound channel request. If an error is returned, the channel is not opened. If a RawMessage is returned, it will be sent as the OpenChannel message.

func (*ContactRequestChannel) OpenOutboundResult

func (crc *ContactRequestChannel) OpenOutboundResult(err error, crm *Protocol_Data_Control.ChannelResult)

OpenOutboundResult is called when a response is received for an outbound OpenChannel request. If `err` is non-nil, the channel was rejected and Closed will be called immediately afterwards. `raw` contains the raw protocol message including any extension data.

func (*ContactRequestChannel) Packet

func (crc *ContactRequestChannel) Packet(data []byte)

Packet is called for each raw packet received on this channel.

func (*ContactRequestChannel) RequiresAuthentication

func (crc *ContactRequestChannel) RequiresAuthentication() string

RequiresAuthentication - contact requests require hidden service auth

func (*ContactRequestChannel) SendResponse

func (crc *ContactRequestChannel) SendResponse(status string)

SendResponse sends a contact request status response to the requester.

func (*ContactRequestChannel) Singleton

func (crc *ContactRequestChannel) Singleton() bool

Singleton - only one contact request can be opened per side

func (*ContactRequestChannel) Type

func (crc *ContactRequestChannel) Type() string

Type returns the type string for this channel, e.g. "im.ricochet.chat".

type ContactRequestChannelHandler

type ContactRequestChannelHandler interface {
	ContactRequest(name string, message string) string
	ContactRequestRejected()
	ContactRequestAccepted()
	ContactRequestError()
}

ContactRequestChannelHandler is implemented by an application type to receive events from a ContactRequestChannel.

Note that ContactRequestChannelHandler is composable with other interfaces, including ConnectionHandler; there is no need to use a distinct type as a ContactRequestChannelHandler.

type Direction

type Direction int

Direction indicated whether we or the remote peer opened the channel

const (
	// Inbound indcates the channel was opened by the remote peer
	Inbound Direction = iota
	// Outbound indicated the channel was opened by us
	Outbound
)

type Handler

type Handler interface {
	// Type returns the type string for this channel, e.g. "im.ricochet.chat".
	Type() string

	// Closed is called when the channel is closed for any reason.
	Closed(err error)

	// OnlyClientCanOpen indicates if only a client can open a given channel
	OnlyClientCanOpen() bool

	// Singleton indicates if a channel can only have one instance per direction
	Singleton() bool

	// Bidirectional indicates if messages can be send by either side
	Bidirectional() bool

	// RequiresAuthentication describes what authentication is needed for the channel
	RequiresAuthentication() string

	// OpenInbound is the first method called for an inbound channel request.
	// If an error is returned, the channel is rejected. If a RawMessage is
	// returned, it will be sent as the ChannelResult message.
	OpenInbound(channel *Channel, raw *Protocol_Data_Control.OpenChannel) ([]byte, error)

	// OpenOutbound is the first method called for an outbound channel request.
	// If an error is returned, the channel is not opened. If a RawMessage is
	// returned, it will be sent as the OpenChannel message.
	OpenOutbound(channel *Channel) ([]byte, error)

	// OpenOutboundResult is called when a response is received for an
	// outbound OpenChannel request. If `err` is non-nil, the channel was
	// rejected and Closed will be called immediately afterwards. `raw`
	// contains the raw protocol message including any extension data.
	OpenOutboundResult(err error, raw *Protocol_Data_Control.ChannelResult)

	// Packet is called for each raw packet received on this channel.
	Packet(data []byte)
}

Handler reacts to low-level events on a protocol channel. There should be a unique instance of a ChannelHandler type per channel.

Applications generally don't need to implement ChannelHandler directly; instead, use the built-in implementations for common channel types, and their individual callback interfaces. ChannelHandler is useful when implementing new channel types, or modifying low level default behavior.

Directories

Path Synopsis
v3

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL