src/irc_net.c
author Tero Marttila <terom@fixme.fi>
Mon, 09 Mar 2009 16:30:59 +0200
changeset 25 56367df4ce5b
child 26 aec062af155d
permissions -rw-r--r--
add irc_net module, and fix Makefile CFLAGS, add -Wextra
#include "irc_net.h"
#include "log.h"

#include <stdlib.h>

err_t irc_net_create (struct irc_net **net_ptr, const struct irc_net_info *info, struct error_info *err)
{
    struct irc_net *net;
    struct sock_stream *sock;
    
    // allocate
    if ((net = calloc(1, sizeof(*net))) == NULL)
        return SET_ERROR(err, ERR_CALLOC);

    // XXX: over-simplified blocking connect
    if (info->use_ssl) {
        log_info("connecting to [%s]:%s using SSL", info->hostname, info->service);

        if (sock_ssl_connect(&sock, info->hostname, info->service, err))
            goto error;

    } else {
        log_info("connecting to [%s]:%s", info->hostname, info->service);

        if (sock_tcp_connect(&sock, info->hostname, info->service, err))
            goto error;

    }

    log_info("connected, registering");

    // create the irc connection state
    if (irc_conn_create(&net->conn, sock, &info->register_info, err))
        goto error;
    
    // ok
    *net_ptr = net;

    return SUCCESS;

error:
    // XXX: cleanup

    return ERROR_CODE(err);
}