adc

package
v0.0.0-...-27520ef Latest Latest
Warning

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

Go to latest
Published: Feb 23, 2020 License: BSD-3-Clause Imports: 15 Imported by: 2

Documentation

Index

Constants

View Source
const (
	ProtoADC  = `ADC/1.0`   // ADC protocol name in CTM requests
	ProtoADCS = `ADCS/0.10` // ADCS protocol name in CTM requests

	SchemaADC  = "adc"  // URL scheme for ADC protocol
	SchemaADCS = "adcs" // URL scheme for ADC-over-TLS protocol
)
View Source
const (
	CategoryHub      = Category(1)
	CategoryUser     = Category(2)
	CategorySearch   = Category(4)
	CategoryFileList = Category(8)
)
View Source
const (
	Success     = Severity(0)
	Recoverable = Severity(1)
	Fatal       = Severity(2)
)
View Source
const (
	FileListBZIP = "files.xml.bz2"
)

Variables

View Source
var (
	// FeaBASE indicates base ADC protocol support.
	//
	// See: https://adc.dcbase.org/Protocol, http://adc.sourceforge.net/ADC.html
	FeaBASE = Feature{'B', 'A', 'S', 'E'}
	FeaBAS0 = Feature{'B', 'A', 'S', '0'} // TODO: clarify

	FeaTIGR = Feature{'T', 'I', 'G', 'R'} // Tiger hash support
	FeaPING = Feature{'P', 'I', 'N', 'G'} // Send additional field in hub's info message
	FeaONID = Feature{'O', 'N', 'I', 'D'} // Online services identification
	FeaBZIP = Feature{'B', 'Z', 'I', 'P'} // bzip2 compression of filelist, adds virtual files.xml.bz2 file
	FeaTS   = Feature{'T', 'S', '0', '0'} // Unix timestamps in messages
	FeaZLIF = Feature{'Z', 'L', 'I', 'F'} // Compressed communication (Full), adds ZON
	FeaZLIG = Feature{'Z', 'L', 'I', 'G'} // Compressed communication (Get)
	FeaSEGA = Feature{'S', 'E', 'G', 'A'} // Grouping of file extensions in search
	FeaUCMD = Feature{'U', 'C', 'M', 'D'} // User commands
	FeaUCM0 = Feature{'U', 'C', 'M', '0'} // User commands
	FeaADCS = Feature{'A', 'D', 'C', 'S'} // ADC over TLS for C-H

	FeaADC0 = Feature{'A', 'D', 'C', '0'} // ADC over TLS for C-C
	FeaNAT0 = Feature{'N', 'A', 'T', '0'} // NAT traversal for C-C
	FeaASCH = Feature{'A', 'S', 'C', 'H'}
	FeaSUD1 = Feature{'S', 'U', 'D', '1'}
	FeaSUDP = Feature{'S', 'U', 'D', 'P'}
	FeaCCPM = Feature{'C', 'C', 'P', 'M'}

	// FeaTCP4 should be set in user's INF to indicate that the client has an open TCP4 port (is active).
	FeaTCP4 = Feature{'T', 'C', 'P', '4'}
	// FeaTCP6 should be set in user's INF to indicate that the client has an open TCP6 port (is active).
	FeaTCP6 = Feature{'T', 'C', 'P', '6'}

	FeaUDP4 = Feature{'U', 'D', 'P', '4'}
	FeaUDP6 = Feature{'U', 'D', 'P', '6'}
)

Functions

func Marshal

func Marshal(buf *bytes.Buffer, o Message) error

Marshal encodes ADC message payload to a buffer. It won't encode the message name.

func MustMarshal

func MustMarshal(o Message) []byte

MustMarshal encodes an ADC message payload into a byte slice and panics on error.

func NormalizeAddr

func NormalizeAddr(addr string) (string, error)

NormalizeAddr parses and normalizes the address to scheme://host:port format.

func ParseAddr

func ParseAddr(addr string) (*url.URL, error)

ParseAddr parses an ADC address as a URL.

func RegisterMessage

func RegisterMessage(m Message)

func Unmarshal

func Unmarshal(s []byte, o interface{}) error

Unmarshal decodes ADC message to a given type.

Types

type AddFeatures

type AddFeatures []string

func (AddFeatures) MarshalADC

