Added library to do a TCP connection.
[cascardo/rnetproxy.git] / null.c
1 /*
2 ** Copyright (C) 2006 Thadeu Lima de Souza Cascardo <cascardo@minaslivre.org>
3 ** Copyright (C) 2009 Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
4 **  
5 ** This program is free software; you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation; either version 2 of the License, or
8 ** (at your option) any later version.
9 **  
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 ** GNU General Public License for more details.
14 **  
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program; if not, write to the Free Software
17 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18 **  
19 */
20
21 #include <gnet.h>
22 #include <glib.h>
23 #include "null.h"
24
25 static void null_connect (net_hook_t* hook)
26 {
27 }
28
29 static void null_close (net_hook_t* hook)
30 {
31   if (hook->peer)
32     {
33       hook->peer->peer = NULL;
34       gnet_conn_disconnect (hook->peer->conn);
35     }
36   gnet_conn_delete (hook->conn);
37   g_slice_free (net_hook_t, hook);
38 }
39
40 static void null_write (net_hook_t* hook)
41 {
42 }
43
44 static void null_read (net_hook_t* hook, gchar* buffer, size_t len)
45 {
46   gnet_conn_write (hook->peer->conn, buffer, len);
47 }
48
49 static void null_error (net_hook_t* hook)
50 {
51   g_message ("Error in POP3 client connection.");
52 }
53
54 static net_hook_t* null_server_hook_new (net_hook_t* client_hook, char *server)
55 {
56   net_hook_t* hook;
57   hook = g_slice_new (net_hook_t);
58   hook->conn = gnet_conn_new (server, 110, nethook_event, hook);
59   hook->peer = client_hook;
60   hook->server = TRUE;
61   hook->connect = null_connect;
62   hook->close = null_close;
63   hook->write = null_write;
64   hook->read = null_read;
65   hook->data = NULL;
66   gnet_conn_connect (hook->conn);
67   gnet_conn_read (hook->conn);
68   return hook;
69 }
70
71 net_hook_t* null_hook_new (GConn* conn, char *server)
72 {
73   net_hook_t* hook;
74   hook = g_slice_new (net_hook_t);
75   hook->conn = conn;
76   hook->peer = NULL;
77   hook->server = FALSE;
78   hook->connect = null_connect;
79   hook->close = null_close;
80   hook->write = null_write;
81   hook->read = null_read;
82   hook->data = server;
83   hook->peer = null_server_hook_new (hook, server);
84   gnet_conn_set_callback (hook->conn, nethook_event, hook);
85   return hook;
86 }
87
88 void null_destroy (net_hook_t* hook)
89 {
90   g_slice_free (net_hook_t, hook);
91 }