remove ip-string from Conf_Server struct

struct Conf_Server stored the ip address to connect to
in dotted-decimal notation; but we only need this for connect()
so long-time storage isn't necessary.
This commit is contained in:
Florian Westphal 2007-11-23 16:28:37 +00:00
parent 37563537a9
commit 47a0379e2b
2 changed files with 18 additions and 29 deletions
src/ngircd

View File

@ -8,7 +8,7 @@
* (at your option) any later version.
* Please read the file COPYING, README and AUTHORS for more information.
*
* $Id: conf.h,v 1.46 2007/11/23 16:26:04 fw Exp $
* $Id: conf.h,v 1.47 2007/11/23 16:28:37 fw Exp $
*
* Configuration management (header)
*/
@ -33,7 +33,6 @@ typedef struct _Conf_Oper
typedef struct _Conf_Server
{
char host[HOST_LEN]; /* Hostname */
char ip[16]; /* IP address (Resolver) */
char name[CLIENT_ID_LEN]; /* IRC-Client-ID */
char pwd_in[CLIENT_PASS_LEN]; /* Password which must be received */
char pwd_out[CLIENT_PASS_LEN]; /* Password to send to peer */

View File

@ -17,7 +17,7 @@
#include "portab.h"
#include "io.h"
static char UNUSED id[] = "$Id: conn.c,v 1.215 2007/11/23 16:26:04 fw Exp $";
static char UNUSED id[] = "$Id: conn.c,v 1.216 2007/11/23 16:28:37 fw Exp $";
#include "imp.h"
#include <assert.h>
@ -92,7 +92,7 @@ static void Check_Connections PARAMS(( void ));
static void Check_Servers PARAMS(( void ));
static void Init_Conn_Struct PARAMS(( CONN_ID Idx ));
static bool Init_Socket PARAMS(( int Sock ));
static void New_Server PARAMS(( int Server ));
static void New_Server PARAMS(( int Server, struct in_addr *dest));
static void Simple_Message PARAMS(( int Sock, const char *Msg ));
static int Count_Connections PARAMS(( struct sockaddr_in addr ));
static int NewListener PARAMS(( const UINT16 Port ));
@ -1373,39 +1373,21 @@ Check_Servers( void )
static void
New_Server( int Server )
New_Server( int Server , struct in_addr *dest)
{
/* Establish new server link */
struct sockaddr_in local_addr;
struct sockaddr_in new_addr;
struct in_addr inaddr;
int res, new_sock;
CLIENT *c;
assert( Server > NONE );
Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ", Conf_Server[Server].host,
Conf_Server[Server].ip, Conf_Server[Server].port );
#ifdef HAVE_INET_ATON
if( inet_aton( Conf_Server[Server].ip, &inaddr ) == 0 )
#else
memset( &inaddr, 0, sizeof( inaddr ));
inaddr.s_addr = inet_addr( Conf_Server[Server].ip );
if( inaddr.s_addr == (unsigned)-1 )
#endif
{
Log( LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!",
Conf_Server[Server].host, Conf_Server[Server].ip );
return;
}
memset(&new_addr, 0, sizeof( new_addr ));
new_addr.sin_family = AF_INET;
new_addr.sin_addr = inaddr;
new_addr.sin_addr = *dest;
new_addr.sin_port = htons( Conf_Server[Server].port );
new_sock = socket( PF_INET, SOCK_STREAM, 0 );
if ( new_sock < 0 ) {
Log( LOG_CRIT, "Can't create socket: %s!", strerror( errno ));
@ -1534,6 +1516,7 @@ cb_Connect_to_Server(int fd, UNUSED short events)
/* Read result of resolver sub-process from pipe and start connection */
int i;
size_t len;
struct in_addr dest_addr;
char readbuf[HOST_LEN + 1];
LogDebug("Resolver: Got forward lookup callback on fd %d, events %d", fd, events);
@ -1551,16 +1534,23 @@ cb_Connect_to_Server(int fd, UNUSED short events)
}
/* Read result from pipe */
len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof readbuf -1);
len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof(readbuf)-1);
if (len == 0)
return;
readbuf[len] = '\0';
LogDebug("Got result from resolver: \"%s\" (%u bytes read).", readbuf, len);
strlcpy( Conf_Server[i].ip, readbuf, sizeof( Conf_Server[i].ip ));
if (!ngt_IPStrToBin(readbuf, &dest_addr)) {
Log(LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!",
Conf_Server[i].host, readbuf);
return;
}
Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ",
Conf_Server[i].host, readbuf, Conf_Server[i].port );
/* connect() */
New_Server(i);
New_Server(i, &dest_addr);
} /* cb_Read_Forward_Lookup */