void inbound_login_start (session *sess, char *nick, char *servname) { inbound_newnick (sess->server, sess->server->nick, nick, TRUE); server_set_name (sess->server, servname); if (sess->type == SESS_SERVER) log_open_or_close (sess); /* reset our away status */ if (sess->server->reconnect_away) { handle_command (sess->server->server_session, "away", FALSE); sess->server->reconnect_away = FALSE; } }
extern int server_process(void) { t_addrlist * laddrs; t_addr * curr_laddr; t_addr_data laddr_data; t_laddr_info * laddr_info; #ifdef HAVE_POLL struct pollfd * fds = NULL; int num_fd; #else struct timeval tv; t_psock_fd_set rfds, wfds; int highest_fd; #endif time_t curr_exittime, prev_exittime, prev_savetime, track_time, now; unsigned int syncdelta; t_connection * c; t_elem const * acurr; t_elem const * ccurr; int csocket; #ifdef DO_POSIXSIG sigset_t block_set; sigset_t save_set; #endif unsigned int count; if (psock_init()<0) { eventlog(eventlog_level_error,"server_process","could not initialize socket functions"); return -1; } server_set_name(); /* Start with the Battle.net address list */ if (!(laddrs = addrlist_create(prefs_get_bnetdserv_addrs(),INADDR_ANY,BNETD_SERV_PORT))) { eventlog(eventlog_level_error,"server_process","could not create %s server address list from \"%s\"",laddr_type_get_str(laddr_type_bnet),prefs_get_bnetdserv_addrs()); if (psock_deinit()<0) eventlog(eventlog_level_error,"server_process","could not deinitialize socket functions"); return -1; } /* Mark all these laddrs for being classic Battle.net service */ LIST_TRAVERSE_CONST(laddrs,acurr) { curr_laddr = elem_get_data(acurr); if (addr_get_data(curr_laddr).p) continue; if (!(laddr_info = malloc(sizeof(t_laddr_info)))) { eventlog(eventlog_level_error,"server_process","could not create %s address info (malloc: %s)",laddr_type_get_str(laddr_type_bnet),strerror(psock_errno())); goto error_addr_list; } laddr_info->usocket = -1; laddr_info->ssocket = -1; laddr_info->type = laddr_type_bnet; laddr_data.p = laddr_info; if (addr_set_data(curr_laddr,laddr_data)<0) { eventlog(eventlog_level_error,"server_process","could not set address data"); if (laddr_info->usocket!=-1) { psock_close(laddr_info->usocket); laddr_info->usocket = -1; } if (laddr_info->ssocket!=-1) { psock_close(laddr_info->ssocket); laddr_info->ssocket = -1; } goto error_poll; } }