#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 |
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(¤t_server.server_host, serv->host); 00054 str_redup(¤t_server.server_self, serv->host); 00055 str_redup(¤t_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(¤t_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 }
int cycle_delay |
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.
sockbuf_handler_t server_handler [static] |
Initial value:
{ "server", server_on_connect, server_on_eof, NULL, server_on_read, NULL }
Definition at line 34 of file servsock.c.