From: Thadeu Lima de Souza Cascardo Date: Wed, 1 Jul 2009 19:19:03 +0000 (-0300) Subject: Make server port configurable X-Git-Tag: v0.1.3~78 X-Git-Url: http://git.cascardo.info/?p=cascardo%2Frnetproxy.git;a=commitdiff_plain;h=dff33f5dcf96800863b162a320bcf5dc0bb15b92 Make server port configurable --- diff --git a/popproxy.c b/popproxy.c index 23b17ba..6aaf804 100644 --- a/popproxy.c +++ b/popproxy.c @@ -32,16 +32,23 @@ #define CONFFILE SYSCONFDIR "/popproxy.conf" +struct pop_address +{ + char *server; + int port; +}; + void new_client (GServer* server, GConn* conn, gpointer data) { net_hook_t* hook; + struct pop_address *address = data; if (conn == NULL) { g_critical ("Server has received an error event."); return; } g_message ("Received connection from %s.", conn->hostname); - hook = ssl_hook_new (conn, data); + hook = ssl_hook_new (conn, address->server, address->port); pop_hook_new (hook); gnet_conn_read (conn); } @@ -65,6 +72,8 @@ int main (int argc, char** argv) gchar* conf_address; gint port; gchar *server_address; + gint server_port; + struct pop_address pop_address; gnutls_global_init (); gnet_init (); @@ -116,9 +125,20 @@ int main (int argc, char** argv) g_error_free (error); } + server_port = g_key_file_get_integer (keyfile, "global", "server_port", + &error); + if (server_port == 0 && error != NULL) + { + port = 995; + g_error_free (error); + } + + pop_address.server = server_address; + pop_address.port = server_port; + inetaddr = gnet_inetaddr_new_nonblock (conf_address, port); if (gnet_server_new (inetaddr, port, - new_client, server_address) == NULL) + new_client, &pop_address) == NULL) { fprintf (stderr, "Could not create server.\n"); exit (1); diff --git a/ssl.c b/ssl.c index 3bdf1e2..c1bfc88 100644 --- a/ssl.c +++ b/ssl.c @@ -60,7 +60,7 @@ ssl_error (net_hook_t *hook) } net_hook_t * -ssl_hook_new (GConn *conn, char *server) +ssl_hook_new (GConn *conn, char *server, int port) { net_hook_t *hook; hook = g_slice_new (net_hook_t); @@ -72,7 +72,7 @@ ssl_hook_new (GConn *conn, char *server) hook->write = ssl_write; hook->read = ssl_read; hook->data = NULL; - hook->peer = ssl_server_hook_new (hook, server); + hook->peer = ssl_server_hook_new (hook, server, port); gnet_conn_set_callback (hook->conn, nethook_event, hook); return hook; } diff --git a/ssl.h b/ssl.h index 61cc68f..56e577f 100644 --- a/ssl.h +++ b/ssl.h @@ -32,9 +32,9 @@ struct ssl_data gboolean handshaking; }; -net_hook_t* ssl_hook_new (GConn*, char*); +net_hook_t* ssl_hook_new (GConn*, char*, int); void ssl_destroy (net_hook_t*); -net_hook_t * ssl_server_hook_new (net_hook_t *, char *); +net_hook_t * ssl_server_hook_new (net_hook_t *, char *, int); #endif diff --git a/ssl_server.c b/ssl_server.c index 4d39e34..d4f79b6 100644 --- a/ssl_server.c +++ b/ssl_server.c @@ -163,11 +163,11 @@ ssl_server_error (net_hook_t *hook) } net_hook_t * -ssl_server_hook_new (net_hook_t *client_hook, char *server) +ssl_server_hook_new (net_hook_t *client_hook, char *server, int port) { net_hook_t *hook; hook = g_slice_new (net_hook_t); - hook->conn = gnet_conn_new (server, 995, nethook_event, hook); + hook->conn = gnet_conn_new (server, port, nethook_event, hook); hook->peer = client_hook; hook->server = TRUE; hook->connect = ssl_server_connect;