support bad USER/NICK order for Lite IRC, set realname as the nmdc description

--HG--
branch : nmdc-ircfrontend
This commit is contained in:
. 2016-05-08 13:29:20 +12:00
parent f51bd29e07
commit a6ed910933
2 changed files with 15 additions and 3 deletions

View File

@ -23,6 +23,7 @@ Unusable:
2016/05/07 22:57:04 <<< :Your nickname is already being used KILL A 2016/05/07 22:57:04 <<< :Your nickname is already being used KILL A
2016/05/07 22:57:04 >>> 'NICK' [pineapple420] 2016/05/07 22:57:04 >>> 'NICK' [pineapple420]
2016/05/07 22:57:04 Broken loop. 2016/05/07 22:57:04 Broken loop.
- some patches in place, needs retesting
Yaaic/Atomic Yaaic/Atomic
- doesn't properly understand/parse the room join - doesn't properly understand/parse the room join
Atomic Atomic

View File

@ -306,6 +306,11 @@ func (s *Server) handleCommand(command string, args []string) {
if s.upstreamLauncher.Self.Nick == "" { if s.upstreamLauncher.Self.Nick == "" {
// allow set, as part of the login phase // allow set, as part of the login phase
s.upstreamLauncher.Self.Nick = args[0] s.upstreamLauncher.Self.Nick = args[0]
} else if args[0] == s.upstreamLauncher.Self.Nick {
// Ignore
// Required for compatibility with Lite IRC, which sends USER/NICK in the wrong order
} else { } else {
s.reply(rplKill, "Can't change nicks on this server", "") s.reply(rplKill, "Can't change nicks on this server", "")
s.DisconnectClient() s.DisconnectClient()
@ -322,9 +327,15 @@ func (s *Server) handleCommand(command string, args []string) {
} }
if s.upstreamLauncher.Self.Nick == "" { if s.upstreamLauncher.Self.Nick == "" {
s.reply(rplKill, "Your nickname is already being used", "") // Whatever, treat it as a NICK call (non-strict client handshake) and take the username field to be the intended nick
s.DisconnectClient() // This will allow Lite IRC's bad handshake to log in (as long as the username and the nickname are the same)
return s.upstreamLauncher.Self.Nick = args[0]
}
// Use the client's {real name} field as an NMDC {description}
if len(args) >= 4 && len(args[3]) > 0 && args[3][0] == ':' {
realName := strings.Join(args[3:], " ")[1:]
s.upstreamLauncher.Self.Description = realName
} }
s.reply(rplWelcome) s.reply(rplWelcome)