X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fdarkplaces.git;a=blobdiff_plain;f=net_udp.c;h=480901f4ff54ed0285d3a35f2553e347678d7f77;hp=ed5d066e0978e803b9fdba7c8087b3a40fe4d317;hb=e2336071d442777e796e85580a96e1a6c05ac306;hpb=e411cc7d14dad08cbbe27f5b3af86700f7eb5184 diff --git a/net_udp.c b/net_udp.c index ed5d066e..480901f4 100644 --- a/net_udp.c +++ b/net_udp.c @@ -64,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) { @@ -77,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); @@ -167,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; @@ -176,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); @@ -190,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; } //============================================================================= @@ -244,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; @@ -271,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; @@ -292,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; @@ -304,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; @@ -316,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; @@ -349,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; @@ -366,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; @@ -386,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; @@ -414,4 +432,3 @@ int UDP_SetSocketPort (struct qsockaddr *addr, int port) return 0; } -//=============================================================================