X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=netconn.c;h=a82f977470f42546c82d0d0b9358e3cbfe119bd6;hb=7fe24a9cf3db833bbbb4814dd42512519ac0bcdd;hp=e806457a982f37858feff5696b04ea34272af859;hpb=c313816329efcb3d80304fc6b2fbc9507c3ed16c;p=xonotic%2Fdarkplaces.git diff --git a/netconn.c b/netconn.c index e806457a..a82f9774 100755 --- a/netconn.c +++ b/netconn.c @@ -206,25 +206,34 @@ static qboolean _ServerList_CompareInt( int A, serverlist_maskop_t op, int B ) static qboolean _ServerList_CompareStr( const char *A, serverlist_maskop_t op, const char *B ) { + int i; + char bufferA[ 256 ], bufferB[ 256 ]; // should be more than enough + for (i = 0;i < (int)sizeof(bufferA)-1 && A[i];i++) + bufferA[i] = (A[i] >= 'A' && A[i] <= 'Z') ? (A[i] + 'a' - 'A') : A[i]; + bufferA[i] = 0; + for (i = 0;i < (int)sizeof(bufferB)-1 && B[i];i++) + bufferB[i] = (B[i] >= 'A' && B[i] <= 'Z') ? (B[i] + 'a' - 'A') : B[i]; + bufferB[i] = 0; + // Same here, also using an intermediate & final return would be more appropriate // A info B mask switch( op ) { case SLMO_CONTAINS: - return *B && !!strstr( A, B ); // we want a real bool + return *bufferB && !!strstr( bufferA, bufferB ); // we want a real bool case SLMO_NOTCONTAIN: - return !*B || !strstr( A, B ); + return !*bufferB || !strstr( bufferA, bufferB ); case SLMO_LESS: - return strcmp( A, B ) < 0; + return strcmp( bufferA, bufferB ) < 0; case SLMO_LESSEQUAL: - return strcmp( A, B ) <= 0; + return strcmp( bufferA, bufferB ) <= 0; case SLMO_EQUAL: - return strcmp( A, B ) == 0; + return strcmp( bufferA, bufferB ) == 0; case SLMO_GREATER: - return strcmp( A, B ) > 0; + return strcmp( bufferA, bufferB ) > 0; case SLMO_NOTEQUAL: - return strcmp( A, B ) != 0; + return strcmp( bufferA, bufferB ) != 0; case SLMO_GREATEREQUAL: - return strcmp( A, B ) >= 0; + return strcmp( bufferA, bufferB ) >= 0; default: Con_DPrint( "_ServerList_CompareStr: Bad op!\n" ); return false; @@ -419,7 +428,7 @@ int NetConn_Write(lhnetsocket_t *mysocket, const void *data, int length, const l int NetConn_WriteString(lhnetsocket_t *mysocket, const char *string, const lhnetaddress_t *peeraddress) { // note this does not include the trailing NULL because we add that in the parser - return NetConn_Write(mysocket, string, strlen(string), peeraddress); + return NetConn_Write(mysocket, string, (int)strlen(string), peeraddress); } int NetConn_SendReliableMessage(netconn_t *conn, sizebuf_t *data) @@ -431,13 +440,22 @@ int NetConn_SendReliableMessage(netconn_t *conn, sizebuf_t *data) //#ifdef DEBUG if (data->cursize == 0) - Sys_Error("Datagram_SendMessage: zero length message\n"); + { + Con_Printf ("Datagram_SendMessage: zero length message\n"); + return -1; + } if (data->cursize > (int)sizeof(conn->sendMessage)) - Sys_Error("Datagram_SendMessage: message too big (%u > %u)\n", data->cursize, sizeof(conn->sendMessage)); + { + Con_Printf ("Datagram_SendMessage: message too big (%u > %u)\n", data->cursize, sizeof(conn->sendMessage)); + return -1; + } if (conn->canSend == false) - Sys_Error("SendMessage: called with canSend == false\n"); + { + Con_Printf ("SendMessage: called with canSend == false\n"); + return -1; + } //#endif memcpy(conn->sendMessage, data->data, data->cursize); @@ -562,10 +580,16 @@ int NetConn_SendUnreliableMessage(netconn_t *conn, sizebuf_t *data) //#ifdef DEBUG if (data->cursize == 0) - Sys_Error("Datagram_SendUnreliableMessage: zero length message\n"); + { + Con_Printf ("Datagram_SendUnreliableMessage: zero length message\n"); + return -1; + } if (packetLen > (int)sizeof(sendbuffer)) - Sys_Error("Datagram_SendUnreliableMessage: message too big %u\n", data->cursize); + { + Con_Printf ("Datagram_SendUnreliableMessage: message too big %u\n", data->cursize); + return -1; + } //#endif header = (void *)sendbuffer; @@ -637,23 +661,33 @@ void NetConn_OpenServerPort(const char *addressstring, int defaultport) { lhnetaddress_t address; lhnetsocket_t *s; + int port; char addressstring2[1024]; - if (LHNETADDRESS_FromString(&address, addressstring, defaultport)) + + for (port = defaultport; port <= defaultport + 100; port++) { - if ((s = LHNET_OpenSocket_Connectionless(&address))) + if (LHNETADDRESS_FromString(&address, addressstring, port)) { - sv_sockets[sv_numsockets++] = s; - LHNETADDRESS_ToString(LHNET_AddressFromSocket(s), addressstring2, sizeof(addressstring2), true); - Con_Printf("Server listening on address %s\n", addressstring2); + if ((s = LHNET_OpenSocket_Connectionless(&address))) + { + sv_sockets[sv_numsockets++] = s; + LHNETADDRESS_ToString(LHNET_AddressFromSocket(s), addressstring2, sizeof(addressstring2), true); + Con_Printf("Server listening on address %s\n", addressstring2); + break; + } + else + { + LHNETADDRESS_ToString(&address, addressstring2, sizeof(addressstring2), true); + Con_Printf("Server failed to open socket on address %s\n", addressstring2); + } } else { - LHNETADDRESS_ToString(&address, addressstring2, sizeof(addressstring2), true); - Con_Printf("Server failed to open socket on address %s\n", addressstring2); + Con_Printf("Server unable to parse address %s\n", addressstring); + // if it cant parse one address, it wont be able to parse another for sure + break; } } - else - Con_Printf("Server unable to parse address %s\n", addressstring); } void NetConn_OpenServerPorts(int opennetports) @@ -853,7 +887,7 @@ int NetConn_ReceivedMessage(netconn_t *conn, qbyte *data, int length) conn->lastMessageTime = realtime; conn->timeout = realtime + net_messagetimeout.value; conn->receiveSequence++; - if( conn->receiveMessageLength + length <= sizeof( conn->receiveMessage ) ) { + if( conn->receiveMessageLength + length <= (int)sizeof( conn->receiveMessage ) ) { memcpy(conn->receiveMessage + conn->receiveMessageLength, data, length); conn->receiveMessageLength += length; } else { @@ -1365,7 +1399,7 @@ static qboolean NetConn_BuildStatusResponse(const char* challenge, char* out_msg int left; ptr = out_msg + length; - left = out_size - length; + left = (int)out_size - length; for (i = 0;i < (unsigned int)svs.maxclients;i++) {