]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - net_udp.c
varray_* rewritten to remove padding (varray_vertex3f, varray_texcoord2f, varray_texc...
[xonotic/darkplaces.git] / net_udp.c
index f21c3ebd73b6f8f530e9f6b6400cd19c7710d4c3..480901f4ff54ed0285d3a35f2553e347678d7f77 100644 (file)
--- a/net_udp.c
+++ b/net_udp.c
@@ -40,8 +40,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 extern int gethostname (char *, int);
 extern int close (int);
 
-extern cvar_t hostname;
-
 static int net_acceptsocket = -1;              // socket for fielding new connections
 static int net_controlsocket;
 static int net_broadcastsocket = 0;
@@ -66,8 +64,12 @@ int UDP_Init (void)
        // determine my name & address
        gethostname(buff, MAXHOSTNAMELEN);
        local = gethostbyname(buff);
-       myAddr = *(int *)local->h_addr_list[0];
+       if (!local)
+               myAddr = htonl(INADDR_LOOPBACK);  // default to the loopback address
+       else
+               myAddr = *(int *)local->h_addr_list[0];
 
+       // LordHavoc FIXME: get rid of this someday, just leave machines unnamed
        // if the quake hostname isn't set, set it to the machine name
        if (strcmp(hostname.string, "UNNAMED") == 0)
        {
@@ -79,7 +81,7 @@ int UDP_Init (void)
                Sys_Error("UDP_Init: Unable to open control socket\n");
 
        ((struct sockaddr_in *)&broadcastaddr)->sin_family = AF_INET;
-       ((struct sockaddr_in *)&broadcastaddr)->sin_addr.s_addr = INADDR_BROADCAST;
+       ((struct sockaddr_in *)&broadcastaddr)->sin_addr.s_addr = htonl(INADDR_BROADCAST);
        ((struct sockaddr_in *)&broadcastaddr)->sin_port = htons(net_hostport);
 
        UDP_GetSocketAddr (net_controlsocket, &addr);
@@ -169,8 +171,10 @@ this lets you type only as much of the net address as required, using
 the local network components to fill in the rest
 ============
 */
-static int PartialIPAddress (char *in, struct qsockaddr *hostaddr)
+// LordHavoc FIXME: this whole function is stupid
+static int PartialIPAddress (const char *in, struct qsockaddr *hostaddr)
 {
+       // LordHavoc FIXME: buff is stupid, it just ensures the address begins with a . for the parser
        char buff[256];
        char *b;
        int addr;
@@ -178,7 +182,7 @@ static int PartialIPAddress (char *in, struct qsockaddr *hostaddr)
        int mask;
        int run;
        int port;
-       
+
        buff[0] = '.';
        b = buff;
        strcpy(buff+1, in);
@@ -192,29 +196,27 @@ static int PartialIPAddress (char *in, struct qsockaddr *hostaddr)
                b++;
                num = 0;
                run = 0;
-               while (!( *b < '0' || *b > '9'))
+               while (*b >= '0' && *b <= '9')
                {
-                 num = num*10 + *b++ - '0';
-                 if (++run > 3)
-                       return -1;
+                       num = num*10 + *b++ - '0';
+                       if (num > 255)
+                               return -1;
                }
-               if ((*b < '0' || *b > '9') && *b != '.' && *b != ':' && *b != 0)
-                       return -1;
-               if (num < 0 || num > 255)
+               if (*b != '.' && *b != ':' && *b != 0)
                        return -1;
                mask<<=8;
                addr = (addr<<8) + num;
        }
-       
+
        if (*b++ == ':')
                port = atoi(b);
        else
                port = net_hostport;
 
        hostaddr->sa_family = AF_INET;
-       ((struct sockaddr_in *)hostaddr)->sin_port = htons((short)port);        
+       ((struct sockaddr_in *)hostaddr)->sin_port = htons((short)port);
        ((struct sockaddr_in *)hostaddr)->sin_addr.s_addr = (myAddr & htonl(mask)) | htonl(addr);
-       
+
        return 0;
 }
 //=============================================================================
@@ -246,7 +248,21 @@ int UDP_CheckNewConnections (void)
 
 //=============================================================================
 
-int UDP_Read (int socket, byte *buf, int len, struct qsockaddr *addr)
+int UDP_Recv (qbyte *buf, int len, struct qsockaddr *addr)
+{
+       return UDP_Read (net_acceptsocket, buf, len, addr);
+}
+
+//=============================================================================
+
+int UDP_Send (qbyte *buf, int len, struct qsockaddr *addr)
+{
+       return UDP_Write (net_acceptsocket, buf, len, addr);
+}
+
+//=============================================================================
+
+int UDP_Read (int socket, qbyte *buf, int len, struct qsockaddr *addr)
 {
        int addrlen = sizeof (struct qsockaddr);
        int ret;
@@ -273,7 +289,7 @@ int UDP_MakeSocketBroadcastCapable (int socket)
 
 //=============================================================================
 
-int UDP_Broadcast (int socket, byte *buf, int len)
+int UDP_Broadcast (int socket, qbyte *buf, int len)
 {
        int ret;
 
@@ -294,7 +310,7 @@ int UDP_Broadcast (int socket, byte *buf, int len)
 
 //=============================================================================
 
-int UDP_Write (int socket, byte *buf, int len, struct qsockaddr *addr)
+int UDP_Write (int socket, qbyte *buf, int len, struct qsockaddr *addr)
 {
        int ret;
 
@@ -306,7 +322,7 @@ int UDP_Write (int socket, byte *buf, int len, struct qsockaddr *addr)
 
 //=============================================================================
 
-char *UDP_AddrToString (struct qsockaddr *addr)
+char *UDP_AddrToString (const struct qsockaddr *addr)
 {
        static char buffer[22];
        int haddr;
@@ -318,7 +334,7 @@ char *UDP_AddrToString (struct qsockaddr *addr)
 
 //=============================================================================
 
-int UDP_StringToAddr (char *string, struct qsockaddr *addr)
+int UDP_StringToAddr (const char *string, struct qsockaddr *addr)
 {
        int ha1, ha2, ha3, ha4, hp;
        int ipaddr;
@@ -351,7 +367,7 @@ int UDP_GetSocketAddr (int socket, struct qsockaddr *addr)
 
 //=============================================================================
 
-int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name)
+int UDP_GetNameFromAddr (const struct qsockaddr *addr, char *name)
 {
        struct hostent *hostentry;
 
@@ -368,19 +384,19 @@ int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name)
 
 //=============================================================================
 
-int UDP_GetAddrFromName(char *name, struct qsockaddr *addr)
+int UDP_GetAddrFromName(const char *name, struct qsockaddr *addr)
 {
        struct hostent *hostentry;
 
        if (name[0] >= '0' && name[0] <= '9')
                return PartialIPAddress (name, addr);
-       
+
        hostentry = gethostbyname (name);
        if (!hostentry)
                return -1;
 
        addr->sa_family = AF_INET;
-       ((struct sockaddr_in *)addr)->sin_port = htons(net_hostport);   
+       ((struct sockaddr_in *)addr)->sin_port = htons(net_hostport);
        ((struct sockaddr_in *)addr)->sin_addr.s_addr = *(int *)hostentry->h_addr_list[0];
 
        return 0;
@@ -388,7 +404,7 @@ int UDP_GetAddrFromName(char *name, struct qsockaddr *addr)
 
 //=============================================================================
 
-int UDP_AddrCompare (struct qsockaddr *addr1, struct qsockaddr *addr2)
+int UDP_AddrCompare (const struct qsockaddr *addr1, const struct qsockaddr *addr2)
 {
        if (addr1->sa_family != addr2->sa_family)
                return -1;
@@ -416,4 +432,3 @@ int UDP_SetSocketPort (struct qsockaddr *addr, int port)
        return 0;
 }
 
-//=============================================================================