+ // QuakeWorld compatibility
+ if (length >= 1 && string[0] == 'j' && cls.connect_trying)
+ {
+ // accept message
+ M_Update_Return_Reason("Accepted");
+ NetConn_ConnectionEstablished(mysocket, peeraddress, PROTOCOL_QUAKEWORLD);
+ return true;
+ }
+ if (length > 1 && string[0] == 'c' && string[1] >= '0' && string[1] <= '9' && cls.connect_trying)
+ {
+ // challenge message
+ LHNETADDRESS_ToString(peeraddress, addressstring2, sizeof(addressstring2), true);
+ Con_Printf("challenge %s received, sending connect request back to %s\n", string + 1, addressstring2);
+ M_Update_Return_Reason("Got challenge response");
+ cls.qw_qport = qport.integer;
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "*ip", addressstring2);
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "name", cl_name.string);
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "topcolor", va("%i", (cl_color.integer >> 4) & 15));
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "bottomcolor", va("%i", (cl_color.integer) & 15));
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "rate", va("%i", cl_rate.integer));
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "msg", "1");
+ InfoString_SetValue(cls.userinfo, sizeof(cls.userinfo), "*ver", engineversion);
+ NetConn_WriteString(mysocket, va("\377\377\377\377connect %i %i %i \"%s\"\n", 28, cls.qw_qport, atoi(string + 1), cls.userinfo), peeraddress);
+ return true;
+ }
+ if (string[0] == 'n')
+ {
+ // qw print command
+ Con_Printf("QW print command from server at %s:\n", addressstring2, string + 1);
+ }