mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-10 22:19:31 +01:00
Split isupport to its' own subpackage
This commit is contained in:
parent
eac6a69782
commit
4aa52956e5
@ -494,6 +494,14 @@ func (client *Client) LoggedIntoAccount() bool {
|
|||||||
return client.account != nil && client.account != &NoAccount
|
return client.account != nil && client.account != &NoAccount
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RplISupport outputs our ISUPPORT lines to the client. This is used on connection and in VERSION responses.
|
||||||
|
func (client *Client) RplISupport() {
|
||||||
|
for _, tokenline := range client.server.getISupport().CachedReply {
|
||||||
|
// ugly trickery ahead
|
||||||
|
client.Send(nil, client.server.name, RPL_ISUPPORT, append([]string{client.nick}, tokenline...)...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Quit sends the given quit message to the client (but does not destroy them).
|
// Quit sends the given quit message to the client (but does not destroy them).
|
||||||
func (client *Client) Quit(message string) {
|
func (client *Client) Quit(message string) {
|
||||||
client.quitMutex.Lock()
|
client.quitMutex.Lock()
|
||||||
|
@ -3,7 +3,9 @@
|
|||||||
|
|
||||||
package irc
|
package irc
|
||||||
|
|
||||||
func (server *Server) getISupport() *ISupportList {
|
import "github.com/oragono/oragono/irc/isupport"
|
||||||
|
|
||||||
|
func (server *Server) getISupport() *isupport.List {
|
||||||
server.configurableStateMutex.RLock()
|
server.configurableStateMutex.RLock()
|
||||||
defer server.configurableStateMutex.RUnlock()
|
defer server.configurableStateMutex.RUnlock()
|
||||||
return server.isupport
|
return server.isupport
|
||||||
|
@ -1,34 +1,37 @@
|
|||||||
// Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
|
// Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
|
||||||
// released under the MIT license
|
// released under the MIT license
|
||||||
|
|
||||||
package irc
|
package isupport
|
||||||
|
|
||||||
import "fmt"
|
import "fmt"
|
||||||
import "sort"
|
import "sort"
|
||||||
|
|
||||||
const isupportSupportedString = "are supported by this server"
|
const (
|
||||||
|
maxLastArgLength = 400
|
||||||
|
supportedString = "are supported by this server"
|
||||||
|
)
|
||||||
|
|
||||||
// ISupportList holds a list of ISUPPORT tokens
|
// List holds a list of ISUPPORT tokens
|
||||||
type ISupportList struct {
|
type List struct {
|
||||||
Tokens map[string]*string
|
Tokens map[string]*string
|
||||||
CachedReply [][]string
|
CachedReply [][]string
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewISupportList returns a new ISupportList
|
// NewList returns a new List
|
||||||
func NewISupportList() *ISupportList {
|
func NewList() *List {
|
||||||
var il ISupportList
|
var il List
|
||||||
il.Tokens = make(map[string]*string)
|
il.Tokens = make(map[string]*string)
|
||||||
il.CachedReply = make([][]string, 0)
|
il.CachedReply = make([][]string, 0)
|
||||||
return &il
|
return &il
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add adds an RPL_ISUPPORT token to our internal list
|
// Add adds an RPL_ISUPPORT token to our internal list
|
||||||
func (il *ISupportList) Add(name string, value string) {
|
func (il *List) Add(name string, value string) {
|
||||||
il.Tokens[name] = &value
|
il.Tokens[name] = &value
|
||||||
}
|
}
|
||||||
|
|
||||||
// AddNoValue adds an RPL_ISUPPORT token that does not have a value
|
// AddNoValue adds an RPL_ISUPPORT token that does not have a value
|
||||||
func (il *ISupportList) AddNoValue(name string) {
|
func (il *List) AddNoValue(name string) {
|
||||||
il.Tokens[name] = nil
|
il.Tokens[name] = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,7 +44,7 @@ func getTokenString(name string, value *string) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetDifference returns the difference between two token lists.
|
// GetDifference returns the difference between two token lists.
|
||||||
func (il *ISupportList) GetDifference(newil *ISupportList) [][]string {
|
func (il *List) GetDifference(newil *List) [][]string {
|
||||||
var outTokens sort.StringSlice
|
var outTokens sort.StringSlice
|
||||||
|
|
||||||
// append removed tokens
|
// append removed tokens
|
||||||
@ -86,7 +89,7 @@ func (il *ISupportList) GetDifference(newil *ISupportList) [][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(cache) == 13 || len(token)+length >= maxLastArgLength {
|
if len(cache) == 13 || len(token)+length >= maxLastArgLength {
|
||||||
cache = append(cache, isupportSupportedString)
|
cache = append(cache, supportedString)
|
||||||
replies = append(replies, cache)
|
replies = append(replies, cache)
|
||||||
cache = make([]string, 0)
|
cache = make([]string, 0)
|
||||||
length = 0
|
length = 0
|
||||||
@ -94,7 +97,7 @@ func (il *ISupportList) GetDifference(newil *ISupportList) [][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(cache) > 0 {
|
if len(cache) > 0 {
|
||||||
cache = append(cache, isupportSupportedString)
|
cache = append(cache, supportedString)
|
||||||
replies = append(replies, cache)
|
replies = append(replies, cache)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +105,7 @@ func (il *ISupportList) GetDifference(newil *ISupportList) [][]string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// RegenerateCachedReply regenerates the cached RPL_ISUPPORT reply
|
// RegenerateCachedReply regenerates the cached RPL_ISUPPORT reply
|
||||||
func (il *ISupportList) RegenerateCachedReply() {
|
func (il *List) RegenerateCachedReply() {
|
||||||
il.CachedReply = make([][]string, 0)
|
il.CachedReply = make([][]string, 0)
|
||||||
var length int // Length of the current cache
|
var length int // Length of the current cache
|
||||||
var cache []string // Token list cache
|
var cache []string // Token list cache
|
||||||
@ -127,7 +130,7 @@ func (il *ISupportList) RegenerateCachedReply() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(cache) == 13 || len(token)+length >= maxLastArgLength {
|
if len(cache) == 13 || len(token)+length >= maxLastArgLength {
|
||||||
cache = append(cache, isupportSupportedString)
|
cache = append(cache, supportedString)
|
||||||
il.CachedReply = append(il.CachedReply, cache)
|
il.CachedReply = append(il.CachedReply, cache)
|
||||||
cache = make([]string, 0)
|
cache = make([]string, 0)
|
||||||
length = 0
|
length = 0
|
||||||
@ -135,15 +138,7 @@ func (il *ISupportList) RegenerateCachedReply() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(cache) > 0 {
|
if len(cache) > 0 {
|
||||||
cache = append(cache, isupportSupportedString)
|
cache = append(cache, supportedString)
|
||||||
il.CachedReply = append(il.CachedReply, cache)
|
il.CachedReply = append(il.CachedReply, cache)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RplISupport outputs our ISUPPORT lines to the client. This is used on connection and in VERSION responses.
|
|
||||||
func (client *Client) RplISupport() {
|
|
||||||
for _, tokenline := range client.server.getISupport().CachedReply {
|
|
||||||
// ugly trickery ahead
|
|
||||||
client.Send(nil, client.server.name, RPL_ISUPPORT, append([]string{client.nick}, tokenline...)...)
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,7 @@
|
|||||||
// Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
|
// Copyright (c) 2016 Daniel Oaks <daniel@danieloaks.net>
|
||||||
// released under the MIT license
|
// released under the MIT license
|
||||||
|
|
||||||
package irc
|
package isupport
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
@ -10,7 +10,7 @@ import (
|
|||||||
|
|
||||||
func TestISUPPORT(t *testing.T) {
|
func TestISUPPORT(t *testing.T) {
|
||||||
// create first list
|
// create first list
|
||||||
tList1 := NewISupportList()
|
tList1 := NewList()
|
||||||
tList1.Add("SASL", "yes")
|
tList1.Add("SASL", "yes")
|
||||||
tList1.Add("CASEMAPPING", "rfc1459-strict")
|
tList1.Add("CASEMAPPING", "rfc1459-strict")
|
||||||
tList1.Add("INVEX", "i")
|
tList1.Add("INVEX", "i")
|
||||||
@ -24,7 +24,7 @@ func TestISUPPORT(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create second list
|
// create second list
|
||||||
tList2 := NewISupportList()
|
tList2 := NewList()
|
||||||
tList2.Add("SASL", "yes")
|
tList2.Add("SASL", "yes")
|
||||||
tList2.Add("CASEMAPPING", "ascii")
|
tList2.Add("CASEMAPPING", "ascii")
|
||||||
tList2.AddNoValue("INVEX")
|
tList2.AddNoValue("INVEX")
|
@ -24,6 +24,7 @@ import (
|
|||||||
"github.com/goshuirc/irc-go/ircfmt"
|
"github.com/goshuirc/irc-go/ircfmt"
|
||||||
"github.com/goshuirc/irc-go/ircmsg"
|
"github.com/goshuirc/irc-go/ircmsg"
|
||||||
"github.com/oragono/oragono/irc/caps"
|
"github.com/oragono/oragono/irc/caps"
|
||||||
|
"github.com/oragono/oragono/irc/isupport"
|
||||||
"github.com/oragono/oragono/irc/logger"
|
"github.com/oragono/oragono/irc/logger"
|
||||||
"github.com/oragono/oragono/irc/sno"
|
"github.com/oragono/oragono/irc/sno"
|
||||||
"github.com/tidwall/buntdb"
|
"github.com/tidwall/buntdb"
|
||||||
@ -91,7 +92,7 @@ type Server struct {
|
|||||||
defaultChannelModes Modes
|
defaultChannelModes Modes
|
||||||
dlines *DLineManager
|
dlines *DLineManager
|
||||||
loggingRawIO bool
|
loggingRawIO bool
|
||||||
isupport *ISupportList
|
isupport *isupport.List
|
||||||
klines *KLineManager
|
klines *KLineManager
|
||||||
limits Limits
|
limits Limits
|
||||||
listeners map[string]*ListenerWrapper
|
listeners map[string]*ListenerWrapper
|
||||||
@ -175,7 +176,7 @@ func (server *Server) setISupport() {
|
|||||||
server.configurableStateMutex.RLock()
|
server.configurableStateMutex.RLock()
|
||||||
|
|
||||||
// add RPL_ISUPPORT tokens
|
// add RPL_ISUPPORT tokens
|
||||||
isupport := NewISupportList()
|
isupport := isupport.NewList()
|
||||||
isupport.Add("AWAYLEN", strconv.Itoa(server.limits.AwayLen))
|
isupport.Add("AWAYLEN", strconv.Itoa(server.limits.AwayLen))
|
||||||
isupport.Add("CASEMAPPING", casemappingName)
|
isupport.Add("CASEMAPPING", casemappingName)
|
||||||
isupport.Add("CHANMODES", strings.Join([]string{Modes{BanMask, ExceptMask, InviteMask}.String(), "", Modes{UserLimit, Key}.String(), Modes{InviteOnly, Moderated, NoOutside, OpOnlyTopic, ChanRoleplaying, Secret}.String()}, ","))
|
isupport.Add("CHANMODES", strings.Join([]string{Modes{BanMask, ExceptMask, InviteMask}.String(), "", Modes{UserLimit, Key}.String(), Modes{InviteOnly, Moderated, NoOutside, OpOnlyTopic, ChanRoleplaying, Secret}.String()}, ","))
|
||||||
|
Loading…
Reference in New Issue
Block a user