static server * new_server (void) { server *serv; serv = malloc (sizeof (struct server)); memset (serv, 0, sizeof (struct server)); /* use server.c and proto-irc.c functions */ server_fill_her_up (serv); serv->sok = -1; strcpy (serv->nick, prefs.nick1); set_server_defaults (serv); serv_list = g_slist_prepend (serv_list, serv); fe_new_server (serv); return serv; }
void servlist_connect (session *sess, ircnet *net, gboolean join) { ircserver *ircserv; GSList *list; char *port; server *serv; if (!sess) sess = new_ircwindow (NULL, NULL, SESS_SERVER, TRUE); serv = sess->server; /* connect to the currently selected Server-row */ list = g_slist_nth (net->servlist, net->selected); if (!list) list = net->servlist; if (!list) return; ircserv = list->data; /* in case a protocol switch is added to the servlist gui */ server_fill_her_up (sess->server); if (join) { sess->willjoinchannel[0] = 0; if (net->favchanlist) { if (serv->favlist) { g_slist_free_full (serv->favlist, (GDestroyNotify) servlist_favchan_free); } serv->favlist = g_slist_copy_deep (net->favchanlist, (GCopyFunc) servlist_favchan_copy, NULL); } } if (net->logintype) { serv->loginmethod = net->logintype; } else { serv->loginmethod = LOGIN_DEFAULT_REAL; } serv->password[0] = 0; if (net->pass) { safe_strcpy (serv->password, net->pass, sizeof (serv->password)); } if (net->flags & FLAG_USE_GLOBAL) { strcpy (serv->nick, prefs.hex_irc_nick1); } else { if (net->nick) strcpy (serv->nick, net->nick); } serv->dont_use_proxy = (net->flags & FLAG_USE_PROXY) ? FALSE : TRUE; #ifdef USE_OPENSSL serv->use_ssl = (net->flags & FLAG_USE_SSL) ? TRUE : FALSE; serv->accept_invalid_cert = (net->flags & FLAG_ALLOW_INVALID) ? TRUE : FALSE; #endif serv->network = net; port = strrchr (ircserv->hostname, '/'); if (port) { *port = 0; /* support "+port" to indicate SSL (like mIRC does) */ if (port[1] == '+') { #ifdef USE_OPENSSL serv->use_ssl = TRUE; #endif serv->connect (serv, ircserv->hostname, atoi (port + 2), FALSE); } else { serv->connect (serv, ircserv->hostname, atoi (port + 1), FALSE); } *port = '/'; } else serv->connect (serv, ircserv->hostname, -1, FALSE); server_set_encoding (serv, net->encoding); }