modules/server/servsock.c File Reference

#include "server.h"

Go to the source code of this file.

Functions

static void disconnect_server ()
static int server_on_connect (void *client_data, int idx, const char *peer_ip, int peer_port)
static int server_on_eof (void *client_data, int idx, int err, const char *errmsg)
static int server_on_read (void *client_data, int idx, char *text, int len)
void connect_to_next_server ()
void kill_server (const char *reason)

Variables

static const char rcsid [] = "$Id: servsock.c,v 1.26 2007-09-13 22:20:58 sven Exp $"
int cycle_delay
static sockbuf_handler_t server_handler


Function Documentation

void connect_to_next_server (  ) 

Definition at line 44 of file servsock.c.

References _, current_server, egg_connect(), server::host, LOG_MISC, LOG_SERV, NULL, server::pass, server::port, putlog(), server_config, server_get_next, sockbuf_set_handler(), and str_redup().

00044                               {
00045   server_t *serv;
00046 
00047   serv = server_get_next();
00048   if (!serv) {
00049     putlog(LOG_MISC, "*", _("Error connecting to next server: no servers are defined!"));
00050     return;
00051   }
00052 
00053   str_redup(&current_server.server_host, serv->host);
00054   str_redup(&current_server.server_self, serv->host);
00055   str_redup(&current_server.pass, serv->pass);
00056   current_server.strcmp = strcasecmp;
00057   if (!server_config.fake005) server_config.fake005 = strdup(":fakeserver 005 fakenick MODES=3 MAXCHANNELS=10 MAXBANS=100 NICKLEN=9 TOPICLEN=307 KICKLEN=307 CHANTYPES=#& PREFIX=(ov)@+ NETWORK=fakenetwork CASEMAPPING=rfc1459 CHANMODES=b,k,l,imnprst :are available on this server");
00058 
00059   if (serv->port) current_server.port = serv->port;
00060   else current_server.port = server_config.default_port;
00061 
00062   putlog(LOG_SERV, "*", _("Connecting to %s (%d)."), current_server.server_host, current_server.port);
00063   current_server.idx = egg_connect(current_server.server_host, current_server.port, server_config.connect_timeout);
00064   if (current_server.idx < 0) {
00065     putlog(LOG_SERV, "*", _("Error connecting to server."));
00066   }
00067   sockbuf_set_handler(current_server.idx, &server_handler, NULL, NULL);
00068 }

static void disconnect_server (  )  [static]

Definition at line 78 of file servsock.c.

References channel_reset, current_server, cycle_delay, eggdrop_event(), server_config, and sockbuf_delete().

Referenced by kill_server(), and server_on_eof().

00079 {
00080   int connected = current_server.connected;
00081   int i, idx = current_server.idx;
00082 
00083   cycle_delay = server_config.cycle_delay;
00084 
00085   channel_reset();
00086   if (current_server.server_host) free(current_server.server_host);
00087   if (current_server.server_self) free(current_server.server_self);
00088   if (current_server.nick) free(current_server.nick);
00089   if (current_server.user) free(current_server.user);
00090   if (current_server.host) free(current_server.host);
00091   if (current_server.real_name) free(current_server.real_name);
00092   if (current_server.pass) free(current_server.pass);
00093   for (i = 0; i < current_server.nsupport; i++) {
00094     free(current_server.support[i].name);
00095     free(current_server.support[i].value);
00096   }
00097   if (current_server.support) free(current_server.support);
00098   memset(&current_server, 0, sizeof(current_server));
00099   current_server.idx = -1;
00100   current_server.time_to_ping = -1;
00101 
00102   if (idx != -1) sockbuf_delete(idx);
00103   if (connected) eggdrop_event("disconnect-server");
00104 }

void kill_server ( const char *  reason  ) 

Definition at line 71 of file servsock.c.

References current_server, disconnect_server(), printserv, and SERVER_NOQUEUE.

00072 {
00073   if (reason && (current_server.idx > -1)) printserv(SERVER_NOQUEUE, "QUIT :%s\r\n", reason);
00074   disconnect_server();
00075 }

static int server_on_connect ( void *  client_data,
int  idx,
const char *  peer_ip,
int  peer_port 
) [static]

Definition at line 120 of file servsock.c.

References _, current_server, dcc_dns_set, eggdrop_event(), linemode_on(), LOG_SERV, nick_list_on_connect, NULL, printserv, putlog(), server_config, SERVER_NOQUEUE, sockbuf_get_sock(), socket_get_name(), and try_next_nick.

00121 {
00122   /* If ip_lookup is 0, then we get our ip address from the socket we used
00123    * to connect to the server. If it's 1, it's handled in got001(). */
00124   if (server_config.ip_lookup == 0) {
00125     int sock;
00126     char *ip;
00127 
00128     sock = sockbuf_get_sock(idx);
00129     socket_get_name(sock, &ip, NULL);
00130     dcc_dns_set(ip);
00131     free(ip);
00132   }
00133 
00134   linemode_on(current_server.idx);
00135 
00136   current_server.connected = 1;
00137   current_server.time_to_ping = random() % 30 + 30;
00138   current_server.npings = 0;
00139 
00140   nick_list_on_connect();
00141   putlog(LOG_SERV, "*", _("Connected to %s, logging in."), current_server.server_host);
00142   eggdrop_event("connect-server");
00143   if (!current_server.connected) return(0);
00144 
00145   printserv(SERVER_NOQUEUE, "USER %s localhost %s :%s\r\n", server_config.user, current_server.server_host, server_config.realname);
00146   if (current_server.pass) printserv(SERVER_NOQUEUE, "PASS %s\r\n", current_server.pass);
00147   try_next_nick();
00148   return(0);
00149 }

static int server_on_eof ( void *  client_data,
int  idx,
int  err,
const char *  errmsg 
) [static]

Definition at line 112 of file servsock.c.

References current_server, disconnect_server(), LOG_SERV, and putlog().

00113 {
00114   putlog(LOG_SERV, "*", "Disconnected from %s", current_server.server_self);
00115   if (err && errmsg) putlog(LOG_SERV, "*", "Network error %d: %s", err, errmsg);
00116   disconnect_server();
00117   return(0);
00118 }

static int server_on_read ( void *  client_data,
int  idx,
char *  text,
int  len 
) [static]

Definition at line 151 of file servsock.c.

References server_parse_input.

00152 {
00153   if (!len) return(0);
00154   server_parse_input(text);
00155   return(0);
00156 }


Variable Documentation

Definition at line 34 of file server.c.

const char rcsid[] = "$Id: servsock.c,v 1.26 2007-09-13 22:20:58 sven Exp $" [static]

Definition at line 21 of file servsock.c.

Initial value:

Definition at line 34 of file servsock.c.


Generated on Sun Nov 30 18:43:36 2008 for eggdrop1.9 by  doxygen 1.5.6