comparison src/network.c @ 13345:d7b6e358493d

[gaim-migrate @ 15715] Change spaces to tabs, and 0 is a valid file descriptor, although I think it is almost always set to one of stdout, stderr or stdin. In Linux, anyway. committer: Tailor Script <tailor@pidgin.im>
author Mark Doliner <mark@kingant.net>
date Tue, 28 Feb 2006 05:50:42 +0000
parents be0cd152691d
children 95cc25e78ef6
comparison
equal deleted inserted replaced
13344:1c2f284986b7 13345:d7b6e358493d
90 } 90 }
91 91
92 const char * 92 const char *
93 gaim_network_get_local_system_ip(int fd) 93 gaim_network_get_local_system_ip(int fd)
94 { 94 {
95 char buffer[1024]; 95 char buffer[1024];
96 static char ip[16]; 96 static char ip[16];
97 char *tmp; 97 char *tmp;
98 struct ifconf ifc; 98 struct ifconf ifc;
99 struct ifreq *ifr; 99 struct ifreq *ifr;
100 struct sockaddr_in *sinptr; 100 struct sockaddr_in *sinptr;
101 guint32 lhost = htonl(127*256*256*256+1); 101 guint32 lhost = htonl(127 * 256 * 256 * 256 + 1);
102 long unsigned int add; 102 long unsigned int add;
103 int source = fd; 103 int source = fd;
104 104
105 if(source <= 0) 105 if (fd < 0)
106 source = socket(PF_INET,SOCK_STREAM,0); 106 source = socket(PF_INET,SOCK_STREAM, 0);
107 107
108 ifc.ifc_len = sizeof(buffer); 108 ifc.ifc_len = sizeof(buffer);
109 ifc.ifc_req = (struct ifreq*) buffer; 109 ifc.ifc_req = (struct ifreq *)buffer;
110 ioctl(source, SIOCGIFCONF, &ifc); 110 ioctl(source, SIOCGIFCONF, &ifc);
111 111
112 if(fd <= 0) 112 if (fd < 0)
113 close(source); 113 close(source);
114 114
115 tmp = buffer; 115 tmp = buffer;
116 while(tmp < buffer + ifc.ifc_len) { 116 while (tmp < buffer + ifc.ifc_len)
117 ifr = (struct ifreq *) tmp; 117 {
118 tmp += sizeof(struct ifreq); 118 ifr = (struct ifreq *)tmp;
119 119 tmp += sizeof(struct ifreq);
120 if(ifr->ifr_addr.sa_family == AF_INET) { 120
121 sinptr = (struct sockaddr_in *) &ifr->ifr_addr; 121 if (ifr->ifr_addr.sa_family == AF_INET)
122 if(sinptr->sin_addr.s_addr != lhost) { 122 {
123 add = ntohl(sinptr->sin_addr.s_addr); 123 sinptr = (struct sockaddr_in *)&ifr->ifr_addr;
124 g_snprintf(ip, 16, "%lu.%lu.%lu.%lu", 124 if (sinptr->sin_addr.s_addr != lhost)
125 ((add >> 24) & 255), 125 {
126 ((add >> 16) & 255), 126 add = ntohl(sinptr->sin_addr.s_addr);
127 ((add >> 8) & 255), 127 g_snprintf(ip, 16, "%lu.%lu.%lu.%lu",
128 add & 255); 128 ((add >> 24) & 255),
129 129 ((add >> 16) & 255),
130 return ip; 130 ((add >> 8) & 255),
131 } 131 add & 255);
132 } 132
133 } 133 return ip;
134 return "0.0.0.0"; 134 }
135 }
136 }
137
138 return "0.0.0.0";
135 } 139 }
136 140
137 const char * 141 const char *
138 gaim_network_get_my_ip(int fd) 142 gaim_network_get_my_ip(int fd)
139 { 143 {