Example #1
0
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;
}
Example #2
0
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);
}