Documentation ¶
Index ¶
- Constants
- Variables
- func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool) modes.ModeChanges
- func CanonicalizeMaskWildcard(userhost string) (expanded string, err error)
- func Casefold(str string) (string, error)
- func CasefoldChannel(name string) (string, error)
- func CasefoldName(name string) (string, error)
- func GenerateHelpIndex(lm *languages.Manager, forOpers bool) map[string]string
- func GetLabel(msg ircmsg.IrcMessage) string
- func IncompatibleSchemaError(currentVersion string) (result *incompatibleSchemaError)
- func InitDB(path string)
- func OpenDatabase(config *Config) (*buntdb.DB, error)
- func ParseDefaultChannelModes(rawModes *string) modes.Modes
- func Skeleton(name string) (string, error)
- func UpgradeDB(config *Config) (err error)
- type AccountConfig
- type AccountCredentials
- type AccountManager
- func (am *AccountManager) AccountToClients(account string) (result []*Client)
- func (am *AccountManager) AuthenticateByCertFP(client *Client) error
- func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error
- func (am *AccountManager) ChannelsForAccount(account string) (channels []string)
- func (am *AccountManager) EnforcementStatus(cfnick, skeleton string) (account string, method NickEnforcementMethod)
- func (am *AccountManager) Initialize(server *Server)
- func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error)
- func (am *AccountManager) Login(client *Client, account ClientAccount)
- func (am *AccountManager) Logout(client *Client)
- func (am *AccountManager) ModifyAccountSettings(account string, munger settingsMunger) (newSettings AccountSettings, err error)
- func (am *AccountManager) NickToAccount(nick string) string
- func (am *AccountManager) Register(client *Client, account string, callbackNamespace string, callbackValue string, ...) error
- func (am *AccountManager) SetEnforcementStatus(account string, method NickEnforcementMethod) (finalSettings AccountSettings, err error)
- func (am *AccountManager) SetNickReserved(client *Client, nick string, saUnreserve bool, reserve bool) error
- func (am *AccountManager) Unregister(account string) error
- func (am *AccountManager) VHostApprove(account string) (result VHostInfo, err error)
- func (am *AccountManager) VHostListRequests(limit int) (requests []PendingVHostRequest, total int)
- func (am *AccountManager) VHostReject(account string, reason string) (result VHostInfo, err error)
- func (am *AccountManager) VHostRequest(account string, vhost string) (result VHostInfo, err error)
- func (am *AccountManager) VHostSet(account string, vhost string) (result VHostInfo, err error)
- func (am *AccountManager) VHostSetEnabled(client *Client, enabled bool) (result VHostInfo, err error)
- func (am *AccountManager) Verify(client *Client, account string, code string) error
- type AccountRegistrationConfig
- type AccountSettings
- type AuthOutcome
- type BouncerAllowedSetting
- type BrbState
- type BrbTimer
- type Channel
- func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, changes modes.ModeChanges, rb *ResponseBuffer) (applied modes.ModeChanges)
- func (channel *Channel) CanSpeak(client *Client) bool
- func (channel *Channel) ClientHasPrivsOver(client *Client, target *Client) bool
- func (channel *Channel) ClientIsAtLeast(client *Client, permission modes.Mode) bool
- func (channel *Channel) ClientPrefixes(client *Client, isMultiPrefix bool) string
- func (channel *Channel) EnsureLoaded()
- func (channel *Channel) ExportRegistration(includeFlags uint) (info RegisteredChannel)
- func (channel *Channel) Founder() string
- func (channel *Channel) HighestUserMode(client *Client) (result modes.Mode)
- func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuffer)
- func (channel *Channel) IsClean() bool
- func (channel *Channel) IsEmpty() bool
- func (channel *Channel) IsLoaded() bool
- func (channel *Channel) IsRegistered() bool
- func (channel *Channel) Join(client *Client, key string, isSajoin bool, rb *ResponseBuffer)
- func (channel *Channel) Kick(client *Client, target *Client, comment string, rb *ResponseBuffer)
- func (channel *Channel) MarkDirty(dirtyBits uint)
- func (channel *Channel) Members() (result []*Client)
- func (channel *Channel) Name() string
- func (channel *Channel) NameCasefolded() string
- func (channel *Channel) Names(client *Client, rb *ResponseBuffer)
- func (channel *Channel) Part(client *Client, message string, rb *ResponseBuffer)
- func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes.ModeChange) (results []modes.ModeChange, err error)
- func (channel *Channel) Quit(client *Client)
- func (channel *Channel) Rename(name, nameCasefolded string)
- func (channel *Channel) Resume(session *Session, timestamp time.Time)
- func (channel *Channel) SendSplitMessage(command string, minPrefixMode modes.Mode, clientOnlyTags map[string]string, ...)
- func (channel *Channel) SendTopic(client *Client, rb *ResponseBuffer, sendNoTopic bool)
- func (channel *Channel) SetRegistered(founder string) error
- func (channel *Channel) SetTopic(client *Client, topic string, rb *ResponseBuffer)
- func (channel *Channel) SetUnregistered(expectedFounder string)
- func (channel *Channel) ShowMaskList(client *Client, mode modes.Mode, rb *ResponseBuffer)
- func (channel *Channel) Store(dirtyBits uint) (err error)
- type ChannelManager
- func (cm *ChannelManager) Channels() (result []*Channel)
- func (cm *ChannelManager) Cleanup(channel *Channel)
- func (cm *ChannelManager) Get(name string) (channel *Channel)
- func (cm *ChannelManager) Initialize(server *Server)
- func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) error
- func (cm *ChannelManager) Len() int
- func (cm *ChannelManager) Part(client *Client, name string, message string, rb *ResponseBuffer) error
- func (cm *ChannelManager) Rename(name string, newname string) (err error)
- func (cm *ChannelManager) SetRegistered(channelName string, account string) (err error)
- func (cm *ChannelManager) SetUnregistered(channelName string, account string) (err error)
- type ChannelRegistrationConfig
- type ChannelRegistry
- func (reg *ChannelRegistry) AllChannels() (result map[string]bool)
- func (reg *ChannelRegistry) Delete(info RegisteredChannel) (err error)
- func (reg *ChannelRegistry) Initialize(server *Server)
- func (reg *ChannelRegistry) LoadChannel(nameCasefolded string) (info RegisteredChannel, err error)
- func (reg *ChannelRegistry) StoreChannel(info RegisteredChannel, includeFlags uint) (err error)
- type ChannelSet
- type Client
- func (client *Client) Account() string
- func (client *Client) AccountName() string
- func (client *Client) AccountSettings() (result AccountSettings)
- func (client *Client) Active(session *Session)
- func (client *Client) AddSession(session *Session) (success bool)
- func (client *Client) AllNickmasks() (masks []string)
- func (client *Client) AllSessionData(currentSession *Session) (data []SessionData, currentIndex int)
- func (client *Client) ApplyProxiedIP(session *Session, proxiedIP string, tls bool) (err error, quitMsg string)
- func (client *Client) Away() (result bool)
- func (client *Client) AwayMessage() (result string)
- func (client *Client) Channels() (result []*Channel)
- func (client *Client) CheckInvited(casefoldedChannel string) (invited bool)
- func (client *Client) Details() (result ClientDetails)
- func (client *Client) Friends(capabs ...caps.Capability) (result map[*Session]bool)
- func (client *Client) GetSessionByResumeID(resumeID string) (result *Session)
- func (client *Client) HasMode(mode modes.Mode) bool
- func (client *Client) HasNick() bool
- func (client *Client) HasRoleCapabs(capabs ...string) bool
- func (client *Client) HasUsername() bool
- func (client *Client) Hostname() string
- func (client *Client) IP() net.IP
- func (client *Client) IPString() string
- func (client *Client) IdleSeconds() uint64
- func (client *Client) IdleTime() time.Duration
- func (client *Client) Invite(casefoldedChannel string)
- func (client *Client) Languages() (languages []string)
- func (client *Client) LoggedIntoAccount() bool
- func (client *Client) ModeString() (str string)
- func (client *Client) Nick() string
- func (client *Client) NickCasefolded() string
- func (client *Client) NickMaskCasefolded() string
- func (client *Client) NickMaskString() string
- func (client *Client) Notice(text string)
- func (client *Client) NumChannels() int
- func (client *Client) Oper() *Oper
- func (client *Client) Quit(message string, session *Session)
- func (client *Client) RawHostname() (result string)
- func (client *Client) Registered() bool
- func (client *Client) ResumeID() string
- func (target *Client) RplList(channel *Channel, rb *ResponseBuffer)
- func (client *Client) Send(tags map[string]string, prefix string, command string, params ...string) (err error)
- func (client *Client) Sessions() (sessions []*Session)
- func (client *Client) SetAccountName(account string) (changed bool)
- func (client *Client) SetAccountSettings(settings AccountSettings)
- func (client *Client) SetAway(away bool, awayMessage string) (changed bool)
- func (client *Client) SetAwayMessage(message string)
- func (client *Client) SetExitedSnomaskSent()
- func (client *Client) SetLanguages(languages []string)
- func (client *Client) SetMode(mode modes.Mode, on bool) bool
- func (client *Client) SetNames(username, realname string, fromIdent bool) error
- func (client *Client) SetOper(oper *Oper)
- func (client *Client) SetRawHostname(rawHostname string)
- func (client *Client) SetRegistered()
- func (client *Client) SetResumeID(id string)
- func (client *Client) SetVHost(vhost string) (updated bool)
- func (client *Client) SignonTime() int64
- func (client *Client) Username() string
- func (client *Client) WhoWas() (result WhoWas)
- func (client *Client) WhoisChannelsNames(target *Client, multiPrefix bool) []string
- type ClientAccount
- type ClientDetails
- type ClientManager
- func (clients *ClientManager) AllClients() (result []*Client)
- func (clients *ClientManager) AllWithCaps(capabs ...caps.Capability) (sessions []*Session)
- func (clients *ClientManager) AllWithCapsNotify(capabs ...caps.Capability) (sessions []*Session)
- func (clients *ClientManager) Count() int
- func (clients *ClientManager) FindAll(userhost string) (set ClientSet)
- func (clients *ClientManager) Get(nick string) *Client
- func (clients *ClientManager) Initialize()
- func (clients *ClientManager) Remove(client *Client) error
- func (clients *ClientManager) Resume(oldClient *Client, session *Session) (err error)
- func (clients *ClientManager) SetNick(client *Client, session *Session, newNick string) error
- type ClientSet
- type Command
- type Config
- type DLineManager
- func (dm *DLineManager) AddIP(addr net.IP, duration time.Duration, reason, operReason, operName string) error
- func (dm *DLineManager) AddNetwork(network net.IPNet, duration time.Duration, reason, operReason, operName string) error
- func (dm *DLineManager) AllBans() map[string]IPBanInfo
- func (dm *DLineManager) CheckIP(addr net.IP) (isBanned bool, info IPBanInfo)
- func (dm *DLineManager) RemoveIP(addr net.IP) error
- func (dm *DLineManager) RemoveNetwork(network net.IPNet) error
- type Fakelag
- type FakelagConfig
- type FakelagState
- type HelpEntry
- type HelpEntryType
- type HelpIndexManager
- type IPBanInfo
- type IdleTimer
- type KLineInfo
- type KLineManager
- func (km *KLineManager) AddMask(mask string, duration time.Duration, reason, operReason, operName string) error
- func (km *KLineManager) AllBans() map[string]IPBanInfo
- func (km *KLineManager) CheckMasks(masks ...string) (isBanned bool, info IPBanInfo)
- func (km *KLineManager) RemoveMask(mask string) error
- type Limits
- type LineLenLimits
- type ListenerWrapper
- type MaskInfo
- type MemberSet
- type MonitorManager
- func (manager *MonitorManager) Add(client *Client, nick string, limit int) error
- func (manager *MonitorManager) AlertAbout(client *Client, online bool)
- func (mm *MonitorManager) Initialize()
- func (manager *MonitorManager) List(client *Client) (nicks []string)
- func (manager *MonitorManager) Remove(client *Client, nick string) error
- func (manager *MonitorManager) RemoveAll(client *Client)
- type NickEnforcementMethod
- type NickReservationConfig
- type NickTimer
- type Oper
- type OperClass
- type OperClassConfig
- type OperConfig
- type PendingVHostRequest
- type RegisteredChannel
- type ResponseBuffer
- func (rb *ResponseBuffer) Add(tags map[string]string, prefix string, command string, params ...string)
- func (rb *ResponseBuffer) AddFromClient(time time.Time, msgid string, fromNickMask string, fromAccount string, ...)
- func (rb *ResponseBuffer) AddMessage(msg ircmsg.IrcMessage)
- func (rb *ResponseBuffer) AddSplitMessageFromClient(fromNickMask string, fromAccount string, tags map[string]string, ...)
- func (rb *ResponseBuffer) EndNestedBatch(batchID string)
- func (rb *ResponseBuffer) Flush(blocking bool) error
- func (rb *ResponseBuffer) ForceBatchStart(batchType string, blocking bool)
- func (rb *ResponseBuffer) Notice(text string)
- func (rb *ResponseBuffer) Send(blocking bool) error
- func (rb *ResponseBuffer) StartNestedBatch(batchType string, params ...string) (batchID string)
- func (rb *ResponseBuffer) StartNestedHistoryBatch(params ...string) (batchID string)
- type ResumeDetails
- type ResumeManager
- type STSConfig
- type SchemaChange
- type SchemaChanger
- type Server
- func (server *Server) AccountConfig() *AccountConfig
- func (server *Server) ChannelRegistrationEnabled() bool
- func (server *Server) Config() (config *Config)
- func (server *Server) GetOperator(name string) (oper *Oper)
- func (server *Server) Languages() (lm *languages.Manager)
- func (server *Server) Lusers(client *Client, rb *ResponseBuffer)
- func (server *Server) MOTD(client *Client, rb *ResponseBuffer)
- func (server *Server) RandomlyRename(client *Client)
- func (server *Server) RplISupport(client *Client, rb *ResponseBuffer)
- func (server *Server) Run()
- func (server *Server) RunClient(conn clientConn)
- func (server *Server) SetConfig(config *Config)
- func (server *Server) Shutdown()
- type ServerSemaphores
- type Session
- func (session *Session) Destroyed() bool
- func (session *Session) HasHistoryCaps() bool
- func (session *Session) MaxlenRest() int
- func (session *Session) Ping()
- func (session *Session) Send(tags map[string]string, prefix string, command string, params ...string) (err error)
- func (session *Session) SendRawMessage(message ircmsg.IrcMessage, blocking bool) error
- func (session *Session) SetDestroyed()
- func (session *Session) SetMaxlenRest()
- func (sd *Session) SetQuitMessage(message string) (set bool)
- func (session *Session) SetResumeID(resumeID string)
- type SessionData
- type SnoManager
- func (m *SnoManager) AddMasks(client *Client, masks ...sno.Mask)
- func (m *SnoManager) Initialize()
- func (m *SnoManager) RemoveClient(client *Client)
- func (m *SnoManager) RemoveMasks(client *Client, masks ...sno.Mask)
- func (m *SnoManager) Send(mask sno.Mask, content string)
- func (m *SnoManager) String(client *Client) string
- type Socket
- func (socket *Socket) BlockingWrite(data []byte) (err error)
- func (socket *Socket) CertFP() (string, error)
- func (socket *Socket) Close()
- func (socket *Socket) IsClosed() bool
- func (socket *Socket) Read() (string, error)
- func (socket *Socket) SetFinalData(data []byte)
- func (socket *Socket) Write(data []byte) (err error)
- type Stats
- type StatsValues
- type TLSListenConfig
- type TimerState
- type TorListenersConfig
- type UserMaskSet
- func (set *UserMaskSet) Add(mask, creatorNickmask, creatorAccount string) (maskAdded string, err error)
- func (set *UserMaskSet) Length() int
- func (set *UserMaskSet) Masks() (result map[string]MaskInfo)
- func (set *UserMaskSet) Match(userhost string) bool
- func (set *UserMaskSet) Remove(mask string) (maskRemoved string, err error)
- func (set *UserMaskSet) SetMasks(masks map[string]MaskInfo)
- type VHostConfig
- type VHostInfo
- type WhoWas
- type WhoWasList
Constants ¶
const ( IncludeInitial uint = 1 << iota IncludeTopic IncludeModes IncludeLists )
these are bit flags indicating what part of the channel status is "dirty" and needs to be read from memory and written to the db
const ( // IdentTimeoutSeconds is how many seconds before our ident (username) check times out. IdentTimeoutSeconds = 1.5 IRCv3TimestampFormat = "2006-01-02T15:04:05.000Z" )
const ( // RegisterTimeout is how long clients have to register before we disconnect them RegisterTimeout = time.Minute // DefaultIdleTimeout is how long without traffic before we send the client a PING DefaultIdleTimeout = time.Minute + 30*time.Second // For Tor clients, we send a PING at least every 30 seconds, as a workaround for this bug // (single-onion circuits will close unless the client sends data once every 60 seconds): // https://bugs.torproject.org/29665 TorIdleTimeout = time.Second * 30 // This is how long a client gets without sending any message, including the PONG to our // PING, before we disconnect them: DefaultTotalTimeout = 2*time.Minute + 30*time.Second // Resumeable clients (clients who have negotiated caps.Resume) get longer: ResumeableTotalTimeout = 3*time.Minute + 30*time.Second )
const ( RPL_WELCOME = "001" RPL_YOURHOST = "002" RPL_CREATED = "003" RPL_MYINFO = "004" RPL_ISUPPORT = "005" RPL_SNOMASKIS = "008" RPL_BOUNCE = "010" RPL_TRACELINK = "200" RPL_TRACECONNECTING = "201" RPL_TRACEHANDSHAKE = "202" RPL_TRACEUNKNOWN = "203" RPL_TRACEOPERATOR = "204" RPL_TRACEUSER = "205" RPL_TRACESERVER = "206" RPL_TRACESERVICE = "207" RPL_TRACENEWTYPE = "208" RPL_TRACECLASS = "209" RPL_TRACERECONNECT = "210" RPL_STATSLINKINFO = "211" RPL_STATSCOMMANDS = "212" RPL_ENDOFSTATS = "219" RPL_UMODEIS = "221" RPL_SERVLIST = "234" RPL_SERVLISTEND = "235" RPL_STATSUPTIME = "242" RPL_STATSOLINE = "243" RPL_LUSERCLIENT = "251" RPL_LUSEROP = "252" RPL_LUSERUNKNOWN = "253" RPL_LUSERCHANNELS = "254" RPL_LUSERME = "255" RPL_ADMINME = "256" RPL_ADMINLOC1 = "257" RPL_ADMINLOC2 = "258" RPL_ADMINEMAIL = "259" RPL_TRACELOG = "261" RPL_TRACEEND = "262" RPL_TRYAGAIN = "263" RPL_LOCALUSERS = "265" RPL_GLOBALUSERS = "266" RPL_WHOISCERTFP = "276" RPL_AWAY = "301" RPL_USERHOST = "302" RPL_ISON = "303" RPL_UNAWAY = "305" RPL_NOWAWAY = "306" RPL_WHOISUSER = "311" RPL_WHOISSERVER = "312" RPL_WHOISOPERATOR = "313" RPL_WHOWASUSER = "314" RPL_ENDOFWHO = "315" RPL_WHOISIDLE = "317" RPL_ENDOFWHOIS = "318" RPL_WHOISCHANNELS = "319" RPL_LIST = "322" RPL_LISTEND = "323" RPL_CHANNELMODEIS = "324" RPL_UNIQOPIS = "325" RPL_CREATIONTIME = "329" RPL_WHOISACCOUNT = "330" RPL_NOTOPIC = "331" RPL_TOPIC = "332" RPL_TOPICTIME = "333" RPL_WHOISBOT = "335" RPL_WHOISACTUALLY = "338" RPL_INVITING = "341" RPL_SUMMONING = "342" RPL_INVITELIST = "346" RPL_ENDOFINVITELIST = "347" RPL_EXCEPTLIST = "348" RPL_ENDOFEXCEPTLIST = "349" RPL_VERSION = "351" RPL_WHOREPLY = "352" RPL_NAMREPLY = "353" RPL_LINKS = "364" RPL_ENDOFLINKS = "365" RPL_ENDOFNAMES = "366" RPL_BANLIST = "367" RPL_ENDOFBANLIST = "368" RPL_ENDOFWHOWAS = "369" RPL_INFO = "371" RPL_MOTD = "372" RPL_ENDOFINFO = "374" RPL_MOTDSTART = "375" RPL_ENDOFMOTD = "376" RPL_YOUREOPER = "381" RPL_REHASHING = "382" RPL_YOURESERVICE = "383" RPL_TIME = "391" RPL_USERSSTART = "392" RPL_USERS = "393" RPL_ENDOFUSERS = "394" RPL_NOUSERS = "395" ERR_UNKNOWNERROR = "400" ERR_NOSUCHNICK = "401" ERR_NOSUCHSERVER = "402" ERR_NOSUCHCHANNEL = "403" ERR_CANNOTSENDTOCHAN = "404" ERR_TOOMANYCHANNELS = "405" ERR_WASNOSUCHNICK = "406" ERR_TOOMANYTARGETS = "407" ERR_NOSUCHSERVICE = "408" ERR_NOORIGIN = "409" ERR_INVALIDCAPCMD = "410" ERR_NORECIPIENT = "411" ERR_NOTEXTTOSEND = "412" ERR_NOTOPLEVEL = "413" ERR_WILDTOPLEVEL = "414" ERR_BADMASK = "415" ERR_INPUTTOOLONG = "417" ERR_UNKNOWNCOMMAND = "421" ERR_NOMOTD = "422" ERR_NOADMININFO = "423" ERR_FILEERROR = "424" ERR_NONICKNAMEGIVEN = "431" ERR_ERRONEUSNICKNAME = "432" ERR_NICKNAMEINUSE = "433" ERR_NICKCOLLISION = "436" ERR_UNAVAILRESOURCE = "437" ERR_REG_UNAVAILABLE = "440" ERR_USERNOTINCHANNEL = "441" ERR_NOTONCHANNEL = "442" ERR_USERONCHANNEL = "443" ERR_NOLOGIN = "444" ERR_SUMMONDISABLED = "445" ERR_USERSDISABLED = "446" ERR_NOTREGISTERED = "451" ERR_NEEDMOREPARAMS = "461" ERR_ALREADYREGISTRED = "462" ERR_NOPERMFORHOST = "463" ERR_PASSWDMISMATCH = "464" ERR_YOUREBANNEDCREEP = "465" ERR_YOUWILLBEBANNED = "466" ERR_KEYSET = "467" ERR_INVALIDUSERNAME = "468" ERR_CHANNELISFULL = "471" ERR_UNKNOWNMODE = "472" ERR_INVITEONLYCHAN = "473" ERR_BANNEDFROMCHAN = "474" ERR_BADCHANNELKEY = "475" ERR_BADCHANMASK = "476" ERR_NOCHANMODES = "477" ERR_BANLISTFULL = "478" ERR_NOPRIVILEGES = "481" ERR_CHANOPRIVSNEEDED = "482" ERR_CANTKILLSERVER = "483" ERR_RESTRICTED = "484" ERR_UNIQOPPRIVSNEEDED = "485" ERR_NOOPERHOST = "491" ERR_UMODEUNKNOWNFLAG = "501" ERR_USERSDONTMATCH = "502" ERR_HELPNOTFOUND = "524" ERR_CANNOTSENDRP = "573" RPL_WHOISSECURE = "671" RPL_YOURLANGUAGESARE = "687" ERR_CHANNAMEINUSE = "692" ERR_CANNOTRENAME = "693" ERR_INVALIDMODEPARAM = "696" ERR_LISTMODEALREADYSET = "697" ERR_LISTMODENOTSET = "698" RPL_HELPSTART = "704" RPL_HELPTXT = "705" RPL_ENDOFHELP = "706" ERR_NOPRIVS = "723" RPL_MONONLINE = "730" RPL_MONOFFLINE = "731" RPL_MONLIST = "732" RPL_ENDOFMONLIST = "733" ERR_MONLISTFULL = "734" RPL_LOGGEDIN = "900" RPL_LOGGEDOUT = "901" ERR_NICKLOCKED = "902" RPL_SASLSUCCESS = "903" ERR_SASLFAIL = "904" ERR_SASLTOOLONG = "905" ERR_SASLABORTED = "906" ERR_SASLALREADY = "907" RPL_SASLMECHS = "908" RPL_REG_SUCCESS = "920" RPL_VERIFY_SUCCESS = "923" RPL_REG_VERIFICATION_REQUIRED = "927" ERR_TOOMANYLANGUAGES = "981" ERR_NOLANGUAGE = "982" ERR_CANNOT_RESUME = "300" )
const (
IncludeAllChannelAttrs = ^uint(0)
)
this is an OR of all possible flags
const ( // this is a tradeoff between exploiting CPU-level parallelism (higher values better) // and not thrashing the allocator (lower values better). really this is all just // guesswork. oragono *can* make use of cores beyond this limit --- just not for // the protected operations. MaxServerSemaphoreCapacity = 32 )
const (
// SemVer is the semantic version of Oragono.
SemVer = "1.2.0"
)
Variables ¶
var ( // Commit is the current git commit. Commit = "" // Ver is the full version of Oragono, used in responses to clients. Ver = fmt.Sprintf("oragono-%s", SemVer) )
var ( ErrDatastorePathMissing = errors.New("Datastore path missing") ErrInvalidCertKeyPair = errors.New("tls cert+key: invalid pair") ErrLimitsAreInsane = errors.New("Limits aren't setup properly, check them and make them sane") ErrLineLengthsTooSmall = errors.New("Line lengths must be 512 or greater (check the linelen section under server->limits)") ErrLoggerExcludeEmpty = errors.New("Encountered logging type '-' with no type to exclude") ErrLoggerFilenameMissing = errors.New("Logging configuration specifies 'file' method but 'filename' is empty") ErrLoggerHasNoTypes = errors.New("Logger has no types to log") ErrNetworkNameMissing = errors.New("Network name missing") ErrNoFingerprintOrPassword = errors.New("Fingerprint or password needs to be specified") ErrNoListenersDefined = errors.New("Server listening addresses missing") ErrOperClassDependencies = errors.New("OperClasses contains a looping dependency, or a class extends from a class that doesn't exist") ErrServerNameMissing = errors.New("Server name missing") ErrServerNameNotHostname = errors.New("Server name must match the format of a hostname") )
Config Errors
var Commands map[string]Command
Commands holds all commands executable by a client connected to us.
var ( // DefaultChannelModes are enabled on brand new channels when they're created. // this can be overridden in the `channels` config, with the `default-modes` key DefaultChannelModes = modes.Modes{ modes.NoOutside, modes.OpOnlyTopic, } )
var ( // EnabledSaslMechanisms contains the SASL mechanisms that exist and that we support. // This can be moved to some other data structure/place if we need to load/unload mechs later. EnabledSaslMechanisms = map[string]func(*Server, *Client, string, []byte, *ResponseBuffer) bool{ "PLAIN": authPlainHandler, "EXTERNAL": authExternalHandler, } )
var Help = map[string]HelpEntry{ "acc": { // contains filtered or unexported fields }, "ambiance": { // contains filtered or unexported fields }, "authenticate": { // contains filtered or unexported fields }, "away": { // contains filtered or unexported fields }, "brb": { // contains filtered or unexported fields }, "cap": { // contains filtered or unexported fields }, "chathistory": { // contains filtered or unexported fields }, "debug": { // contains filtered or unexported fields }, "dline": { // contains filtered or unexported fields }, "help": { // contains filtered or unexported fields }, "helpop": { // contains filtered or unexported fields }, "history": { // contains filtered or unexported fields }, "info": { // contains filtered or unexported fields }, "invite": { // contains filtered or unexported fields }, "ison": { // contains filtered or unexported fields }, "join": { // contains filtered or unexported fields }, "kick": { // contains filtered or unexported fields }, "kill": { // contains filtered or unexported fields }, "kline": { // contains filtered or unexported fields }, "language": { // contains filtered or unexported fields }, "list": { // contains filtered or unexported fields }, "lusers": { // contains filtered or unexported fields }, "mode": { // contains filtered or unexported fields }, "monitor": { // contains filtered or unexported fields }, "motd": { // contains filtered or unexported fields }, "names": { // contains filtered or unexported fields }, "nick": { // contains filtered or unexported fields }, "notice": { // contains filtered or unexported fields }, "npc": { // contains filtered or unexported fields }, "npca": { // contains filtered or unexported fields }, "oper": { // contains filtered or unexported fields }, "part": { // contains filtered or unexported fields }, "pass": { // contains filtered or unexported fields }, "ping": { // contains filtered or unexported fields }, "pong": { // contains filtered or unexported fields }, "privmsg": { // contains filtered or unexported fields }, "rename": { // contains filtered or unexported fields }, "sajoin": { // contains filtered or unexported fields }, "sanick": { // contains filtered or unexported fields }, "samode": { // contains filtered or unexported fields }, "scene": { // contains filtered or unexported fields }, "setname": { // contains filtered or unexported fields }, "tagmsg": { // contains filtered or unexported fields }, "quit": { // contains filtered or unexported fields }, "rehash": { // contains filtered or unexported fields }, "resume": { // contains filtered or unexported fields }, "time": { // contains filtered or unexported fields }, "topic": { // contains filtered or unexported fields }, "undline": { // contains filtered or unexported fields }, "unkline": { // contains filtered or unexported fields }, "user": { // contains filtered or unexported fields }, "userhost": { // contains filtered or unexported fields }, "version": { // contains filtered or unexported fields }, "webirc": { // contains filtered or unexported fields }, "who": { // contains filtered or unexported fields }, "whois": { // contains filtered or unexported fields }, "whowas": { // contains filtered or unexported fields }, "znc": { // contains filtered or unexported fields }, "modes": { // contains filtered or unexported fields }, "cmode": { // contains filtered or unexported fields }, "cmodes": { // contains filtered or unexported fields }, "umode": { // contains filtered or unexported fields }, "umodes": { // contains filtered or unexported fields }, "snomask": { // contains filtered or unexported fields }, "snomasks": { // contains filtered or unexported fields }, "casemapping": { // contains filtered or unexported fields }, "prefix": { // contains filtered or unexported fields }, }
Help contains the help strings distributed with the IRCd.
var OragonoServices = map[string]*ircService{ "nickserv": { Name: "NickServ", ShortName: "NS", CommandAliases: []string{"NICKSERV", "NS"}, Commands: nickservCommands, HelpBanner: nickservHelp, }, "chanserv": { Name: "ChanServ", ShortName: "CS", CommandAliases: []string{"CHANSERV", "CS"}, Commands: chanservCommands, HelpBanner: chanservHelp, }, "hostserv": { Name: "HostServ", ShortName: "HS", CommandAliases: []string{"HOSTSERV", "HS"}, Commands: hostservCommands, HelpBanner: hostservHelp, }, }
all services, by lowercase name
Functions ¶
func ApplyUserModeChanges ¶ added in v0.12.0
func ApplyUserModeChanges(client *Client, changes modes.ModeChanges, force bool) modes.ModeChanges
ApplyUserModeChanges applies the given changes, and returns the applied changes.
func CanonicalizeMaskWildcard ¶ added in v1.2.0
maps a nickmask fragment to an expanded, casefolded wildcard: Shivaram@good-fortune -> *!shivaram@good-fortune EDMUND -> edmund!*@*
func Casefold ¶ added in v0.2.0
Casefold returns a casefolded string, without doing any name or channel character checks.
func CasefoldChannel ¶ added in v0.2.0
CasefoldChannel returns a casefolded version of a channel name.
func CasefoldName ¶ added in v0.2.0
CasefoldName returns a casefolded version of a nick/user name.
func GenerateHelpIndex ¶ added in v0.8.0
GenerateHelpIndex is used to generate HelpIndex. Returns: a map from language code to the help index in that language.
func GetLabel ¶ added in v0.11.0
func GetLabel(msg ircmsg.IrcMessage) string
GetLabel returns the label from the given message.
func IncompatibleSchemaError ¶ added in v0.12.0
func IncompatibleSchemaError(currentVersion string) (result *incompatibleSchemaError)
func InitDB ¶
func InitDB(path string)
InitDB creates the database, implementing the `oragono initdb` command.
func OpenDatabase ¶ added in v0.10.0
OpenDatabase returns an existing database, performing a schema version check.
func ParseDefaultChannelModes ¶ added in v0.9.0
ParseDefaultChannelModes parses the `default-modes` line of the config
func Skeleton ¶ added in v1.0.0
Skeleton produces a canonicalized identifier that tries to catch homoglyphic / confusable identifiers. It's a tweaked version of the TR39 skeleton algorithm. We apply the skeleton algorithm first and only then casefold, because casefolding first would lose some information about visual confusability. This has the weird consequence that the skeleton is not a function of the casefolded identifier --- therefore it must always be computed from the original (unfolded) identifier and stored/tracked separately from the casefolded identifier.
Types ¶
type AccountConfig ¶ added in v0.11.0
type AccountConfig struct { Registration AccountRegistrationConfig AuthenticationEnabled bool `yaml:"authentication-enabled"` RequireSasl struct { Enabled bool Exempted []string // contains filtered or unexported fields } `yaml:"require-sasl"` LoginThrottling struct { Enabled bool Duration time.Duration MaxAttempts int `yaml:"max-attempts"` } `yaml:"login-throttling"` SkipServerPassword bool `yaml:"skip-server-password"` NickReservation NickReservationConfig `yaml:"nick-reservation"` Bouncer struct { Enabled bool AllowedByDefault bool `yaml:"allowed-by-default"` } VHosts VHostConfig }
type AccountCredentials ¶
type AccountCredentials struct { Version uint PassphraseSalt []byte // legacy field, not used by v1 and later PassphraseHash []byte Certificate string // fingerprint }
AccountCredentials stores the various methods for verifying accounts.
type AccountManager ¶ added in v0.11.0
everything about accounts is persistent; therefore, the database is the authoritative source of truth for all account information. anything on the heap is just a cache
func (*AccountManager) AccountToClients ¶ added in v0.12.0
func (am *AccountManager) AccountToClients(account string) (result []*Client)
func (*AccountManager) AuthenticateByCertFP ¶ added in v0.11.0
func (am *AccountManager) AuthenticateByCertFP(client *Client) error
func (*AccountManager) AuthenticateByPassphrase ¶ added in v0.11.0
func (am *AccountManager) AuthenticateByPassphrase(client *Client, accountName string, passphrase string) error
func (*AccountManager) ChannelsForAccount ¶ added in v1.0.0
func (am *AccountManager) ChannelsForAccount(account string) (channels []string)
func (*AccountManager) EnforcementStatus ¶ added in v1.0.0
func (am *AccountManager) EnforcementStatus(cfnick, skeleton string) (account string, method NickEnforcementMethod)
Given a nick, looks up the account that owns it and the method (none/timeout/strict) used to enforce ownership.
func (*AccountManager) Initialize ¶ added in v1.1.0
func (am *AccountManager) Initialize(server *Server)
func (*AccountManager) LoadAccount ¶ added in v0.11.0
func (am *AccountManager) LoadAccount(accountName string) (result ClientAccount, err error)
func (*AccountManager) Login ¶ added in v0.11.0
func (am *AccountManager) Login(client *Client, account ClientAccount)
func (*AccountManager) Logout ¶ added in v0.11.0
func (am *AccountManager) Logout(client *Client)
func (*AccountManager) ModifyAccountSettings ¶ added in v1.1.0
func (am *AccountManager) ModifyAccountSettings(account string, munger settingsMunger) (newSettings AccountSettings, err error)
func (*AccountManager) NickToAccount ¶ added in v0.11.0
func (am *AccountManager) NickToAccount(nick string) string
func (*AccountManager) SetEnforcementStatus ¶ added in v1.0.0
func (am *AccountManager) SetEnforcementStatus(account string, method NickEnforcementMethod) (finalSettings AccountSettings, err error)
Sets a custom enforcement method for an account and stores it in the database.
func (*AccountManager) SetNickReserved ¶ added in v0.11.0
func (*AccountManager) Unregister ¶ added in v0.11.0
func (am *AccountManager) Unregister(account string) error
func (*AccountManager) VHostApprove ¶ added in v0.12.0
func (am *AccountManager) VHostApprove(account string) (result VHostInfo, err error)
func (*AccountManager) VHostListRequests ¶ added in v0.12.0
func (am *AccountManager) VHostListRequests(limit int) (requests []PendingVHostRequest, total int)
func (*AccountManager) VHostReject ¶ added in v0.12.0
func (am *AccountManager) VHostReject(account string, reason string) (result VHostInfo, err error)
func (*AccountManager) VHostRequest ¶ added in v0.12.0
func (am *AccountManager) VHostRequest(account string, vhost string) (result VHostInfo, err error)
func (*AccountManager) VHostSet ¶ added in v0.12.0
func (am *AccountManager) VHostSet(account string, vhost string) (result VHostInfo, err error)
func (*AccountManager) VHostSetEnabled ¶ added in v0.12.0
func (am *AccountManager) VHostSetEnabled(client *Client, enabled bool) (result VHostInfo, err error)
type AccountRegistrationConfig ¶
type AccountRegistrationConfig struct { Enabled bool EnabledCallbacks []string `yaml:"enabled-callbacks"` EnabledCredentialTypes []string `yaml:"-"` VerifyTimeout time.Duration `yaml:"verify-timeout"` Callbacks struct { Mailto struct { Server string Port int TLS struct { Enabled bool InsecureSkipVerify bool `yaml:"insecure_skip_verify"` ServerName string `yaml:"servername"` } Username string Password string Sender string VerifyMessageSubject string `yaml:"verify-message-subject"` VerifyMessage string `yaml:"verify-message"` } } BcryptCost uint `yaml:"bcrypt-cost"` }
AccountRegistrationConfig controls account registration.
type AccountSettings ¶ added in v1.1.0
type AccountSettings struct { AutoreplayLines *int NickEnforcement NickEnforcementMethod AllowBouncer BouncerAllowedSetting AutoreplayJoins bool }
type AuthOutcome ¶ added in v1.1.0
type AuthOutcome uint
type BouncerAllowedSetting ¶ added in v1.1.0
type BouncerAllowedSetting int
const ( BouncerAllowedServerDefault BouncerAllowedSetting = iota BouncerDisallowedByUser BouncerAllowedByUser )
type BrbState ¶ added in v1.1.0
type BrbState uint
const ( // BrbDisabled is the default state; the client will be disconnected if it has no sessions BrbDisabled BrbState = iota // BrbEnabled allows the client to remain online without sessions; if a timeout is // reached, it will be removed BrbEnabled // BrbDead is the state of a client after its timeout has expired; it will be removed // and therefore new sessions cannot be attached to it BrbDead // BrbSticky allows a client to remain online without sessions, with no timeout. // This is not used yet. BrbSticky )
type BrbTimer ¶ added in v1.1.0
type BrbTimer struct {
// contains filtered or unexported fields
}
func (*BrbTimer) Disable ¶ added in v1.1.0
turns off BRB for a client and stops the timer; used on resume and during client teardown
func (*BrbTimer) Enable ¶ added in v1.1.0
attempts to enable BRB for a client, returns whether it succeeded
func (*BrbTimer) Initialize ¶ added in v1.1.0
type Channel ¶
type Channel struct {
// contains filtered or unexported fields
}
Channel represents a channel that clients can join.
func NewChannel ¶
NewChannel creates a new channel from a `Server` and a `name` string, which must be unique on the server.
func (*Channel) ApplyChannelModeChanges ¶ added in v0.10.1
func (channel *Channel) ApplyChannelModeChanges(client *Client, isSamode bool, changes modes.ModeChanges, rb *ResponseBuffer) (applied modes.ModeChanges)
ApplyChannelModeChanges applies a given set of mode changes.
func (*Channel) ClientHasPrivsOver ¶ added in v0.10.1
func (*Channel) ClientIsAtLeast ¶ added in v0.3.0
ClientIsAtLeast returns whether the client has at least the given channel privilege.
func (*Channel) ClientPrefixes ¶ added in v0.10.1
func (*Channel) EnsureLoaded ¶ added in v1.1.0
func (channel *Channel) EnsureLoaded()
EnsureLoaded blocks until the channel's registration info has been loaded from the database.
func (*Channel) ExportRegistration ¶ added in v0.10.2
func (channel *Channel) ExportRegistration(includeFlags uint) (info RegisteredChannel)
obtain a consistent snapshot of the channel state that can be persisted to the DB
func (*Channel) HighestUserMode ¶ added in v1.1.0
func (*Channel) Invite ¶
func (channel *Channel) Invite(invitee *Client, inviter *Client, rb *ResponseBuffer)
Invite invites the given client to the channel, if the inviter can do so.
func (*Channel) IsClean ¶ added in v1.1.0
IsClean returns whether a channel can be safely removed from the server. To avoid the obvious TOCTOU race condition, it must be called while holding ChannelManager's lock (that way, no one can join and make the channel dirty again between this method exiting and the actual deletion).
func (*Channel) IsRegistered ¶ added in v0.10.2
IsRegistered returns whether the channel is registered.
func (*Channel) Join ¶
func (channel *Channel) Join(client *Client, key string, isSajoin bool, rb *ResponseBuffer)
Join joins the given client to this channel (if they can be joined).
func (*Channel) Kick ¶
func (channel *Channel) Kick(client *Client, target *Client, comment string, rb *ResponseBuffer)
func (*Channel) MarkDirty ¶ added in v1.1.0
MarkDirty marks part (or all) of a channel's data as needing to be written back to the database, then starts a writer goroutine if necessary. This is the equivalent of Socket.Write().
func (*Channel) NameCasefolded ¶ added in v0.10.1
func (*Channel) Names ¶
func (channel *Channel) Names(client *Client, rb *ResponseBuffer)
Names sends the list of users joined to the channel to the given client.
func (*Channel) Part ¶
func (channel *Channel) Part(client *Client, message string, rb *ResponseBuffer)
Part parts the given client from this channel, with the given message.
func (*Channel) ProcessAccountToUmodeChange ¶ added in v0.12.0
func (channel *Channel) ProcessAccountToUmodeChange(client *Client, change modes.ModeChange) (results []modes.ModeChange, err error)
ProcessAccountToUmodeChange processes Add/Remove/List operations for channel persistent usermodes.
func (*Channel) Resume ¶ added in v1.0.0
Resume is called after a successful global resume to: 1. Replace the old client with the new in the channel's data structures 2. Send JOIN and MODE lines to channel participants (including the new client) 3. Replay missed message history to the client
func (*Channel) SendSplitMessage ¶ added in v1.1.0
func (channel *Channel) SendSplitMessage(command string, minPrefixMode modes.Mode, clientOnlyTags map[string]string, client *Client, message utils.SplitMessage, rb *ResponseBuffer)
func (*Channel) SendTopic ¶ added in v0.10.1
func (channel *Channel) SendTopic(client *Client, rb *ResponseBuffer, sendNoTopic bool)
SendTopic sends the channel topic to the given client. `sendNoTopic` controls whether RPL_NOTOPIC is sent when the topic is unset
func (*Channel) SetRegistered ¶ added in v0.10.2
SetRegistered registers the channel, returning an error if it was already registered.
func (*Channel) SetTopic ¶
func (channel *Channel) SetTopic(client *Client, topic string, rb *ResponseBuffer)
SetTopic sets the topic of this channel, if the client is allowed to do so.
func (*Channel) SetUnregistered ¶ added in v0.12.0
SetUnregistered deletes the channel's registration information.
func (*Channel) ShowMaskList ¶
func (channel *Channel) ShowMaskList(client *Client, mode modes.Mode, rb *ResponseBuffer)
ShowMaskList shows the given list to the client.
type ChannelManager ¶ added in v0.10.1
ChannelManager keeps track of all the channels on the server, providing synchronization for creation of new channels on first join, cleanup of empty channels on last part, and renames.
func (*ChannelManager) Channels ¶ added in v0.10.1
func (cm *ChannelManager) Channels() (result []*Channel)
Channels returns a slice containing all current channels
func (*ChannelManager) Cleanup ¶ added in v0.11.0
func (cm *ChannelManager) Cleanup(channel *Channel)
func (*ChannelManager) Get ¶ added in v0.10.1
func (cm *ChannelManager) Get(name string) (channel *Channel)
Get returns an existing channel with name equivalent to `name`, or nil
func (*ChannelManager) Initialize ¶ added in v1.1.0
func (cm *ChannelManager) Initialize(server *Server)
NewChannelManager returns a new ChannelManager.
func (*ChannelManager) Join ¶ added in v0.10.1
func (cm *ChannelManager) Join(client *Client, name string, key string, isSajoin bool, rb *ResponseBuffer) error
Join causes `client` to join the channel named `name`, creating it if necessary.
func (*ChannelManager) Len ¶ added in v0.10.1
func (cm *ChannelManager) Len() int
Len returns the number of channels
func (*ChannelManager) Part ¶ added in v0.10.1
func (cm *ChannelManager) Part(client *Client, name string, message string, rb *ResponseBuffer) error
Part parts `client` from the channel named `name`, deleting it if it's empty.
func (*ChannelManager) Rename ¶ added in v0.10.1
func (cm *ChannelManager) Rename(name string, newname string) (err error)
Rename renames a channel (but does not notify the members)
func (*ChannelManager) SetRegistered ¶ added in v1.1.0
func (cm *ChannelManager) SetRegistered(channelName string, account string) (err error)
func (*ChannelManager) SetUnregistered ¶ added in v1.1.0
func (cm *ChannelManager) SetUnregistered(channelName string, account string) (err error)
type ChannelRegistrationConfig ¶ added in v0.7.0
type ChannelRegistrationConfig struct { Enabled bool MaxChannelsPerAccount int `yaml:"max-channels-per-account"` }
ChannelRegistrationConfig controls channel registration.
type ChannelRegistry ¶ added in v0.10.2
type ChannelRegistry struct {
// contains filtered or unexported fields
}
ChannelRegistry manages registered channels.
func (*ChannelRegistry) AllChannels ¶ added in v1.1.0
func (reg *ChannelRegistry) AllChannels() (result map[string]bool)
func (*ChannelRegistry) Delete ¶ added in v0.12.0
func (reg *ChannelRegistry) Delete(info RegisteredChannel) (err error)
Delete deletes a channel corresponding to `info`. If no such channel is present in the database, no error is returned.
func (*ChannelRegistry) Initialize ¶ added in v1.1.0
func (reg *ChannelRegistry) Initialize(server *Server)
NewChannelRegistry returns a new ChannelRegistry.
func (*ChannelRegistry) LoadChannel ¶ added in v0.10.2
func (reg *ChannelRegistry) LoadChannel(nameCasefolded string) (info RegisteredChannel, err error)
LoadChannel loads a channel from the store.
func (*ChannelRegistry) StoreChannel ¶ added in v0.10.2
func (reg *ChannelRegistry) StoreChannel(info RegisteredChannel, includeFlags uint) (err error)
StoreChannel obtains a consistent view of a channel, then persists it to the store.
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client is an IRC client.
func (*Client) AccountName ¶ added in v0.10.2
func (*Client) AccountSettings ¶ added in v1.1.0
func (client *Client) AccountSettings() (result AccountSettings)
func (*Client) Active ¶
Active updates when the client was last 'active' (i.e. the user should be sitting in front of their client).
func (*Client) AddSession ¶ added in v1.1.0
func (*Client) AllNickmasks ¶ added in v0.6.0
AllNickmasks returns all the possible nickmasks for the client.
func (*Client) AllSessionData ¶ added in v1.1.0
func (client *Client) AllSessionData(currentSession *Session) (data []SessionData, currentIndex int)
func (*Client) ApplyProxiedIP ¶ added in v0.10.0
func (client *Client) ApplyProxiedIP(session *Session, proxiedIP string, tls bool) (err error, quitMsg string)
ApplyProxiedIP applies the given IP to the client.
func (*Client) AwayMessage ¶ added in v1.0.0
func (*Client) CheckInvited ¶ added in v1.0.0
Checks that the client was invited to join a given channel
func (*Client) Details ¶ added in v1.0.0
func (client *Client) Details() (result ClientDetails)
func (*Client) Friends ¶
func (client *Client) Friends(capabs ...caps.Capability) (result map[*Session]bool)
Friends refers to clients that share a channel with this client.
func (*Client) GetSessionByResumeID ¶ added in v1.1.0
func (*Client) HasNick ¶
HasNick returns true if the client's nickname is set (used in registration).
func (*Client) HasRoleCapabs ¶ added in v0.10.0
HasRoleCapabs returns true if client has the given (role) capabilities.
func (*Client) HasUsername ¶
HasUsername returns true if the client's username is set (used in registration).
func (*Client) IPString ¶ added in v0.8.1
IPString returns the IP address of this client as a string.
func (*Client) IdleSeconds ¶
IdleSeconds returns the number of seconds this client's been idle.
func (*Client) Invite ¶ added in v1.0.0
Records that the client has been invited to join an invite-only channel
func (*Client) LoggedIntoAccount ¶ added in v0.9.1
LoggedIntoAccount returns true if this client is logged into an account.
func (*Client) ModeString ¶
ModeString returns the mode string for this client.
func (*Client) NickCasefolded ¶ added in v0.10.1
func (*Client) NickMaskCasefolded ¶ added in v1.0.0
func (*Client) NickMaskString ¶ added in v0.10.1
func (*Client) NumChannels ¶ added in v1.0.0
func (*Client) Quit ¶
Quit sets the given quit message for the client. (You must ensure separately that destroy() is called, e.g., by returning `true` from the command handler or calling it yourself.)
func (*Client) RawHostname ¶ added in v1.1.0
func (*Client) Registered ¶ added in v0.10.0
func (*Client) RplList ¶
func (target *Client) RplList(channel *Channel, rb *ResponseBuffer)
RplList returns the RPL_LIST numeric for the given channel.
func (*Client) Send ¶
func (client *Client) Send(tags map[string]string, prefix string, command string, params ...string) (err error)
Send sends an IRC line to the client.
func (*Client) SetAccountName ¶ added in v0.11.0
func (*Client) SetAccountSettings ¶ added in v1.1.0
func (client *Client) SetAccountSettings(settings AccountSettings)
func (*Client) SetAwayMessage ¶ added in v1.0.0
func (*Client) SetExitedSnomaskSent ¶ added in v1.1.0
func (client *Client) SetExitedSnomaskSent()
func (*Client) SetLanguages ¶ added in v1.1.0
func (*Client) SetRawHostname ¶ added in v1.1.0
func (*Client) SetRegistered ¶ added in v1.0.0
func (client *Client) SetRegistered()
func (*Client) SetResumeID ¶ added in v1.0.0
func (*Client) SignonTime ¶
SignonTime returns this client's signon time as a unix timestamp.
type ClientAccount ¶
type ClientAccount struct { // Name of the account. Name string // RegisteredAt represents the time that the account was registered. RegisteredAt time.Time Credentials AccountCredentials Verified bool AdditionalNicks []string VHost VHostInfo Settings AccountSettings }
ClientAccount represents a user account.
type ClientDetails ¶ added in v1.0.0
type ClientDetails struct { WhoWas // contains filtered or unexported fields }
ClientDetails is a standard set of details about a client
type ClientManager ¶ added in v0.10.3
ClientManager keeps track of clients by nick, enforcing uniqueness of casefolded nicks
func (*ClientManager) AllClients ¶ added in v0.10.3
func (clients *ClientManager) AllClients() (result []*Client)
func (*ClientManager) AllWithCaps ¶ added in v0.10.3
func (clients *ClientManager) AllWithCaps(capabs ...caps.Capability) (sessions []*Session)
AllWithCaps returns all clients with the given capabilities.
func (*ClientManager) AllWithCapsNotify ¶ added in v1.1.0
func (clients *ClientManager) AllWithCapsNotify(capabs ...caps.Capability) (sessions []*Session)
AllWithCapsNotify returns all clients with the given capabilities, and that support cap-notify.
func (*ClientManager) Count ¶ added in v0.10.3
func (clients *ClientManager) Count() int
Count returns how many clients are in the manager.
func (*ClientManager) FindAll ¶ added in v0.10.3
func (clients *ClientManager) FindAll(userhost string) (set ClientSet)
FindAll returns all clients that match the given userhost mask.
func (*ClientManager) Get ¶ added in v0.10.3
func (clients *ClientManager) Get(nick string) *Client
Get retrieves a client from the manager, if they exist.
func (*ClientManager) Initialize ¶ added in v1.1.0
func (clients *ClientManager) Initialize()
Initialize initializes a ClientManager.
func (*ClientManager) Remove ¶ added in v0.10.3
func (clients *ClientManager) Remove(client *Client) error
Remove removes a client from the lookup set.
func (*ClientManager) Resume ¶ added in v1.0.0
func (clients *ClientManager) Resume(oldClient *Client, session *Session) (err error)
Handles a RESUME by attaching a session to a designated client. It is the caller's responsibility to verify that the resume is allowed (checking tokens, TLS status, etc.) before calling this.
type ClientSet ¶
ClientSet is a set of clients.
type Command ¶
type Command struct {
// contains filtered or unexported fields
}
Command represents a command accepted from a client.
type Config ¶
type Config struct { Network struct { Name string } Server struct { Password string Name string // Listeners is the new style for configuring listeners: Listeners map[string]listenerConfigBlock UnixBindMode os.FileMode `yaml:"unix-bind-mode"` TorListeners TorListenersConfig `yaml:"tor-listeners"` // Listen and TLSListeners are the legacy style: Listen []string TLSListeners map[string]TLSListenConfig `yaml:"tls-listeners"` STS STSConfig CheckIdent bool `yaml:"check-ident"` MOTD string MOTDFormatting bool `yaml:"motd-formatting"` ProxyAllowedFrom []string `yaml:"proxy-allowed-from"` WebIRC []webircConfig `yaml:"webirc"` MaxSendQString string `yaml:"max-sendq"` MaxSendQBytes int AllowPlaintextResume bool `yaml:"allow-plaintext-resume"` Compatibility struct { ForceTrailing *bool `yaml:"force-trailing"` SendUnprefixedSasl bool `yaml:"send-unprefixed-sasl"` // contains filtered or unexported fields } ConnectionLimiter connection_limits.LimiterConfig `yaml:"connection-limits"` ConnectionThrottler connection_limits.ThrottlerConfig `yaml:"connection-throttling"` Cloaks cloaks.CloakConfig `yaml:"ip-cloaking"` // contains filtered or unexported fields } Languages struct { Enabled bool Path string Default string } Datastore struct { Path string AutoUpgrade bool } Accounts AccountConfig Channels struct { DefaultModes *string `yaml:"default-modes"` MaxChannelsPerClient int `yaml:"max-channels-per-client"` OpOnlyCreation bool `yaml:"operator-only-creation"` Registration ChannelRegistrationConfig // contains filtered or unexported fields } OperClasses map[string]*OperClassConfig `yaml:"oper-classes"` Opers map[string]*OperConfig Logging []logger.LoggingConfig Debug struct { RecoverFromErrors *bool `yaml:"recover-from-errors"` PprofListener *string `yaml:"pprof-listener"` // contains filtered or unexported fields } Limits Limits Fakelag FakelagConfig History struct { Enabled bool ChannelLength int `yaml:"channel-length"` ClientLength int `yaml:"client-length"` AutoresizeWindow time.Duration `yaml:"autoresize-window"` AutoreplayOnJoin int `yaml:"autoreplay-on-join"` ChathistoryMax int `yaml:"chathistory-maxmessages"` } Filename string // contains filtered or unexported fields }
Config defines the overall configuration.
func LoadConfig ¶
LoadConfig loads the given YAML configuration file.
func LoadRawConfig ¶ added in v1.2.0
LoadRawConfig loads the config without doing any consistency checks or postprocessing
func (*Config) OperatorClasses ¶ added in v0.4.0
OperatorClasses returns a map of assembled operator classes from the given config.
type DLineManager ¶ added in v0.5.0
DLineManager manages and dlines.
func NewDLineManager ¶ added in v0.5.0
func NewDLineManager(server *Server) *DLineManager
NewDLineManager returns a new DLineManager.
func (*DLineManager) AddIP ¶ added in v0.5.0
func (dm *DLineManager) AddIP(addr net.IP, duration time.Duration, reason, operReason, operName string) error
AddIP adds an IP address to the blocked list.
func (*DLineManager) AddNetwork ¶ added in v0.5.0
func (dm *DLineManager) AddNetwork(network net.IPNet, duration time.Duration, reason, operReason, operName string) error
AddNetwork adds a network to the blocked list.
func (*DLineManager) AllBans ¶ added in v0.5.0
func (dm *DLineManager) AllBans() map[string]IPBanInfo
AllBans returns all bans (for use with APIs, etc).
func (*DLineManager) CheckIP ¶ added in v0.5.0
func (dm *DLineManager) CheckIP(addr net.IP) (isBanned bool, info IPBanInfo)
CheckIP returns whether or not an IP address was banned, and how long it is banned for.
func (*DLineManager) RemoveIP ¶ added in v0.5.0
func (dm *DLineManager) RemoveIP(addr net.IP) error
RemoveIP removes an IP address from the blocked list.
func (*DLineManager) RemoveNetwork ¶ added in v0.5.0
func (dm *DLineManager) RemoveNetwork(network net.IPNet) error
RemoveNetwork removes a network from the blocked list.
type Fakelag ¶ added in v0.11.0
type Fakelag struct {
// contains filtered or unexported fields
}
this is intentionally not threadsafe, because it should only be touched from the loop that accepts the client's input and runs commands
func (*Fakelag) Initialize ¶ added in v1.1.0
func (fl *Fakelag) Initialize(config FakelagConfig)
type FakelagConfig ¶ added in v0.11.0
type FakelagState ¶ added in v0.11.0
type FakelagState uint
const ( // initially, the client is "bursting" and can send n commands without // encountering fakelag FakelagBursting FakelagState = iota // after that, they're "throttled" and we sleep in between commands until // they're spaced sufficiently far apart FakelagThrottled )
type HelpEntry ¶ added in v0.2.0
type HelpEntry struct {
// contains filtered or unexported fields
}
HelpEntry represents an entry in the Help map.
type HelpEntryType ¶ added in v0.8.0
type HelpEntryType int
HelpEntryType represents the different sorts of help entries that can exist.
const ( // CommandHelpEntry is a help entry explaining a client command. CommandHelpEntry HelpEntryType = iota // InformationHelpEntry is a help entry explaining general server info. InformationHelpEntry // ISupportHelpEntry is a help entry explaining a specific RPL_ISUPPORT token. ISupportHelpEntry )
type HelpIndexManager ¶ added in v1.1.0
func (*HelpIndexManager) GenerateIndices ¶ added in v1.1.0
func (hm *HelpIndexManager) GenerateIndices(lm *languages.Manager)
GenerateIndices regenerates our help indexes for each currently enabled language.
type IPBanInfo ¶ added in v0.5.0
type IPBanInfo struct { // Reason is the ban reason. Reason string `json:"reason"` // OperReason is an oper ban reason. OperReason string `json:"oper_reason"` // OperName is the oper who set the ban. OperName string `json:"oper_name"` // time of ban creation TimeCreated time.Time // duration of the ban; 0 means "permanent" Duration time.Duration }
IPBanInfo holds info about an IP/net ban.
func (IPBanInfo) BanMessage ¶ added in v0.9.0
BanMessage returns the ban message.
type IdleTimer ¶ added in v0.10.0
func (*IdleTimer) Initialize ¶ added in v1.1.0
Initialize sets up an IdleTimer and starts counting idle time; if there is no activity from the client, it will eventually be stopped.
type KLineInfo ¶ added in v0.6.0
type KLineInfo struct { // Mask that is blocked. Mask string // Matcher, to facilitate fast matching. Matcher ircmatch.Matcher // Info contains information on the ban. Info IPBanInfo }
KLineInfo contains the address itself and expiration time for a given network.
type KLineManager ¶ added in v0.6.0
KLineManager manages and klines.
func NewKLineManager ¶ added in v0.6.0
func NewKLineManager(s *Server) *KLineManager
NewKLineManager returns a new KLineManager.
func (*KLineManager) AddMask ¶ added in v0.6.0
func (km *KLineManager) AddMask(mask string, duration time.Duration, reason, operReason, operName string) error
AddMask adds to the blocked list.
func (*KLineManager) AllBans ¶ added in v0.6.0
func (km *KLineManager) AllBans() map[string]IPBanInfo
AllBans returns all bans (for use with APIs, etc).
func (*KLineManager) CheckMasks ¶ added in v0.6.0
func (km *KLineManager) CheckMasks(masks ...string) (isBanned bool, info IPBanInfo)
CheckMasks returns whether or not the hostmask(s) are banned, and how long they are banned for.
func (*KLineManager) RemoveMask ¶ added in v0.6.0
func (km *KLineManager) RemoveMask(mask string) error
RemoveMask removes a mask from the blocked list.
type Limits ¶
type Limits struct { AwayLen int `yaml:"awaylen"` ChanListModes int `yaml:"chan-list-modes"` ChannelLen int `yaml:"channellen"` IdentLen int `yaml:"identlen"` KickLen int `yaml:"kicklen"` LineLen LineLenLimits `yaml:"linelen"` MonitorEntries int `yaml:"monitor-entries"` NickLen int `yaml:"nicklen"` TopicLen int `yaml:"topiclen"` WhowasEntries int `yaml:"whowas-entries"` RegistrationMessages int `yaml:"registration-messages"` }
Various server-enforced limits on data size.
type LineLenLimits ¶ added in v0.6.0
type LineLenLimits struct {
Rest int
}
LineLenConfig controls line lengths.
type ListenerWrapper ¶ added in v0.9.0
type ListenerWrapper struct { // protects atomic update of config and shouldStop: sync.Mutex // tier 1 // contains filtered or unexported fields }
ListenerWrapper wraps a listener so it can be safely reconfigured or stopped
type MemberSet ¶
MemberSet is a set of members with modes.
func (MemberSet) AnyHasMode ¶
AnyHasMode returns true if any of our clients has the given mode.
type MonitorManager ¶ added in v0.10.0
MonitorManager keeps track of who's monitoring which nicks.
func (*MonitorManager) Add ¶ added in v0.10.0
func (manager *MonitorManager) Add(client *Client, nick string, limit int) error
Add registers `client` to receive notifications about `nick`.
func (*MonitorManager) AlertAbout ¶ added in v0.10.0
func (manager *MonitorManager) AlertAbout(client *Client, online bool)
AlertAbout alerts everyone monitoring `client`'s nick that `client` is now {on,off}line.
func (*MonitorManager) Initialize ¶ added in v1.1.0
func (mm *MonitorManager) Initialize()
func (*MonitorManager) List ¶ added in v0.10.0
func (manager *MonitorManager) List(client *Client) (nicks []string)
List lists all nicks that `client` is registered to receive notifications about.
func (*MonitorManager) Remove ¶ added in v0.10.0
func (manager *MonitorManager) Remove(client *Client, nick string) error
Remove unregisters `client` from receiving notifications about `nick`.
func (*MonitorManager) RemoveAll ¶ added in v0.10.0
func (manager *MonitorManager) RemoveAll(client *Client)
RemoveAll unregisters `client` from receiving notifications about *all* nicks.
type NickEnforcementMethod ¶ added in v1.1.0
type NickEnforcementMethod int
const ( // NickEnforcementOptional is the zero value; it serializes to // "optional" in the yaml config, and "default" as an arg to `NS ENFORCE`. // in both cases, it means "defer to the other source of truth", i.e., // in the config, defer to the user's custom setting, and as a custom setting, // defer to the default in the config. if both are NickEnforcementOptional then // there is no enforcement. // XXX: these are serialized as numbers in the database, so beware of collisions // when refactoring (any numbers currently in use must keep their meanings, or // else be fixed up by a schema change) NickEnforcementOptional NickEnforcementMethod = iota NickEnforcementNone NickEnforcementWithTimeout NickEnforcementStrict )
func (*NickEnforcementMethod) UnmarshalYAML ¶ added in v1.1.0
func (nr *NickEnforcementMethod) UnmarshalYAML(unmarshal func(interface{}) error) error
type NickReservationConfig ¶ added in v0.11.0
type NickTimer ¶ added in v0.11.0
NickTimer manages timing out of clients who are squatting reserved nicks
func (*NickTimer) Initialize ¶ added in v1.1.0
Initialize sets up a NickTimer, based on server config settings.
func (*NickTimer) Stop ¶ added in v0.11.0
func (nt *NickTimer) Stop()
Stop stops counting time and cleans up the timer
func (*NickTimer) Touch ¶ added in v0.11.0
func (nt *NickTimer) Touch(rb *ResponseBuffer)
Touch records a nick change and updates the timer as necessary
type Oper ¶ added in v0.4.0
type Oper struct { Name string Class *OperClass WhoisLine string Vhost string Pass []byte Modes []modes.ModeChange }
Oper represents a single assembled operator's config.
type OperClass ¶ added in v0.4.0
type OperClass struct { Title string WhoisLine string `yaml:"whois-line"` Capabilities map[string]bool // map to make lookups much easier }
OperClass defines an assembled operator class.
type OperClassConfig ¶ added in v0.4.0
OperClassConfig defines a specific operator class.
type OperConfig ¶ added in v0.4.0
type OperConfig struct { Class string Vhost string WhoisLine string `yaml:"whois-line"` Password string Modes string }
OperConfig defines a specific operator's configuration.
type PendingVHostRequest ¶ added in v0.12.0
pair type, <VHostInfo, accountName>
type RegisteredChannel ¶ added in v0.7.0
type RegisteredChannel struct { // Name of the channel. Name string // Casefolded name of the channel. NameCasefolded string // RegisteredAt represents the time that the channel was registered. RegisteredAt time.Time // Founder indicates the founder of the channel. Founder string // Topic represents the channel topic. Topic string // TopicSetBy represents the host that set the topic. TopicSetBy string // TopicSetTime represents the time the topic was set. TopicSetTime time.Time // Modes represents the channel modes Modes []modes.Mode // Key represents the channel key / password Key string // AccountToUMode maps user accounts to their persistent channel modes (e.g., +q, +h) AccountToUMode map[string]modes.Mode // Bans represents the bans set on the channel. Bans map[string]MaskInfo // Excepts represents the exceptions set on the channel. Excepts map[string]MaskInfo // Invites represents the invite exceptions set on the channel. Invites map[string]MaskInfo }
RegisteredChannel holds details about a given registered channel.
type ResponseBuffer ¶ added in v0.11.0
type ResponseBuffer struct { Label string // label if this is a labeled response batch // contains filtered or unexported fields }
ResponseBuffer - put simply - buffers messages and then outputs them to a given client.
Using a ResponseBuffer lets you really easily implement labeled-response, since the buffer will silently create a batch if required and label the outgoing messages as necessary (or leave it off and simply tag the outgoing message).
func NewResponseBuffer ¶ added in v0.11.0
func NewResponseBuffer(session *Session) *ResponseBuffer
NewResponseBuffer returns a new ResponseBuffer.
func (*ResponseBuffer) Add ¶ added in v0.11.0
func (rb *ResponseBuffer) Add(tags map[string]string, prefix string, command string, params ...string)
Add adds a standard new message to our queue.
func (*ResponseBuffer) AddFromClient ¶ added in v0.11.0
func (rb *ResponseBuffer) AddFromClient(time time.Time, msgid string, fromNickMask string, fromAccount string, tags map[string]string, command string, params ...string)
AddFromClient adds a new message from a specific client to our queue.
func (*ResponseBuffer) AddMessage ¶ added in v1.1.0
func (rb *ResponseBuffer) AddMessage(msg ircmsg.IrcMessage)
func (*ResponseBuffer) AddSplitMessageFromClient ¶ added in v0.11.0
func (rb *ResponseBuffer) AddSplitMessageFromClient(fromNickMask string, fromAccount string, tags map[string]string, command string, target string, message utils.SplitMessage)
AddSplitMessageFromClient adds a new split message from a specific client to our queue.
func (*ResponseBuffer) EndNestedBatch ¶ added in v1.1.0
func (rb *ResponseBuffer) EndNestedBatch(batchID string)
Ends a nested batch
func (*ResponseBuffer) Flush ¶ added in v1.0.0
func (rb *ResponseBuffer) Flush(blocking bool) error
Flush sends all messages in the buffer to the client. Afterwards, the buffer can still be used. Client code MUST subsequently call Send() to ensure that the final `BATCH -` message is sent. If `blocking` is true you MUST be sending to the client from its own goroutine.
func (*ResponseBuffer) ForceBatchStart ¶ added in v1.1.0
func (rb *ResponseBuffer) ForceBatchStart(batchType string, blocking bool)
ForceBatchStart forcibly starts a batch of batch `batchType`. Normally, Send/Flush will decide automatically whether to start a batch of type draft/labeled-response. This allows changing the batch type and forcing the creation of a possibly empty batch.
func (*ResponseBuffer) Notice ¶ added in v0.11.0
func (rb *ResponseBuffer) Notice(text string)
Notice sends the client the given notice from the server.
func (*ResponseBuffer) Send ¶ added in v0.11.0
func (rb *ResponseBuffer) Send(blocking bool) error
Send sends all messages in the buffer to the client. Afterwards, the buffer is in an undefined state and MUST NOT be used further. If `blocking` is true you MUST be sending to the client from its own goroutine.
func (*ResponseBuffer) StartNestedBatch ¶ added in v1.1.0
func (rb *ResponseBuffer) StartNestedBatch(batchType string, params ...string) (batchID string)
Starts a nested batch (see the ResponseBuffer struct definition for a description of how this works)
func (*ResponseBuffer) StartNestedHistoryBatch ¶ added in v1.1.0
func (rb *ResponseBuffer) StartNestedHistoryBatch(params ...string) (batchID string)
Convenience to start a nested batch for history lines, at the highest level supported by the client (`history`, `chathistory`, or no batch, in descending order).
type ResumeDetails ¶ added in v0.11.0
ResumeDetails is a place to stash data at various stages of the resume process: when handling the RESUME command itself, when completing the registration, and when rejoining channels.
type ResumeManager ¶ added in v1.0.0
func (*ResumeManager) Delete ¶ added in v1.0.0
func (rm *ResumeManager) Delete(client *Client)
Delete stops tracking a client's resume token.
func (*ResumeManager) GenerateToken ¶ added in v1.0.0
func (rm *ResumeManager) GenerateToken(client *Client) (token string, id string)
GenerateToken generates a resume token for a client. If the client has already been assigned one, it returns "".
func (*ResumeManager) Initialize ¶ added in v1.0.0
func (rm *ResumeManager) Initialize(server *Server)
func (*ResumeManager) VerifyToken ¶ added in v1.0.0
func (rm *ResumeManager) VerifyToken(newClient *Client, token string) (oldClient *Client, id string)
VerifyToken looks up the client corresponding to a resume token, returning nil if there is no such client or the token is invalid. If successful, the token is consumed and cannot be used to resume again.
type STSConfig ¶ added in v0.7.0
type STSConfig struct { Enabled bool Duration time.Duration `yaml:"duration-real"` DurationString string `yaml:"duration"` Port int Preload bool STSOnlyBanner string `yaml:"sts-only-banner"` // contains filtered or unexported fields }
STSConfig controls the STS configuration/
type SchemaChange ¶ added in v0.12.0
type SchemaChange struct { InitialVersion string // the change will take this version TargetVersion string // and transform it into this version Changer SchemaChanger }
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is the main Oragono server.
func (*Server) AccountConfig ¶ added in v0.11.0
func (server *Server) AccountConfig() *AccountConfig
func (*Server) ChannelRegistrationEnabled ¶ added in v0.10.2
func (*Server) GetOperator ¶ added in v0.12.0
func (*Server) Lusers ¶ added in v1.2.0
func (server *Server) Lusers(client *Client, rb *ResponseBuffer)
func (*Server) MOTD ¶
func (server *Server) MOTD(client *Client, rb *ResponseBuffer)
MOTD serves the Message of the Day.
func (*Server) RandomlyRename ¶ added in v0.11.0
func (*Server) RplISupport ¶ added in v1.2.0
func (server *Server) RplISupport(client *Client, rb *ResponseBuffer)
RplISupport outputs our ISUPPORT lines to the client. This is used on connection and in VERSION responses.
type ServerSemaphores ¶ added in v0.12.0
type ServerSemaphores struct { // each distinct operation MUST have its own semaphore; // methods that acquire a semaphore MUST NOT call methods that acquire another ClientDestroy utils.Semaphore }
ServerSemaphores includes a named Semaphore corresponding to each concurrency-limited sever operation.
func (*ServerSemaphores) Initialize ¶ added in v1.1.0
func (serversem *ServerSemaphores) Initialize()
Initialize initializes a set of server semaphores.
type Session ¶ added in v1.1.0
type Session struct {
// contains filtered or unexported fields
}
Session is an individual client connection to the server (TCP connection and associated per-connection data, such as capabilities). There is a many-one relationship between sessions and clients.
func (*Session) Destroyed ¶ added in v1.1.0
returns whether the session was actively destroyed (for example, by ping timeout or NS GHOST). avoids a race condition between asynchronous idle-timing-out of sessions, and a condition that allows implicit BRB on connection errors (since destroy()'s socket.Close() appears to socket.Read() as a connection error)
func (*Session) HasHistoryCaps ¶ added in v1.1.0
returns whether the client supports a smart history replay cap, and therefore autoreplay-on-join and similar should be suppressed
func (*Session) MaxlenRest ¶ added in v1.1.0
allow the negotiated message length limit to be read without locks; this is a convenience so that Session.SendRawMessage doesn't have to acquire any Client locks
func (*Session) Ping ¶ added in v1.1.0
func (session *Session) Ping()
Ping sends the client a PING message.
func (*Session) SendRawMessage ¶ added in v1.1.0
func (session *Session) SendRawMessage(message ircmsg.IrcMessage, blocking bool) error
SendRawMessage sends a raw message to the client.
func (*Session) SetDestroyed ¶ added in v1.1.0
func (session *Session) SetDestroyed()
sets the timed-out flag
func (*Session) SetMaxlenRest ¶ added in v1.1.0
func (session *Session) SetMaxlenRest()
set the negotiated message length based on session capabilities
func (*Session) SetQuitMessage ¶ added in v1.1.0
sets the session quit message, if there isn't one already
func (*Session) SetResumeID ¶ added in v1.1.0
type SessionData ¶ added in v1.1.0
type SessionData struct {
// contains filtered or unexported fields
}
type SnoManager ¶ added in v0.8.0
type SnoManager struct {
// contains filtered or unexported fields
}
SnoManager keeps track of which clients to send snomasks to.
func (*SnoManager) AddMasks ¶ added in v0.8.0
func (m *SnoManager) AddMasks(client *Client, masks ...sno.Mask)
AddMasks adds the given snomasks to the client.
func (*SnoManager) Initialize ¶ added in v1.1.0
func (m *SnoManager) Initialize()
func (*SnoManager) RemoveClient ¶ added in v0.8.0
func (m *SnoManager) RemoveClient(client *Client)
RemoveClient removes the given client from all of our lists.
func (*SnoManager) RemoveMasks ¶ added in v0.8.0
func (m *SnoManager) RemoveMasks(client *Client, masks ...sno.Mask)
RemoveMasks removes the given snomasks from the client.
func (*SnoManager) Send ¶ added in v0.8.0
func (m *SnoManager) Send(mask sno.Mask, content string)
Send sends the given snomask to all users signed up for it.
func (*SnoManager) String ¶ added in v0.8.0
func (m *SnoManager) String(client *Client) string
String returns the snomasks currently enabled.
type Socket ¶
Socket represents an IRC socket.
func (*Socket) BlockingWrite ¶ added in v1.0.0
BlockingWrite sends the given string out of Socket. Requirements:
- MUST block until the message is sent
- MUST bypass sendq (calls to BlockingWrite cannot, on their own, cause a sendq overflow)
- MUST provide mutual exclusion for socket.conn.Write
- MUST respect the same ordering guarantees as Write (i.e., if a call to Write that sends message m1 happens-before a call to BlockingWrite that sends message m2, m1 must be sent on the wire before m2
Callers MUST be writing to the client's socket from the client's own goroutine; other callers must use the nonblocking Write call instead. Otherwise, a client with a slow/unreliable connection risks stalling the progress of the system as a whole.
func (*Socket) Close ¶
func (socket *Socket) Close()
Close stops a Socket from being able to send/receive any more data.
func (*Socket) SetFinalData ¶ added in v0.8.0
SetFinalData sets the final data to send when the SocketWriter closes.
func (*Socket) Write ¶
Write sends the given string out of Socket. Requirements: 1. MUST NOT block for macroscopic amounts of time 2. MUST NOT reorder messages 3. MUST provide mutual exclusion for socket.conn.Write 4. SHOULD NOT tie up additional goroutines, beyond the one blocked on socket.conn.Write
type Stats ¶ added in v0.12.0
type Stats struct { StatsValues // contains filtered or unexported fields }
Stats tracks statistics for a running server
func (*Stats) ChangeInvisible ¶ added in v0.12.0
Modify the Invisible count
func (*Stats) ChangeOperators ¶ added in v0.12.0
Modify the Operator count
func (*Stats) GetValues ¶ added in v1.2.0
func (s *Stats) GetValues() (result StatsValues)
GetStats retrives total, invisible and oper count
type StatsValues ¶ added in v1.2.0
type TLSListenConfig ¶
TLSListenConfig defines configuration options for listening on TLS.
type TimerState ¶ added in v0.10.0
type TimerState uint
const ( TimerUnregistered TimerState = iota // client is unregistered TimerActive // client is actively sending commands TimerIdle // client is idle, we sent PING and are waiting for PONG TimerDead // client was terminated )
type TorListenersConfig ¶ added in v1.1.0
type UserMaskSet ¶
UserMaskSet holds a set of client masks and lets you match hostnames to them.
func NewUserMaskSet ¶
func NewUserMaskSet() *UserMaskSet
func (*UserMaskSet) Add ¶
func (set *UserMaskSet) Add(mask, creatorNickmask, creatorAccount string) (maskAdded string, err error)
Add adds the given mask to this set.
func (*UserMaskSet) Length ¶ added in v0.10.1
func (set *UserMaskSet) Length() int
func (*UserMaskSet) Masks ¶ added in v1.2.0
func (set *UserMaskSet) Masks() (result map[string]MaskInfo)
func (*UserMaskSet) Match ¶
func (set *UserMaskSet) Match(userhost string) bool
Match matches the given n!u@h.
func (*UserMaskSet) Remove ¶
func (set *UserMaskSet) Remove(mask string) (maskRemoved string, err error)
Remove removes the given mask from this set.
func (*UserMaskSet) SetMasks ¶ added in v1.2.0
func (set *UserMaskSet) SetMasks(masks map[string]MaskInfo)
type VHostConfig ¶ added in v0.12.0
type VHostInfo ¶ added in v0.12.0
type VHostInfo struct { ApprovedVHost string Enabled bool RequestedVHost string RejectedVHost string RejectionReason string LastRequestTime time.Time }
represents someone's status in hostserv
type WhoWas ¶
type WhoWas struct {
// contains filtered or unexported fields
}
WhoWas is the subset of client details needed to answer a WHOWAS query
type WhoWasList ¶
type WhoWasList struct {
// contains filtered or unexported fields
}
WhoWasList holds our list of prior clients (for use with the WHOWAS command).
func (*WhoWasList) Append ¶
func (list *WhoWasList) Append(whowas WhoWas)
Append adds an entry to the WhoWasList.
func (*WhoWasList) Find ¶
func (list *WhoWasList) Find(nickname string, limit int) (results []WhoWas)
Find tries to find an entry in our WhoWasList with the given details.
func (*WhoWasList) Initialize ¶ added in v1.1.0
func (list *WhoWasList) Initialize(size int)
NewWhoWasList returns a new WhoWasList
Source Files ¶
- accounts.go
- channel.go
- channelmanager.go
- channelreg.go
- chanserv.go
- client.go
- client_lookup_set.go
- commands.go
- config.go
- constants.go
- database.go
- dline.go
- errors.go
- fakelag.go
- gateways.go
- getters.go
- handlers.go
- help.go
- hostserv.go
- idletimer.go
- kline.go
- legacy.go
- modes.go
- monitor.go
- nickname.go
- nickserv.go
- numerics.go
- responsebuffer.go
- resume.go
- roleplay.go
- semaphores.go
- server.go
- services.go
- snomanager.go
- socket.go
- stats.go
- strings.go
- types.go
- whowas.go
- znc.go