--- /dev/null
+/*
+** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
+** Copyright (C) 2009 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+**
+*/
+
+#include <gnet.h>
+#include <glib.h>
+#include "null.h"
+
+static void null_connect (net_hook_t* hook)
+{
+}
+
+static void null_close (net_hook_t* hook)
+{
+ if (hook->peer)
+ {
+ hook->peer->peer = NULL;
+ gnet_conn_disconnect (hook->peer->conn);
+ }
+ gnet_conn_delete (hook->conn);
+ g_slice_free (net_hook_t, hook);
+}
+
+static void null_write (net_hook_t* hook)
+{
+}
+
+static void null_read (net_hook_t* hook, gchar* buffer, size_t len)
+{
+ gnet_conn_write (hook->peer->conn, buffer, len);
+}
+
+static void null_error (net_hook_t* hook)
+{
+ g_message ("Error in POP3 client connection.");
+}
+
+static net_hook_t* null_server_hook_new (net_hook_t* client_hook, char *server)
+{
+ net_hook_t* hook;
+ hook = g_slice_new (net_hook_t);
+ hook->conn = gnet_conn_new (server, 110, nethook_event, hook);
+ hook->peer = client_hook;
+ hook->server = TRUE;
+ hook->connect = null_connect;
+ hook->close = null_close;
+ hook->write = null_write;
+ hook->read = null_read;
+ hook->data = NULL;
+ gnet_conn_connect (hook->conn);
+ gnet_conn_read (hook->conn);
+ return hook;
+}
+
+net_hook_t* null_hook_new (GConn* conn, char *server)
+{
+ net_hook_t* hook;
+ hook = g_slice_new (net_hook_t);
+ hook->conn = conn;
+ hook->peer = NULL;
+ hook->server = FALSE;
+ hook->connect = null_connect;
+ hook->close = null_close;
+ hook->write = null_write;
+ hook->read = null_read;
+ hook->data = server;
+ hook->peer = null_server_hook_new (hook, server);
+ gnet_conn_set_callback (hook->conn, nethook_event, hook);
+ return hook;
+}
+
+void null_destroy (net_hook_t* hook)
+{
+ g_slice_free (net_hook_t, hook);
+}
--- /dev/null
+/*
+** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
+**
+** This program is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2 of the License, or
+** (at your option) any later version.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with this program; if not, write to the Free Software
+** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+**
+*/
+
+#ifndef NULL_H
+#define NULL_H
+
+#include <gnet.h>
+#include "nethook.h"
+
+net_hook_t* null_hook_new (GConn*, char*);
+void null_destroy (net_hook_t*);
+
+#endif
#include <unistd.h>
#include "log.h"
#include "nethook.h"
-#include "proto_detect.h"
+#include "null.h"
#define CONFFILE SYSCONFDIR "/popproxy.conf"
return;
}
g_message ("Received connection from %s.", conn->hostname);
- hook = proto_detect_new (conn);
+ hook = null_hook_new (conn, data);
gnet_conn_read (conn);
}
GInetAddr* inetaddr;
gchar* conf_address;
gint port;
+ gchar *server_address;
gnet_init ();
pop_log_init ();
conf_address = g_key_file_get_string (keyfile, "global", "address", NULL);
port = g_key_file_get_integer (keyfile, "global", "port", NULL);
+ server_address = g_key_file_get_string (keyfile, "global", "server", NULL);
g_message ("Listen address is %s:%d.", conf_address, port);
inetaddr = gnet_inetaddr_new_nonblock (conf_address, port);
- gnet_server_new (inetaddr, port, new_client, NULL);
+ gnet_server_new (inetaddr, port, new_client, server_address);
daemon (0, 0);