#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);
}