X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=netconn.c;h=631d89b7881e79fd7ea6ae32c24f981f8adb275d;hb=305eb3834a21c5ceaee8531f645848878ad10152;hp=234eec60a26ccfe05c9dbb4d1654c13b15839487;hpb=c40524593d4eebc3b4bde75bb88ebaec2d64e1d3;p=xonotic%2Fdarkplaces.git diff --git a/netconn.c b/netconn.c index 234eec60..631d89b7 100755 --- a/netconn.c +++ b/netconn.c @@ -44,8 +44,9 @@ static cvar_t sv_masters [] = {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "sv_master2", "", "user-chosen master server 2"}, {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "sv_master3", "", "user-chosen master server 3"}, {CF_CLIENT | CF_SERVER | CF_ARCHIVE, "sv_master4", "", "user-chosen master server 4"}, - {CF_CLIENT | CF_SERVER, "sv_masterextra1", "dpmaster.deathmask.net", "dpmaster.deathmask.net - default master server 1 (admin: Willis)"}, // admin: Willis - {CF_CLIENT | CF_SERVER, "sv_masterextra2", "dpmaster.tchr.no", "dpmaster.tchr.no - default master server 2 (admin: tChr)"}, // admin: tChr + {CF_CLIENT | CF_SERVER, "sv_masterextra1", "dpmaster.deathmask.net", "dpmaster.deathmask.net - default master server 1 (admin: Willis)"}, + {CF_CLIENT | CF_SERVER, "sv_masterextra2", "dpmaster.tchr.no", "dpmaster.tchr.no - default master server 2 (admin: tChr)"}, + {CF_CLIENT | CF_SERVER, "sv_masterextra3", "dpm.dpmaster.org:27777", "dpm.dpmaster.org - default master server 3 (admin: gazby/soylent_cow)"}, {0, NULL, NULL, NULL} }; @@ -1145,22 +1146,19 @@ void NetConn_Close(netconn_t *conn) static int clientport = -1; static int clientport2 = -1; -static int hostport = -1; -void NetConn_UpdateSockets(void) -{ - int i, j; - // TODO add logic to automatically close sockets if needed - LHNET_DefaultDSCP(net_tos_dscp.integer); - - if (cls.state != ca_dedicated) +// Call on disconnect, during startup, or if cl_port/cl_netport is changed +static void NetConn_CL_UpdateSockets_Callback(cvar_t *var) +{ + if(cls.state != ca_dedicated) { - if (clientport2 != cl_netport.integer) + if (clientport2 != var->integer) { - clientport2 = cl_netport.integer; + clientport2 = var->integer; if (cls.state == ca_connected) Con_Print("Changing \"cl_port\" will not take effect until you reconnect.\n"); } + if (cls.state == ca_disconnected && clientport != clientport2) { clientport = clientport2; @@ -1169,13 +1167,27 @@ void NetConn_UpdateSockets(void) if (cl_numsockets == 0) NetConn_OpenClientPorts(); } +} + +static int hostport = -1; - if (hostport != sv_netport.integer) +// Call when port/sv_netport is changed +static void NetConn_sv_netport_Callback(cvar_t *var) +{ + if (hostport != var->integer) { - hostport = sv_netport.integer; + hostport = var->integer; if (sv.active) Con_Print("Changing \"port\" will not take effect until \"map\" command is executed.\n"); } +} + +void NetConn_UpdateSockets(void) +{ + int i, j; + + // TODO add logic to automatically close sockets if needed + LHNET_DefaultDSCP(net_tos_dscp.integer); for (j = 0;j < MAX_RCONS;j++) { @@ -1512,13 +1524,7 @@ static void NetConn_ConnectionEstablished(lhnetsocket_t *mysocket, lhnetaddress_ #ifdef CONFIG_MENU M_Update_Return_Reason(""); #endif - // if we're connecting to a remote server, shut down any local server - if (LHNETADDRESS_GetAddressType(peeraddress) != LHNETADDRESSTYPE_LOOP && sv.active) - { - SV_LockThreadMutex(); - SV_Shutdown (); - SV_UnlockThreadMutex(); - } + // Disconnect from the current server or stop demo playback if(cls.state == ca_connected || cls.demoplayback) CL_Disconnect(); // allocate a net connection to keep track of things @@ -2479,13 +2485,7 @@ void NetConn_ClientFrame(void) NetConn_QueryQueueFrame(); #endif if (cls.netcon && host.realtime > cls.netcon->timeout && !sv.active) - { - Con_Print("Connection timed out\n"); - CL_Disconnect(); - SV_LockThreadMutex(); - SV_Shutdown (); - SV_UnlockThreadMutex(); - } + CL_DisconnectEx(true, "Connection timed out"); } static void NetConn_BuildChallengeString(char *buffer, int bufferlength) @@ -2923,7 +2923,7 @@ static void RCon_Execute(lhnetsocket_t *mysocket, lhnetaddress_t *peeraddress, c if(l) { client_t *host_client_save = host_client; - Cmd_ExecuteString(&cmd_server, s, src_local, true); + Cmd_ExecuteString(cmd_local, s, src_local, true); host_client = host_client_save; // in case it is a command that changes host_client (like restart) } @@ -3610,15 +3610,6 @@ void NetConn_ServerFrame(void) for (i = 0;i < sv_numsockets;i++) while (sv_sockets[i] && (length = NetConn_Read(sv_sockets[i], readbuffer, sizeof(readbuffer), &peeraddress)) > 0) NetConn_ServerParsePacket(sv_sockets[i], readbuffer, length, &peeraddress); - for (i = 0, host_client = svs.clients;i < svs.maxclients;i++, host_client++) - { - // never timeout loopback connections - if (host_client->netconnection && host.realtime > host_client->netconnection->timeout && LHNETADDRESS_GetAddressType(&host_client->netconnection->peeraddress) != LHNETADDRESSTYPE_LOOP) - { - Con_Printf("Client \"%s\" connection timed out\n", host_client->name); - SV_DropClient(false); - } - } } void NetConn_SleepMicroseconds(int microseconds) @@ -3894,8 +3885,9 @@ void NetConn_Init(void) Cvar_RegisterCallback(&net_slist_favorites, NetConn_UpdateFavorites_c); #endif Cvar_RegisterVariable(&net_slist_pause); - if(LHNET_DefaultDSCP(-1) >= 0) // register cvar only if supported - Cvar_RegisterVariable(&net_tos_dscp); +#ifdef IP_TOS // register cvar only if supported + Cvar_RegisterVariable(&net_tos_dscp); +#endif Cvar_RegisterVariable(&net_messagetimeout); Cvar_RegisterVariable(&net_connecttimeout); Cvar_RegisterVariable(&net_connectfloodblockingtimeout); @@ -3905,13 +3897,15 @@ void NetConn_Init(void) Cvar_RegisterVariable(&net_fakelag); Cvar_RegisterVariable(&net_fakeloss_send); Cvar_RegisterVariable(&net_fakeloss_receive); - Cvar_RegisterAlias(&net_fakelag, "cl_netlocalping"); - Cvar_RegisterAlias(&net_fakeloss_send, "cl_netpacketloss_send"); - Cvar_RegisterAlias(&net_fakeloss_receive, "cl_netpacketloss_receive"); + Cvar_RegisterVirtual(&net_fakelag, "cl_netlocalping"); + Cvar_RegisterVirtual(&net_fakeloss_send, "cl_netpacketloss_send"); + Cvar_RegisterVirtual(&net_fakeloss_receive, "cl_netpacketloss_receive"); Cvar_RegisterVariable(&hostname); Cvar_RegisterVariable(&developer_networking); Cvar_RegisterVariable(&cl_netport); + Cvar_RegisterCallback(&cl_netport, NetConn_CL_UpdateSockets_Callback); Cvar_RegisterVariable(&sv_netport); + Cvar_RegisterCallback(&sv_netport, NetConn_sv_netport_Callback); Cvar_RegisterVariable(&net_address); Cvar_RegisterVariable(&net_address_ipv6); Cvar_RegisterVariable(&sv_public);