func (f AddFeatures) MarshalADC(buf *bytes.Buffer) error

type AwayType

type AwayType int
const (
	AwayTypeNone     AwayType = 0
	AwayTypeNormal   AwayType = 1
	AwayTypeExtended AwayType = 2
)

type BoolInt

type BoolInt bool

func (BoolInt) MarshalADC

func (f BoolInt) MarshalADC(buf *bytes.Buffer) error

func (*BoolInt) UnmarshalADC

func (f *BoolInt) UnmarshalADC(s []byte) error

type BroadcastPacket

type BroadcastPacket struct {
	ID  SID
	Msg Message
}

func (*BroadcastPacket) DecodeMessage

func (p *BroadcastPacket) DecodeMessage() error

func (*BroadcastPacket) DecodeMessageTo

func (p *BroadcastPacket) DecodeMessageTo(m Message) error

func (*BroadcastPacket) Kind

func (*BroadcastPacket) Kind() byte

func (*BroadcastPacket) MarshalPacketADC

func (p *BroadcastPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*BroadcastPacket) Message

func (p *BroadcastPacket) Message() Message

func (*BroadcastPacket) SetMessage

func (p *BroadcastPacket) SetMessage(m Message)

func (*BroadcastPacket) Source

func (p *BroadcastPacket) Source() SID

func (*BroadcastPacket) UnmarshalPacketADC

