|
@@ -62,37 +62,36 @@ type ListenerWrapper struct {
|
62
|
62
|
|
63
|
63
|
// Server is the main Oragono server.
|
64
|
64
|
type Server struct {
|
65
|
|
- accounts AccountManager
|
66
|
|
- channels ChannelManager
|
67
|
|
- channelRegistry ChannelRegistry
|
68
|
|
- clients ClientManager
|
69
|
|
- config unsafe.Pointer
|
70
|
|
- configFilename string
|
71
|
|
- configurableStateMutex sync.RWMutex // tier 1; generic protection for server state modified by rehash()
|
72
|
|
- connectionLimiter *connection_limits.Limiter
|
73
|
|
- connectionThrottler *connection_limits.Throttler
|
74
|
|
- ctime time.Time
|
75
|
|
- dlines *DLineManager
|
76
|
|
- helpIndexManager HelpIndexManager
|
77
|
|
- isupport *isupport.List
|
78
|
|
- klines *KLineManager
|
79
|
|
- listeners map[string]*ListenerWrapper
|
80
|
|
- logger *logger.Manager
|
81
|
|
- monitorManager *MonitorManager
|
82
|
|
- motdLines []string
|
83
|
|
- name string
|
84
|
|
- nameCasefolded string
|
85
|
|
- rehashMutex sync.Mutex // tier 4
|
86
|
|
- rehashSignal chan os.Signal
|
87
|
|
- pprofServer *http.Server
|
88
|
|
- resumeManager ResumeManager
|
89
|
|
- signals chan os.Signal
|
90
|
|
- snomasks *SnoManager
|
91
|
|
- store *buntdb.DB
|
92
|
|
- torLimiter connection_limits.TorLimiter
|
93
|
|
- whoWas WhoWasList
|
94
|
|
- stats Stats
|
95
|
|
- semaphores ServerSemaphores
|
|
65
|
+ accounts AccountManager
|
|
66
|
+ channels ChannelManager
|
|
67
|
+ channelRegistry ChannelRegistry
|
|
68
|
+ clients ClientManager
|
|
69
|
+ config unsafe.Pointer
|
|
70
|
+ configFilename string
|
|
71
|
+ connectionLimiter *connection_limits.Limiter
|
|
72
|
+ connectionThrottler *connection_limits.Throttler
|
|
73
|
+ ctime time.Time
|
|
74
|
+ dlines *DLineManager
|
|
75
|
+ helpIndexManager HelpIndexManager
|
|
76
|
+ isupport *isupport.List
|
|
77
|
+ klines *KLineManager
|
|
78
|
+ listeners map[string]*ListenerWrapper
|
|
79
|
+ logger *logger.Manager
|
|
80
|
+ monitorManager *MonitorManager
|
|
81
|
+ motdLines []string
|
|
82
|
+ name string
|
|
83
|
+ nameCasefolded string
|
|
84
|
+ rehashMutex sync.Mutex // tier 4
|
|
85
|
+ rehashSignal chan os.Signal
|
|
86
|
+ pprofServer *http.Server
|
|
87
|
+ resumeManager ResumeManager
|
|
88
|
+ signals chan os.Signal
|
|
89
|
+ snomasks *SnoManager
|
|
90
|
+ store *buntdb.DB
|
|
91
|
+ torLimiter connection_limits.TorLimiter
|
|
92
|
+ whoWas WhoWasList
|
|
93
|
+ stats Stats
|
|
94
|
+ semaphores ServerSemaphores
|
96
|
95
|
}
|
97
|
96
|
|
98
|
97
|
var (
|
|
@@ -141,13 +140,12 @@ func NewServer(config *Config, logger *logger.Manager) (*Server, error) {
|
141
|
140
|
}
|
142
|
141
|
|
143
|
142
|
// setISupport sets up our RPL_ISUPPORT reply.
|
144
|
|
-func (server *Server) setISupport() (err error) {
|
|
143
|
+func (config *Config) generateISupport() (err error) {
|
145
|
144
|
maxTargetsString := strconv.Itoa(maxTargets)
|
146
|
145
|
|
147
|
|
- config := server.Config()
|
148
|
|
-
|
149
|
146
|
// add RPL_ISUPPORT tokens
|
150
|
|
- isupport := isupport.NewList()
|
|
147
|
+ isupport := &config.Server.isupport
|
|
148
|
+ isupport.Initialize()
|
151
|
149
|
isupport.Add("AWAYLEN", strconv.Itoa(config.Limits.AwayLen))
|
152
|
150
|
isupport.Add("CASEMAPPING", "ascii")
|
153
|
151
|
isupport.Add("CHANMODES", strings.Join([]string{modes.Modes{modes.BanMask, modes.ExceptMask, modes.InviteMask}.String(), "", modes.Modes{modes.UserLimit, modes.Key}.String(), modes.Modes{modes.InviteOnly, modes.Moderated, modes.NoOutside, modes.OpOnlyTopic, modes.ChanRoleplaying, modes.Secret}.String()}, ","))
|
|
@@ -175,13 +173,6 @@ func (server *Server) setISupport() (err error) {
|
175
|
173
|
isupport.Add("UTF8MAPPING", casemappingName)
|
176
|
174
|
|
177
|
175
|
err = isupport.RegenerateCachedReply()
|
178
|
|
- if err != nil {
|
179
|
|
- return
|
180
|
|
- }
|
181
|
|
-
|
182
|
|
- server.configurableStateMutex.Lock()
|
183
|
|
- server.isupport = isupport
|
184
|
|
- server.configurableStateMutex.Unlock()
|
185
|
176
|
return
|
186
|
177
|
}
|
187
|
178
|
|
|
@@ -786,13 +777,8 @@ func (server *Server) applyConfig(config *Config, initial bool) (err error) {
|
786
|
777
|
|
787
|
778
|
// set RPL_ISUPPORT
|
788
|
779
|
var newISupportReplies [][]string
|
789
|
|
- oldISupportList := server.ISupport()
|
790
|
|
- err = server.setISupport()
|
791
|
|
- if err != nil {
|
792
|
|
- return err
|
793
|
|
- }
|
794
|
|
- if oldISupportList != nil {
|
795
|
|
- newISupportReplies = oldISupportList.GetDifference(server.ISupport())
|
|
780
|
+ if oldConfig != nil {
|
|
781
|
+ newISupportReplies = oldConfig.Server.isupport.GetDifference(&config.Server.isupport)
|
796
|
782
|
}
|
797
|
783
|
|
798
|
784
|
// we are now open for business
|