src/irc_net.c
changeset 25 56367df4ce5b
child 26 aec062af155d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/irc_net.c	Mon Mar 09 16:30:59 2009 +0200
@@ -0,0 +1,46 @@
+#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);
+}
+