/[weechat]/weechat/src/irc/irc-server.c
ViewVC logotype

Diff of /weechat/src/irc/irc-server.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.62 by kolter, Thu Jun 30 19:22:01 2005 UTC revision 1.63 by flashcode, Thu Jun 30 20:16:07 2005 UTC
# Line 1006  pass_httpproxy(t_irc_server *server) Line 1006  pass_httpproxy(t_irc_server *server)
1006   */   */
1007    
1008  int  int
1009  resolve(char *hostname, char *ip, int *version)  resolve (char *hostname, char *ip, int *version)
1010  {  {
1011        char ipbuffer[NI_MAXHOST];
1012        struct addrinfo *res;
1013        
1014        if (version != NULL)
1015            *version = 0;
1016        
1017        if (getaddrinfo(hostname, NULL, NULL, &res) != 0)
1018            return 1;
1019        
1020        if (!res)
1021            return 1;
1022        
1023        if (getnameinfo(res->ai_addr, res->ai_addrlen, ipbuffer, sizeof(ipbuffer), NULL, 0, NI_NUMERICHOST) != 0)
1024        {
1025            freeaddrinfo (res);
1026            return 1;
1027        }
1028        
1029        if ((res->ai_family == AF_INET) && (version != NULL))
1030            *version = 4;
1031        if ((res->ai_family == AF_INET6) && (version != NULL))
1032            *version = 6;
1033        
1034        strcpy(ip, ipbuffer);
1035    
1036    char ipbuffer[NI_MAXHOST];      freeaddrinfo (res);
1037    struct addrinfo *res;      
1038        return 0;
   if (version != NULL)  
     *version = 0;  
   
   if (getaddrinfo(hostname, NULL, NULL, &res) != 0)  
     return 1;  
   
   if (!res)  
     return 1;  
   
   if (getnameinfo(res->ai_addr, res->ai_addrlen, ipbuffer, sizeof(ipbuffer), NULL, 0, NI_NUMERICHOST) != 0)  
     return 1;  
   
   if ((res->ai_family == AF_INET) && (version != NULL))  
     *version = 4;  
   if ((res->ai_family == AF_INET6) && (version != NULL))  
     *version = 6;  
   
   strcpy(ip, ipbuffer);  
   
   return 0;  
1039  }  }
1040    
1041  /*  /*
# Line 1249  server_child (t_irc_server *server) Line 1253  server_child (t_irc_server *server)
1253      struct addrinfo hints, *res;      struct addrinfo hints, *res;
1254            
1255      if (cfg_proxy_use)      if (cfg_proxy_use)
1256        {      {
1257          memset (&hints, 0, sizeof(hints));          memset (&hints, 0, sizeof(hints));
1258          hints.ai_family = (cfg_proxy_ipv6) ? AF_INET6 : AF_INET;          hints.ai_family = (cfg_proxy_ipv6) ? AF_INET6 : AF_INET;
1259          hints.ai_socktype = SOCK_STREAM;          hints.ai_socktype = SOCK_STREAM;
1260          if (getaddrinfo (cfg_proxy_address, NULL, &hints, &res) !=0)          if (getaddrinfo (cfg_proxy_address, NULL, &hints, &res) !=0)
1261            {          {
1262              write(server->child_write, "1", 1);              write(server->child_write, "1", 1);
1263              return 0;              return 0;
1264            }          }
1265          if ((cfg_proxy_ipv6 && (res->ai_family != AF_INET6))          if ((cfg_proxy_ipv6 && (res->ai_family != AF_INET6))
1266              || ((!cfg_proxy_ipv6 && (res->ai_family != AF_INET))))              || ((!cfg_proxy_ipv6 && (res->ai_family != AF_INET))))
1267            {          {
1268              write(server->child_write, "2", 1);              write(server->child_write, "2", 1);
1269                freeaddrinfo (res);
1270              return 0;              return 0;
1271            }          }
1272                
1273          if (cfg_proxy_ipv6)          if (cfg_proxy_ipv6)
1274            ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (cfg_proxy_port);              ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (cfg_proxy_port);
1275          else          else
1276            ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (cfg_proxy_port);              ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (cfg_proxy_port);
1277                    
1278          if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)          if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)
1279            {          {
1280              write(server->child_write, "3", 1);              write(server->child_write, "3", 1);
1281                freeaddrinfo (res);
1282              return 0;              return 0;
1283            }          }
1284                    
1285          if (pass_proxy(server))          if (pass_proxy(server))
1286            {          {
1287              write(server->child_write, "4", 1);              write(server->child_write, "4", 1);
1288                freeaddrinfo (res);
1289              return 0;              return 0;
1290            }          }
1291        }      }
1292      else      else
1293        {      {
1294          memset (&hints, 0, sizeof(hints));          memset (&hints, 0, sizeof(hints));
1295          hints.ai_family = (server->ipv6) ? AF_INET6 : AF_INET;          hints.ai_family = (server->ipv6) ? AF_INET6 : AF_INET;
1296          hints.ai_socktype = SOCK_STREAM;          hints.ai_socktype = SOCK_STREAM;
1297          if (getaddrinfo (server->address, NULL, &hints, &res) !=0)          if (getaddrinfo (server->address, NULL, &hints, &res) !=0)
1298            {          {
1299              write(server->child_write, "1", 1);              write(server->child_write, "1", 1);
1300              return 0;              return 0;
1301            }          }
1302          if ((server->ipv6 && (res->ai_family != AF_INET6))          if ((server->ipv6 && (res->ai_family != AF_INET6))
1303              || ((!server->ipv6 && (res->ai_family != AF_INET))))              || ((!server->ipv6 && (res->ai_family != AF_INET))))
1304            {          {
1305              write(server->child_write, "2", 1);              write(server->child_write, "2", 1);
1306                freeaddrinfo (res);
1307              return 0;              return 0;
1308            }          }
1309                
1310          if (server->ipv6)          if (server->ipv6)
1311            ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (server->port);              ((struct sockaddr_in6 *)(res->ai_addr))->sin6_port = htons (server->port);
1312          else          else
1313            ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (server->port);              ((struct sockaddr_in *)(res->ai_addr))->sin_port = htons (server->port);
1314                    
1315          if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)          if (connect (server->sock, res->ai_addr, res->ai_addrlen) != 0)
1316            {          {
1317              write(server->child_write, "3", 1);              write(server->child_write, "3", 1);
1318                freeaddrinfo (res);
1319              return 0;              return 0;
1320            }          }
1321        }      }
1322        
1323      write (server->child_write, "0", 1);      write (server->child_write, "0", 1);
1324        freeaddrinfo (res);
1325      return 0;      return 0;
1326  }  }
1327    

Legend:
Removed from v.1.62  
changed lines
  Added in v.1.63

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26