|
@@ -54,37 +54,37 @@ func (server *Server) ReceiveCommands() {
|
54
|
54
|
case conn := <-server.conns:
|
55
|
55
|
NewClient(server, conn)
|
56
|
56
|
|
57
|
|
- case command := <-server.commands:
|
|
57
|
+ case cmd := <-server.commands:
|
|
58
|
+ client := cmd.Client()
|
58
|
59
|
if DEBUG_SERVER {
|
59
|
|
- log.Printf("%s → %s %+v", command.Client(), server, command)
|
|
60
|
+ log.Printf("%s → %s %s", client, server, cmd)
|
60
|
61
|
}
|
61
|
|
- client := command.Client()
|
62
|
62
|
|
63
|
63
|
switch client.phase {
|
64
|
64
|
case Authorization:
|
65
|
|
- authCommand, ok := command.(AuthServerCommand)
|
|
65
|
+ authCmd, ok := cmd.(AuthServerCommand)
|
66
|
66
|
if !ok {
|
67
|
67
|
client.Destroy()
|
68
|
68
|
continue
|
69
|
69
|
}
|
70
|
|
- authCommand.HandleAuthServer(server)
|
|
70
|
+ authCmd.HandleAuthServer(server)
|
71
|
71
|
|
72
|
72
|
case Registration:
|
73
|
|
- regCommand, ok := command.(RegServerCommand)
|
|
73
|
+ regCmd, ok := cmd.(RegServerCommand)
|
74
|
74
|
if !ok {
|
75
|
75
|
client.Destroy()
|
76
|
76
|
continue
|
77
|
77
|
}
|
78
|
|
- regCommand.HandleRegServer(server)
|
|
78
|
+ regCmd.HandleRegServer(server)
|
79
|
79
|
|
80
|
80
|
default:
|
81
|
|
- serverCommand, ok := command.(ServerCommand)
|
|
81
|
+ srvCmd, ok := cmd.(ServerCommand)
|
82
|
82
|
if !ok {
|
83
|
|
- client.Reply(ErrUnknownCommand(server, command.Code()))
|
|
83
|
+ client.Reply(ErrUnknownCommand(server, cmd.Code()))
|
84
|
84
|
continue
|
85
|
85
|
}
|
86
|
86
|
client.Touch()
|
87
|
|
- serverCommand.HandleServer(server)
|
|
87
|
+ srvCmd.HandleServer(server)
|
88
|
88
|
}
|
89
|
89
|
}
|
90
|
90
|
}
|
|
@@ -264,11 +264,16 @@ func (m *NickCommand) HandleRegServer(s *Server) {
|
264
|
264
|
return
|
265
|
265
|
}
|
266
|
266
|
|
267
|
|
- if s.clients[m.nickname] != nil {
|
|
267
|
+ if s.clients.Get(m.nickname) != nil {
|
268
|
268
|
client.Reply(ErrNickNameInUse(s, m.nickname))
|
269
|
269
|
return
|
270
|
270
|
}
|
271
|
271
|
|
|
272
|
+ if !IsNickname(m.nickname) {
|
|
273
|
+ client.Reply(ErrErroneusNickname(s, m.nickname))
|
|
274
|
+ return
|
|
275
|
+ }
|
|
276
|
+
|
272
|
277
|
client.ChangeNickname(m.nickname)
|
273
|
278
|
s.clients.Add(client)
|
274
|
279
|
s.tryRegister(client)
|
|
@@ -304,7 +309,7 @@ func (msg *NickCommand) HandleServer(server *Server) {
|
304
|
309
|
return
|
305
|
310
|
}
|
306
|
311
|
|
307
|
|
- if server.clients[msg.nickname] != nil {
|
|
312
|
+ if server.clients.Get(msg.nickname) != nil {
|
308
|
313
|
client.Reply(ErrNickNameInUse(server, msg.nickname))
|
309
|
314
|
return
|
310
|
315
|
}
|
|
@@ -395,7 +400,12 @@ func (msg *PrivMsgCommand) HandleServer(server *Server) {
|
395
|
400
|
|
396
|
401
|
func (m *ModeCommand) HandleServer(s *Server) {
|
397
|
402
|
client := m.Client()
|
398
|
|
- target := s.clients[m.nickname]
|
|
403
|
+ target := s.clients.Get(m.nickname)
|
|
404
|
+
|
|
405
|
+ if target == nil {
|
|
406
|
+ client.Reply(ErrNoSuchNick(s, m.nickname))
|
|
407
|
+ return
|
|
408
|
+ }
|
399
|
409
|
|
400
|
410
|
if client != target && !client.flags[Operator] {
|
401
|
411
|
client.Reply(ErrUsersDontMatch(s))
|
|
@@ -521,8 +531,8 @@ func (msg *IsOnCommand) HandleServer(server *Server) {
|
521
|
531
|
|
522
|
532
|
ison := make([]string, 0)
|
523
|
533
|
for _, nick := range msg.nicks {
|
524
|
|
- if _, ok := server.clients[nick]; ok {
|
525
|
|
- ison = append(ison, nick)
|
|
534
|
+ if iclient := server.clients.Get(nick); iclient != nil {
|
|
535
|
+ ison = append(ison, iclient.Nick())
|
526
|
536
|
}
|
527
|
537
|
}
|
528
|
538
|
|
|
@@ -546,7 +556,7 @@ func (msg *NoticeCommand) HandleServer(server *Server) {
|
546
|
556
|
return
|
547
|
557
|
}
|
548
|
558
|
|
549
|
|
- target := server.clients[msg.target]
|
|
559
|
+ target := server.clients.Get(msg.target)
|
550
|
560
|
if target == nil {
|
551
|
561
|
client.Reply(ErrNoSuchNick(server, msg.target))
|
552
|
562
|
return
|