session

package
v0.0.2 Latest Latest
Warning

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

Go to latest
Published: May 11, 2019 License: AGPL-3.0 Imports: 26 Imported by: 0

Documentation

Index

Constants

View Source
const MaxQueueSize = 40

MaxQueueSize is the maximum queue size.

Variables

View Source
var ErrQueueEmpty = errors.New("Error, queue is empty.")

ErrQueueEmpty is the error issued when the queue is empty.

View Source
var ErrQueueFull = errors.New("queue full error")

ErrQueueFull is the error issued when the queue is full.

View Source
var ReplyTimeoutError = errors.New("Failure waiting for reply, timeout reached")

Functions

This section is empty.

Types

type ConnectionStatusEvent

type ConnectionStatusEvent struct {
	// IsConnected is true iff the account is connected to the provider.
	IsConnected bool

	// Err is the error encountered when connecting or by the connection if any.
	Err error
}

ConnectionStatusEvent is the event sent when an account's connection status changes.

func (*ConnectionStatusEvent) String

func (e *ConnectionStatusEvent) String() string

String returns a string representation of the ConnectionStatusEvent.

type EgressQueue

type EgressQueue interface {

	// Peek returns the next queue item without modifying the queue.
	Peek() (Item, error)

	// Pop pops the next item off the queue.
	Pop() (Item, error)

	// Push pushes the item onto the queue.
	Push(Item) error
}

EgressQueue is the egress queue interface.

type Event

type Event interface {
	// String returns a string representation of the Event.
	String() string
}

Event is the generic event sent over the event listener channel.

type Item

type Item interface {
	Priority() uint64
}

type Message

type Message struct {
	// ID is the message identifier
	ID *[cConstants.MessageIDLength]byte

	// Recipient is the message recipient
	Recipient string

	// Provider is the recipient Provider
	Provider string

	// Payload is the message payload
	Payload []byte

	// SentAt contains the time the message was sent.
	SentAt time.Time

	// Sent is set to true if the message was sent on the network.
	Sent bool

	// ReplyETA is the expected round trip time to receive a response.
	ReplyETA time.Duration

	// SURBID is the SURB identifier.
	SURBID *[sConstants.SURBIDLength]byte

	// Key is the SURB decryption keys
	Key []byte

	// Reply is the SURB reply
	Reply []byte

	// SURBType is the SURB type.
	SURBType int

	// WithSURB specified if a SURB should be bundled with the forward payload.
	WithSURB bool

	// Specifies if this message is a decoy.
	IsDecoy bool

	// Priority controls the dwell time in the current AQM.
	QueuePriority uint64
}

Message is a message reference which is used to match future received SURB replies.

func (*Message) Priority

func (m *Message) Priority() uint64

type MessageID

type MessageID *[cConstants.MessageIDLength]byte

MessageID is a message identity byte array.

type MessageReplyEvent

type MessageReplyEvent struct {
	// MessageID is the unique identifier for the request associated with the
	// reply.
	MessageID *[cConstants.MessageIDLength]byte

	// Payload is the reply payload if any.
	Payload []byte

	// Err is the error encountered when servicing the request if any.
	Err error
}

MessageReplyEvent is the event sent when a new message is received.

func (*MessageReplyEvent) String

func (e *MessageReplyEvent) String() string

String returns a string representation of the MessageReplyEvent.

type MessageSentEvent

type MessageSentEvent struct {
	// MessageID is the local unique identifier for the message, generated
	// when the message was enqueued.
	MessageID *[cConstants.MessageIDLength]byte

	// Err is the error encountered when sending the message if any.
	Err error
}

MessageSentEvent is the event sent when a message has been fully transmitted.

func (*MessageSentEvent) String

func (e *MessageSentEvent) String() string

String returns a string representation of a MessageSentEvent.

type Queue

type Queue struct {
	sync.Mutex
	// contains filtered or unexported fields
}

Queue is our in-memory queue implementation used as our egress FIFO queue for messages sent by the client.

func (*Queue) Peek

func (q *Queue) Peek() (Item, error)

Peek returns the next message ref from the queue without modifying the queue.

func (*Queue) Pop

func (q *Queue) Pop() (Item, error)

Pop pops the next message ref off the queue and returns nil upon success, otherwise an error is returned.

func (*Queue) Push

func (q *Queue) Push(e Item) error

Push pushes the given message ref onto the queue and returns nil on success, otherwise an error is returned.

type Session

type Session struct {
	worker.Worker
	// contains filtered or unexported fields
}

Session is the struct type that keeps state for a given session.

func New

func New(ctx context.Context, fatalErrCh chan error, logBackend *log.Backend, user string, cfg *config.Config, linkKey *ecdh.PrivateKey) (*Session, error)

New establishes a session with provider using key. This method will block until session is connected to the Provider.

func (*Session) GetPandaConfig

func (s *Session) GetPandaConfig() *config.Panda

func (*Session) GetService

func (s *Session) GetService(serviceName string) (*utils.ServiceDescriptor, error)

GetService returns a randomly selected service matching the specified service name

func (*Session) SendUnreliableMessage

func (s *Session) SendUnreliableMessage(recipient, provider string, message []byte) ([]byte, error)

SendUnreliableMessage sends message without any automatic retransmissions.

type TimerQueue

type TimerQueue struct {
	sync.Mutex
	sync.Cond
	worker.Worker
	// contains filtered or unexported fields
}

TimerQueue is a queue that delays messages before forwarding to another queue

func NewTimerQueue

func NewTimerQueue(nextQueue nqueue) *TimerQueue

NewTimerQueue intantiates a new TimerQueue and starts the worker routine

func (*TimerQueue) Push

func (a *TimerQueue) Push(i Item)

Push adds a message to the TimerQueue

func (*TimerQueue) Remove

func (a *TimerQueue) Remove(i Item) error

Remove removes a Message from the TimerQueue

Jump to

Keyboard shortcuts

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