+ logReply(r)
+
+ err := r.Error()
+
+ if err != nil {
+ switch r.Code() {
+ // 555 -- banned
+ // 601 -- server down, treat the same as a ban
+ case 555, 601:
+ setBanned()
+ case 500: // bad credentials
+ udp.credentials.shred()
+ udp.credentials = nil
+ case 503, 504: // client rejected
+ panic(err)
+ }
+ }
+ udp.connected = err == nil
+
+ if udp.connected {
+ // We can't use SendRecv here as it would deadlock
+ ch := make(chan udpapi.APIReply, 1)
+ udp.sendQueueCh <- paramSet{
+ cmd: "USER",
+ params: paramMap{"user": decrypt(c.username)},
+ ch: ch,
+ }
+ reply := <-ch
+
+ if reply != nil {
+ uid, _ := parseUserReply(reply)
+ udp.user = uid.User()
+ }
+ }
+
+ runtime.GC()
+ return r