transport

package
v0.0.2-0...-1c7e8a7 Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2021 License: Unlicense Imports: 17 Imported by: 0

Documentation

Overview

Package transport provides a listener and sender channel for unicast and multicast UDP IPv4 short message chat protocol with a pre shared key, forward error correction facilities with a nice friendly declaration syntax

Index

Constants

View Source
const (
	UDPMulticastAddress = "224.0.0.1"

	DefaultPort = 11049
)

Variables

View Source
var DefaultIP = net.IPv4(224, 0, 0, 1)
View Source
var MulticastAddress = &net.UDPAddr{IP: DefaultIP, Port: DefaultPort}

Functions

func Check

func Check(err error) bool

func Debug

func Debug(a ...interface{})

func Debugc

func Debugc(fn func() string)

func Debugf

func Debugf(format string, a ...interface{})

func Debugs

func Debugs(a interface{})

func DecryptMessage

func DecryptMessage(creator string, ciph cipher.AEAD, data []byte) (msg []byte, err error)

func EncryptMessage

func EncryptMessage(creator string, ciph cipher.AEAD, magic []byte, nonce, data []byte) (msg []byte, err error)

EncryptMessage encrypts a message, if the nonce is given it uses that otherwise it generates a new one. If there is no cipher this just returns a message with the given magic prepended.

func Error

func Error(a ...interface{})

func Errorc

func Errorc(fn func() string)

func Errorf

func Errorf(format string, a ...interface{})

func Errors

func Errors(a interface{})

func Fatal

func Fatal(a ...interface{})

func Fatalc

func Fatalc(fn func() string)

func Fatalf

func Fatalf(format string, a ...interface{})

func Fatals

func Fatals(a interface{})

func GetNonce

func GetNonce(ciph cipher.AEAD) (nonce []byte, err error)

func GetShards

func GetShards(data []byte) (shards [][]byte)

GetShards returns a buffer iterator to feed to Channel.SendMany containing fec encoded shards built from the provided buffer

func Handle

func Handle(address string, channel *Channel,
	handlers Handlers, maxDatagramSize int, quit qu.C)

Handle listens for messages, decodes them, aggregates them, recovers the data from the reed solomon fec shards received and invokes the handler provided matching the magic on the complete received messages

func Info

func Info(a ...interface{})

func Infoc

func Infoc(fn func() string)

func Infof

func Infof(format string, a ...interface{})

func Infos

func Infos(a interface{})

func Listen

func Listen(address string, channel *Channel, maxDatagramSize int, handlers Handlers,
	quit qu.C) (conn *net.UDPConn, err error)

Listen binds to the UDP Address and port given and writes packets received from that Address to a buffer which is passed to a handler

func ListenBroadcast

func ListenBroadcast(
	port int,
	channel *Channel,
	maxDatagramSize int,
	handlers Handlers,
	quit qu.C,
) (conn *net.UDPConn, err error)

ListenBroadcast binds to the UDP Address and port given and writes packets received from that Address to a buffer which is passed to a handler

func NewBroadcaster

func NewBroadcaster(port int, maxDatagramSize int) (conn *net.UDPConn, err error)

NewBroadcaster creates a new UDP multicast connection on which to broadcast

func NewSender

func NewSender(address string, maxDatagramSize int) (conn *net.UDPConn, err error)

NewSender creates a new UDP connection to a specified address

func PrevCallers

func PrevCallers() (out string)

func Trace

func Trace(a ...interface{})

func Tracec

func Tracec(fn func() string)

func Tracef

func Tracef(format string, a ...interface{})

func Traces

func Traces(a interface{})

func Warn

func Warn(a ...interface{})

func Warnc

func Warnc(fn func() string)

func Warnf

func Warnf(format string, a ...interface{})

func Warns

func Warns(a interface{})

Types

type Channel

type Channel struct {
	Ready qu.C

	Creator string

	MaxDatagramSize int

	Receiver *net.UDPConn

	Sender *net.UDPConn
	// contains filtered or unexported fields
}

func NewBroadcastChannel

func NewBroadcastChannel(creator string, ctx interface{}, key string, port int, maxDatagramSize int, handlers Handlers,
	quit qu.C) (channel *Channel, err error)

NewBroadcastChannel returns a broadcaster and listener with a given handler on a multicast address and specified port. The handlers define the messages that will be processed and any other messages are ignored

func NewUnicastChannel

func NewUnicastChannel(creator string, ctx interface{}, key, sender, receiver string, maxDatagramSize int,
	handlers Handlers, quit qu.C) (channel *Channel, err error)

NewUnicastChannel sets up a listener and sender for a specified destination

func (*Channel) Close

func (c *Channel) Close() (err error)

Close the multicast

func (*Channel) Send

func (c *Channel) Send(magic []byte, nonce []byte, data []byte) (n int, err error)

Send fires off some data through the configured multicast's outbound.

func (*Channel) SendMany

func (c *Channel) SendMany(magic []byte, b [][]byte) (err error)

SendMany sends a BufIter of shards as produced by GetShards

func (*Channel) SetDestination

func (c *Channel) SetDestination(dst string) (err error)

SetDestination changes the address the outbound connection of a multicast directs to

type Connection

type Connection struct {
	SendConn net.Conn
	// contains filtered or unexported fields
}

Connection is the state and working memory references for a simple reliable UDP lan transport, encrypted by a GCM AES cipher, with the simple protocol of sending out 9 packets containing encrypted FEC shards containing a slice of bytes.

This protocol probably won't work well outside of a multicast lan in adverse conditions but it is designed for local network control systems todo: it is if the updated fec segmenting code is put in

func (*Connection) CreateShards

func (c *Connection) CreateShards(b, magic []byte) (shards [][]byte,
	err error)

func (*Connection) Listen

func (c *Connection) Listen(handlers HandleFunc, ifc interface{},
	lastSent *time.Time, firstSender *string) (err error)

func (*Connection) Send

func (c *Connection) Send(b, magic []byte) (err error)

func (*Connection) SendShards

func (c *Connection) SendShards(shards [][]byte) (err error)

func (*Connection) SendShardsTo

func (c *Connection) SendShardsTo(shards [][]byte, addr *net.UDPAddr) (err error)

func (*Connection) SendTo

func (c *Connection) SendTo(addr *net.UDPAddr, b, magic []byte) (err error)

func (*Connection) SetSendConn

func (c *Connection) SetSendConn(ad string) (err error)

type HandleFunc

type HandleFunc map[string]func(ctx interface{}) func(b []byte) (err error)

type HandlerFunc

type HandlerFunc func(ctx interface{}, src net.Addr, dst string, b []byte) (err error)

HandlerFunc is a function that is used to process a received message

type Handlers

type Handlers map[string]HandlerFunc

type MsgBuffer

type MsgBuffer struct {
	Buffers [][]byte
	First   time.Time
	Decoded bool
	Source  net.Addr
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

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