func (p *BroadcastPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type CID

type CID = types.CID

type Category

type Category int

type ChatMessage

type ChatMessage struct {
	Text string `adc:"#"`
	PM   *SID   `adc:"PM"`
	Me   bool   `adc:"ME"`
	TS   int64  `adc:"TS"`
}

func (ChatMessage) Cmd

func (ChatMessage) Cmd() MsgType

type ClientPacket

type ClientPacket struct {
	Msg Message
}

func (*ClientPacket) DecodeMessage

func (p *ClientPacket) DecodeMessage() error

func (*ClientPacket) DecodeMessageTo

func (p *ClientPacket) DecodeMessageTo(m Message) error

func (*ClientPacket) Kind

func (*ClientPacket) Kind() byte

func (*ClientPacket) MarshalPacketADC

func (p *ClientPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*ClientPacket) Message

func (p *ClientPacket) Message() Message

func (*ClientPacket) SetMessage

func (p *ClientPacket) SetMessage(m Message)

func (*ClientPacket) UnmarshalPacketADC

func (p *ClientPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type ConnectRequest

type ConnectRequest struct {
	Proto string `adc:"#"`
	Port  int    `adc:"#"`
	Token string `adc:"#"`
}

func (ConnectRequest) Cmd

func (ConnectRequest) Cmd() MsgType

type DirectPacket

type DirectPacket struct {
	ID  SID
	To  SID
	Msg Message
}

func (*DirectPacket) DecodeMessage

func (p *DirectPacket) DecodeMessage() error

func (*DirectPacket) DecodeMessageTo

func (p *DirectPacket) DecodeMessageTo(m Message) error

func (*DirectPacket) Kind

func (*DirectPacket) Kind() byte

func (*DirectPacket) MarshalPacketADC

func (p *DirectPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*DirectPacket) Message

func (p *DirectPacket) Message() Message

func (*DirectPacket) SetMessage

func (p *DirectPacket) SetMessage(m Message)

func (*DirectPacket) Source

func (p *DirectPacket) Source() SID

func (*DirectPacket) Target

func (p *DirectPacket) Target() SID

func (*DirectPacket) UnmarshalPacketADC

func (p *DirectPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type Disconnect

type Disconnect struct {
	ID       SID    `adc:"#"`
	Message  string `adc:"MS"`
	By       SID    `adc:"ID"`
	Duration int    `adc:"TL"`
	Redirect string `adc:"RD"`
}

func (Disconnect) Cmd

func (Disconnect) Cmd() MsgType

type EchoPacket

type EchoPacket DirectPacket

func (*EchoPacket) DecodeMessage

func (p *EchoPacket) DecodeMessage() error

func (*EchoPacket) DecodeMessageTo

func (p *EchoPacket) DecodeMessageTo(m Message) error

func (*EchoPacket) Kind

func (*EchoPacket) Kind() byte

func (*EchoPacket) MarshalPacketADC

func (p *EchoPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*EchoPacket) Message

func (p *EchoPacket) Message() Message

func (*EchoPacket) SetMessage

func (p *EchoPacket) SetMessage(m Message)

func (*EchoPacket) Source

func (p *EchoPacket) Source() SID

func (*EchoPacket) Target

func (p *EchoPacket) Target() SID

func (*EchoPacket) UnmarshalPacketADC

func (p *EchoPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type Error

type Error struct {
	Status
}

func (Error) Error

func (e Error) Error() string

type ExtFeatures

type ExtFeatures []Feature

func (ExtFeatures) Has

func (f ExtFeatures) Has(s Feature) bool

func (ExtFeatures) MarshalADC

func (f ExtFeatures) MarshalADC(buf *bytes.Buffer) error

func (*ExtFeatures) UnmarshalADC

func (f *ExtFeatures) UnmarshalADC(s []byte) error

type ExtGroup

type ExtGroup int
const (
	ExtNone  ExtGroup = 0x00
	ExtAudio ExtGroup = 0x01
	ExtArch  ExtGroup = 0x02
	ExtDoc   ExtGroup = 0x04
	ExtExe   ExtGroup = 0x08
	ExtImage ExtGroup = 0x10
	ExtVideo ExtGroup = 0x20
)

func (ExtGroup) Has

func (t ExtGroup) Has(st ExtGroup) bool

func (ExtGroup) Matches

func (t ExtGroup) Matches(ext string) bool

type Feature

type Feature [4]byte

func (Feature) MarshalADC

func (f Feature) MarshalADC(buf *bytes.Buffer) error

func (Feature) String

func (f Feature) String() string

func (*Feature) UnmarshalADC

func (f *Feature) UnmarshalADC(s []byte) error

type FeaturePacket

type FeaturePacket struct {
	ID  SID
	Sel []FeatureSel
	Msg Message
}

func (*FeaturePacket) DecodeMessage

func (p *FeaturePacket) DecodeMessage() error

func (*FeaturePacket) DecodeMessageTo

func (p *FeaturePacket) DecodeMessageTo(m Message) error

func (*FeaturePacket) Kind

func (*FeaturePacket) Kind() byte

func (*FeaturePacket) MarshalPacketADC

func (p *FeaturePacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*FeaturePacket) Message

func (p *FeaturePacket) Message() Message

func (*FeaturePacket) SetMessage

func (p *FeaturePacket) SetMessage(m Message)

func (*FeaturePacket) Source

func (p *FeaturePacket) Source() SID

func (*FeaturePacket) UnmarshalPacketADC

func (p *FeaturePacket) UnmarshalPacketADC(name MsgType, data []byte) error

type FeatureSel

type FeatureSel struct {
	Fea Feature
	Sel bool
}

type Field

type Field struct {
	Tag   [2]byte
	Value string
}

func (Field) String

func (f Field) String() string

type Fields

type Fields []Field

func (Fields) MarshalADC

func (f Fields) MarshalADC(buf *bytes.Buffer) error

func (*Fields) UnmarshalADC

func (f *Fields) UnmarshalADC(data []byte) error

type FileType

type FileType int
const (
	FileTypeAny  FileType = 0
	FileTypeFile FileType = 1
	FileTypeDir  FileType = 2
)

type GetInfoRequest

type GetInfoRequest struct {
	Type string `adc:"#"`
	Path string `adc:"#"`
}

func (GetInfoRequest) Cmd

func (GetInfoRequest) Cmd() MsgType

type GetPassword

type GetPassword struct {
	Salt []byte
}

func (GetPassword) Cmd

func (GetPassword) Cmd() MsgType

func (GetPassword) MarshalADC

func (m GetPassword) MarshalADC(buf *bytes.Buffer) error

func (*GetPassword) UnmarshalADC

func (m *GetPassword) UnmarshalADC(data []byte) error

type GetRequest

type GetRequest struct {
	Type       string
	Path       string
	Start      int64
	Bytes      int64
	Compressed bool
}

func (GetRequest) Cmd

func (GetRequest) Cmd() MsgType

func (GetRequest) MarshalADC

func (m GetRequest) MarshalADC(buf *bytes.Buffer) error

func (*GetRequest) UnmarshalADC

func (m *GetRequest) UnmarshalADC(data []byte) error

type GetResponse

type GetResponse GetRequest

func (GetResponse) Cmd

func (GetResponse) Cmd() MsgType

func (GetResponse) MarshalADC

func (m GetResponse) MarshalADC(buf *bytes.Buffer) error

func (*GetResponse) UnmarshalADC

func (m *GetResponse) UnmarshalADC(data []byte) error

type HubInfo

type HubInfo struct {
	Name        string   `adc:"NI,req"`
	Version     string   `adc:"VE,req"`
	Application string   `adc:"AP"`
	Desc        string   `adc:"DE"`
	Type        UserType `adc:"CT"`

	Address    string `adc:"HH"` // Hub Host address (ADC/ADCS URL address form)
	Website    string `adc:"WS"` // Hub Website
	Network    string `adc:"NE"` // Hub Network
	Owner      string `adc:"OW"` // Hub Owner name
	Users      int    `adc:"UC"` // Current user count, required
	Share      int    `adc:"SS"` // Total share size
	Files      int    `adc:"SF"` // Total files shared
	MinShare   int    `adc:"MS"` // Minimum share required to enter hub ( bytes )
	MaxShare   int64  `adc:"XS"` // Maximum share for entering hub ( bytes )
	MinSlots   int    `adc:"ML"` // Minimum slots required to enter hub
	MaxSlots   int    `adc:"XL"` // Maximum slots for entering hub
	UsersLimit int    `adc:"MC"` // Maximum possible clients ( users ) who can connect
	Uptime     int    `adc:"UP"` // Hub uptime (seconds)

}

func (HubInfo) Cmd

func (HubInfo) Cmd() MsgType

type HubPacket

type HubPacket InfoPacket

func (*HubPacket) DecodeMessage

func (p *HubPacket) DecodeMessage() error

func (*HubPacket) DecodeMessageTo

func (p *HubPacket) DecodeMessageTo(m Message) error

func (*HubPacket) Kind

func (*HubPacket) Kind() byte

func (*HubPacket) MarshalPacketADC

func (p *HubPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*HubPacket) Message

func (p *HubPacket) Message() Message

func (*HubPacket) SetMessage

func (p *HubPacket) SetMessage(m Message)

func (*HubPacket) UnmarshalPacketADC

func (p *HubPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type InfoPacket

type InfoPacket struct {
	Msg Message
}

func (*InfoPacket) DecodeMessage

func (p *InfoPacket) DecodeMessage() error

func (*InfoPacket) DecodeMessageTo

func (p *InfoPacket) DecodeMessageTo(m Message) error

func (*InfoPacket) Kind

func (*InfoPacket) Kind() byte

func (*InfoPacket) MarshalPacketADC

func (p *InfoPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*InfoPacket) Message

func (p *InfoPacket) Message() Message

func (*InfoPacket) SetMessage

func (p *InfoPacket) SetMessage(m Message)

func (*InfoPacket) UnmarshalPacketADC

func (p *InfoPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type Marshaler

type Marshaler interface {
	MarshalADC(buf *bytes.Buffer) error
}

Marshaler is an interface for ADC messages that can marshal itself.

type Message

type Message interface {
	Cmd() MsgType
}

func UnmarshalMessage

func UnmarshalMessage(name MsgType, data []byte) (Message, error)

type ModFeatures

type ModFeatures map[Feature]bool

func (ModFeatures) Clone

func (f ModFeatures) Clone() ModFeatures

func (ModFeatures) Intersect

func (f ModFeatures) Intersect(fp ModFeatures) ModFeatures

func (ModFeatures) IsSet

func (f ModFeatures) IsSet(s Feature) bool

func (ModFeatures) Join

func (f ModFeatures) Join() string

func (ModFeatures) MarshalADC

func (f ModFeatures) MarshalADC(buf *bytes.Buffer) error

func (ModFeatures) SetFrom

func (f ModFeatures) SetFrom(fp ModFeatures) ModFeatures

func (*ModFeatures) UnmarshalADC

func (f *ModFeatures) UnmarshalADC(s []byte) error

type MsgType

type MsgType [3]byte

func (MsgType) String

func (s MsgType) String() string

type NoArgs

type NoArgs struct{}

func (NoArgs) MarshalADC

func (NoArgs) MarshalADC(buf *bytes.Buffer) error

func (NoArgs) UnmarshalADC

func (NoArgs) UnmarshalADC(data []byte) error

type PID

type PID = CID

type Packet

type Packet interface {
	Kind() byte
	Message() Message
	SetMessage(m Message)
	DecodeMessage() error
	DecodeMessageTo(m Message) error
	MarshalPacketADC(buf *bytes.Buffer) error
	UnmarshalPacketADC(name MsgType, data []byte) error
}

func DecodePacket

func DecodePacket(p []byte) (Packet, error)

DecodePacket decodes ADC line. The message payload is a copy.

func DecodePacketRaw

func DecodePacketRaw(p []byte) (Packet, error)

DecodePacketRaw decodes ADC line and returns packet with a RawMessage. RawMessage data slice will point to p, thus it's the caller's responsibility to copy it.

type Password

type Password struct {
	Hash tiger.Hash `adc:"#"`
}

func (Password) Cmd

func (Password) Cmd() MsgType

type Path

type Path []string

func (Path) MarshalADC

func (p Path) MarshalADC(buf *bytes.Buffer) error

func (*Path) UnmarshalADC

func (p *Path) UnmarshalADC(data []byte) error

type PeerPacket

type PeerPacket interface {
	Packet
	Source() SID
}

type RawMessage

type RawMessage struct {
	Type MsgType
	Data []byte
}

func (*RawMessage) Cmd

func (m *RawMessage) Cmd() MsgType

func (*RawMessage) Decode

func (m *RawMessage) Decode() (Message, error)

func (*RawMessage) MarshalADC

func (m *RawMessage) MarshalADC(buf *bytes.Buffer) error

func (*RawMessage) UnmarshalADC

func (m *RawMessage) UnmarshalADC(data []byte) error

type Reader

type Reader struct {
	*lineproto.Reader

	// OnKeepAlive is called when an empty (keep-alive) message is received.
	OnKeepAlive func() error
}

Reader is not safe for concurrent use.

func NewReader

func NewReader(r io.Reader) *Reader

func (*Reader) ReadClient

func (r *Reader) ReadClient() (Message, error)

func (*Reader) ReadInfo

func (r *Reader) ReadInfo() (Message, error)

func (*Reader) ReadPacket

func (r *Reader) ReadPacket() (Packet, error)

ReadPacket reads and decodes a single ADC command.

func (*Reader) ReadPacketRaw

func (r *Reader) ReadPacketRaw() (Packet, error)

ReadPacketRaw reads and decodes a single ADC command. The caller must copy the payload.

type RevConnectRequest

type RevConnectRequest struct {
	Proto string `adc:"#"`
	Token string `adc:"#"`
}

func (RevConnectRequest) Cmd

func (RevConnectRequest) Cmd() MsgType

type SID

type SID = types.SID

type SIDAssign

type SIDAssign struct {
	SID SID
}

func (SIDAssign) Cmd

func (SIDAssign) Cmd() MsgType

func (SIDAssign) MarshalADC

func (m SIDAssign) MarshalADC(buf *bytes.Buffer) error

func (*SIDAssign) UnmarshalADC

func (m *SIDAssign) UnmarshalADC(data []byte) error

type SearchRequest

type SearchRequest struct {
	Token string   `adc:"TO"`
	And   []string `adc:"AN"`
	Not   []string `adc:"NO"`
	Ext   []string `adc:"EX"`

	Le int64 `adc:"LE"`
	Ge int64 `adc:"GE"`
	Eq int64 `adc:"EQ"`

	Type FileType `adc:"TY"`

	// TIGR ext
	TTH *TTH `adc:"TR"`

	// SEGA ext
	Group ExtGroup `adc:"GR"`
	NoExt []string `adc:"RX"`
}

func (SearchRequest) Cmd

func (SearchRequest) Cmd() MsgType

type SearchResult

type SearchResult struct {
	Token string `adc:"TO"`
	Path  string `adc:"FN"`
	Size  int64  `adc:"SI"`
	Slots int    `adc:"SL"`

	// TIGR ext
	TTH *TTH `adc:"TR"`
}

func (SearchResult) Cmd

func (SearchResult) Cmd() MsgType

type Severity

type Severity int

type Status

type Status struct {
	Sev  Severity
	Code int
	Msg  string
}

func (Status) Cmd

func (Status) Cmd() MsgType

func (Status) Err

func (st Status) Err() error

func (Status) MarshalADC

func (st Status) MarshalADC(buf *bytes.Buffer) error

func (Status) Ok

func (st Status) Ok() bool

func (Status) Recoverable

func (st Status) Recoverable() bool

func (*Status) UnmarshalADC

func (st *Status) UnmarshalADC(s []byte) error

type String

type String string

func (String) MarshalADC

func (f String) MarshalADC(buf *bytes.Buffer) error

func (*String) UnmarshalADC

func (f *String) UnmarshalADC(s []byte) error

type Supported

type Supported struct {
	Features ModFeatures
}

func (Supported) Cmd

func (Supported) Cmd() MsgType

func (Supported) MarshalADC

func (m Supported) MarshalADC(buf *bytes.Buffer) error

func (*Supported) UnmarshalADC

func (m *Supported) UnmarshalADC(data []byte) error

type TTH

type TTH = tiger.Hash

TTH is a Tiger Tree Hash value.

type TargetPacket

type TargetPacket interface {
	Packet
	Target() SID
}

type UDPPacket

type UDPPacket struct {
	ID  CID
	Msg Message
}

func (*UDPPacket) DecodeMessage

func (p *UDPPacket) DecodeMessage() error

func (*UDPPacket) DecodeMessageTo

func (p *UDPPacket) DecodeMessageTo(m Message) error

func (*UDPPacket) Kind

func (*UDPPacket) Kind() byte

func (*UDPPacket) MarshalPacketADC

func (p *UDPPacket) MarshalPacketADC(buf *bytes.Buffer) error

func (*UDPPacket) Message

func (p *UDPPacket) Message() Message

func (*UDPPacket) SetMessage

func (p *UDPPacket) SetMessage(m Message)

func (*UDPPacket) UnmarshalPacketADC

func (p *UDPPacket) UnmarshalPacketADC(name MsgType, data []byte) error

type Unmarshaler

type Unmarshaler interface {
	UnmarshalADC(data []byte) error
}

Unmarshaler is an interface for ADC messages that can marshal itself.

type UserCommand

type UserCommand struct {
	Path        Path     `adc:"#"`
	Command     string   `adc:"TT"`
	Category    Category `adc:"CT"`
	Remove      int      `adc:"RM"`
	Constrained int      `adc:"CO"`
	Separator   int      `adc:"SP"`
}

func (UserCommand) Cmd

func (UserCommand) Cmd() MsgType

type UserInfo

type UserInfo struct {
	Id   CID    `adc:"ID"`
	Pid  *PID   `adc:"PD"` // sent only to hub
	Name string `adc:"NI,req"`

	Ip4  string `adc:"I4"`
	Ip6  string `adc:"I6"`
	Udp4 int    `adc:"U4"`
	Udp6 int    `adc:"U6"`

	ShareSize  int64 `adc:"SS,req"`
	ShareFiles int   `adc:"SF,req"`

	Version     string `adc:"VE,req"`
	Application string `adc:"AP"`

	MaxUpload   string `adc:"US"`
	MaxDownload string `adc:"DS"`

	Slots         int `adc:"SL,req"`
	SlotsFree     int `adc:"FS,req"`
	AutoSlotLimit int `adc:"AS"`

	Email string `adc:"EM"`
	Desc  string `adc:"DE"`

	HubsNormal     int `adc:"HN,req"`
	HubsRegistered int `adc:"HR,req"`
	HubsOperator   int `adc:"HO,req"`

	Token string `adc:"TO"` // C-C only

	Type UserType `adc:"CT"`
	Away AwayType `adc:"AW"`
	Ref  string   `adc:"RF"`

	Features ExtFeatures `adc:"SU,req"`

	KP string `adc:"KP"`

	Address string `adc:"EA"`
}

func (UserInfo) Cmd

func (UserInfo) Cmd() MsgType

func (*UserInfo) Normalize

func (u *UserInfo) Normalize()

type UserInfoMod

type UserInfoMod Fields

func (UserInfoMod) Cmd

func (UserInfoMod) Cmd() MsgType

func (UserInfoMod) MarshalADC

func (m UserInfoMod) MarshalADC(buf *bytes.Buffer) error

func (*UserInfoMod) UnmarshalADC

func (m *UserInfoMod) UnmarshalADC(data []byte) error

type UserType

type UserType int
const (
	UserTypeNone       UserType = 0x00
	UserTypeBot        UserType = 0x01
	UserTypeRegistered UserType = 0x02
	UserTypeOperator   UserType = 0x04
	UserTypeSuperUser  UserType = 0x08
	UserTypeHubOwner   UserType = 0x10
	UserTypeHub        UserType = 0x20
	UserTypeHidden     UserType = 0x40
)

func (UserType) Is

func (t UserType) Is(st UserType) bool

type WriteStream

type WriteStream interface {
	// WriteMessage writes a single message to the buffer.
	WriteMessage(msg Message) error
	// Flush flushes the buffer.
	Flush() error
}

WriteStream is a stream of ADC messages to a specific destination.

type Writer

type Writer struct {
	*lineproto.Writer
	// contains filtered or unexported fields
}

Writer is protocol message writer for ADC protocol. It's not safe for a concurrent use.

func NewWriter

func NewWriter(w io.Writer) *Writer

NewWriter creates a new ADC protocol writer with a default buffer size.

func NewWriterSize

func NewWriterSize(w io.Writer, buf int) *Writer

NewWriterSize creates a new ADC protocol writer with a specified buffer size.

func (*Writer) BroadcastStream

func (w *Writer) BroadcastStream(from SID) WriteStream

BroadcastStream creates a stream of BroadcastPackets from a given SID.

func (*Writer) ClientStream

func (w *Writer) ClientStream() WriteStream

ClientStream creates a stream of ClientPackets.

func (*Writer) DirectStream

func (w *Writer) DirectStream(from, to SID) WriteStream

DirectStream creates a stream of DirectPackets from a given SID to a given target SID.

func (*Writer) EchoStream

func (w *Writer) EchoStream(from, to SID) WriteStream

EchoStream creates a stream of EchoPackets from a given SID to a given target SID.

func (*Writer) FeatureStream

func (w *Writer) FeatureStream(from SID, sel []FeatureSel) WriteStream

FeatureStream creates a stream of FeaturePackets from a given SID to peers matching a selector.

func (*Writer) Flush

func (w *Writer) Flush() error

Flush the underlying buffer. Should be called after each WritePacket batch.

func (*Writer) HubStream

func (w *Writer) HubStream() WriteStream

HubStream creates a stream of HubPackets.

func (*Writer) InfoStream

func (w *Writer) InfoStream() WriteStream

InfoStream creates a stream of InfoPackets.

func (*Writer) WriteBroadcast

func (w *Writer) WriteBroadcast(id SID, msg Message) error

WriteBroadcast writes a single BroadcastPacket to the buffer.

func (*Writer) WriteClient

func (w *Writer) WriteClient(msg Message) error

WriteClient writes a single ClientPacket to the buffer.

func (*Writer) WriteDirect

func (w *Writer) WriteDirect(from, to SID, msg Message) error

WriteDirect writes a single DirectPacket to the buffer.

func (*Writer) WriteEcho

func (w *Writer) WriteEcho(from, to SID, msg Message) error

WriteEcho writes a single EchoPacket to the buffer.

func (*Writer) WriteFeature

func (w *Writer) WriteFeature(from SID, sel []FeatureSel, msg Message) error

WriteFeature writes a single FeaturePacket to the buffer.

func (*Writer) WriteHub

func (w *Writer) WriteHub(msg Message) error

WriteHub writes a single HubPacket to the buffer.

func (*Writer) WriteInfo

func (w *Writer) WriteInfo(msg Message) error

WriteInfo writes a single InfoPacket to the buffer.

func (*Writer) WriteKeepAlive

func (w *Writer) WriteKeepAlive() error

WriteKeepAlive writes an empty (keep alive) message. It is caller's responsibility to flush the writer.

func (*Writer) WritePacket

func (w *Writer) WritePacket(p Packet) error

type ZOff

type ZOff struct {
	NoArgs
}

func (ZOff) Cmd

func (ZOff) Cmd() MsgType

type ZOn

type ZOn struct {
	NoArgs
}

func (ZOn) Cmd

func (ZOn) Cmd() MsgType

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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