int UDP_Init (void) { struct hostent *local; char buff[MAXHOSTNAMELEN]; struct qsockaddr addr; char *colon; if (COM_CheckParm ("-noudp")) return -1; #if 1 // Android AndroidGetAddr(); #else // determine my name & address gethostname(buff, MAXHOSTNAMELEN); local = gethostbyname(buff); if(!local) { Con_Printf("Could not gethostbyname(\"%s\")\n", buff); return -1; } myAddr = *(int *)local->h_addr_list[0]; // if the quake hostname isn't set, set it to the machine name if (Q_strcmp(hostname.string, "UNNAMED") == 0) { buff[15] = 0; Cvar_Set ("hostname", buff); } #endif if ((net_controlsocket = UDP_OpenSocket (0)) == -1) Sys_Error("UDP_Init: Unable to open control socket\n"); sockaddr_in temp; memcpy(&temp, &broadcastaddr, sizeof(temp)); temp.sin_family = AF_INET; temp.sin_addr.s_addr = INADDR_BROADCAST; temp.sin_port = htons(net_hostport); memcpy(&broadcastaddr, &temp, sizeof(temp)); UDP_GetSocketAddr (net_controlsocket, &addr); Q_strcpy(my_tcpip_address, UDP_AddrToString (&addr)); colon = Q_strrchr (my_tcpip_address, ':'); if (colon) *colon = 0; Con_Printf("UDP Initialized\n"); tcpipAvailable = true; return net_controlsocket; }
int UDP_GetNameFromAddr (struct qsockaddr *addr, char *name) { struct hostent *hostentry; hostentry = gethostbyaddr ((char *)&((struct sockaddr_in *)addr)->sin_addr, sizeof(struct in_addr), AF_INET); if (hostentry) { Q_strncpy (name, (char *)hostentry->h_name, NET_NAMELEN - 1); return 0; } Q_strcpy (name, UDP_AddrToString (addr)); return 0; }
int UDP_Init ( void ) { struct hostent *local; char buff[MAXHOSTNAMELEN]; struct qsockaddr addr; char *colon; if (COM_CheckParm ("-noudp")) return -1; // determine my name & address gethostname(buff, MAXHOSTNAMELEN); if ((local = gethostbyname(buff)) == NULL) myAddr = INADDR_LOOPBACK; else myAddr = *(int *)local->h_addr_list[0]; // if the quake hostname isn't set, set it to the machine name if (Q_strcmp(hostname->string, "UNNAMED") == 0) { buff[15] = 0; Cvar_Set (hostname, buff); } if ((net_controlsocket = UDP_OpenSocket (0)) == -1) 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_port = htons(net_hostport); UDP_GetSocketAddr (net_controlsocket, &addr); Q_strcpy(my_tcpip_address, UDP_AddrToString (&addr)); colon = Q_strrchr (my_tcpip_address, ':'); if (colon) *colon = 0; Con_Printf("UDP Initialized\n"); tcpipAvailable = true; return net_controlsocket; }
int UDP_Init (void) { struct hostent *local; char* buff; struct qsockaddr addr; char *colon; if (COM_CheckParm ("-noudp")) return -1; // determine my name & address struct ifaddrs *allInterfaces; if (getifaddrs(&allInterfaces) == 0) { struct ifaddrs *interface; for (interface = allInterfaces; interface != NULL; interface = interface->ifa_next) { unsigned int flags = interface->ifa_flags; struct sockaddr *addr = interface->ifa_addr; if ((flags & (IFF_UP|IFF_RUNNING|IFF_LOOPBACK)) == (IFF_UP|IFF_RUNNING)) { if (addr->sa_family == AF_INET) { buff = malloc(MAXHOSTNAMELEN + 1); getnameinfo(addr, addr->sa_len, buff, MAXHOSTNAMELEN, NULL, 0, NI_NUMERICHOST); if (net_ipaddressescount >= net_ipaddressessize) { int newsize = net_ipaddressescount + 4; char** newipaddresses = malloc(newsize * sizeof(char*)); if (net_ipaddresses != NULL) { memcpy(newipaddresses, net_ipaddresses, net_ipaddressescount * sizeof(char*)); free(net_ipaddresses); } net_ipaddresses = newipaddresses; net_ipaddressessize = newsize; } net_ipaddresses[net_ipaddressescount] = buff; net_ipaddressescount++; } } } freeifaddrs(allInterfaces); if (net_ipaddressescount == 0) { return -1; } if (net_ipaddress == NULL) { buff = net_ipaddresses[net_ipaddressescount - 1]; local = gethostbyname(buff); if (local == NULL) { return -1; } myAddr = *(int *)local->h_addr_list[0]; } else { qboolean found = false; for (int i = 0; i < net_ipaddressescount; i++) { buff = net_ipaddresses[i]; if (strcmp(net_ipaddress, buff) == 0) { local = gethostbyname(buff); if (local == NULL) { return -1; } myAddr = *(int *)local->h_addr_list[0]; found = true; } } if (!found) { return -1; } } } else { return -1; } // if the quake hostname isn't set, set it to the machine name if (Q_strcmp(hostname.string, "UNNAMED") == 0) { buff[15] = 0; Cvar_Set ("hostname", buff); } if ((net_controlsocket = UDP_OpenSocket (0)) == -1) 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_port = htons(net_hostport); UDP_GetSocketAddr (net_controlsocket, &addr); Q_strcpy(my_tcpip_address, UDP_AddrToString (&addr)); colon = Q_strrchr (my_tcpip_address, ':'); if (colon) *colon = 0; Con_Printf("UDP Initialized\n"); tcpipAvailable = true; return net_controlsocket; }