diff options
author | sandmann <sandmann> | 2007-07-30 05:04:16 +0000 |
---|---|---|
committer | sandmann <sandmann> | 2007-07-30 05:04:16 +0000 |
commit | 599abadb66b57b93e99fd53f2e23ac2ea4a539c7 (patch) | |
tree | 243ee9248d88c3f5d615feca0c6534ff218d0af4 /src | |
parent | b70b2c4b01ae66dfe1d987e6cb73d4783a07bced (diff) |
Replace LacConnection with LacGConnection
Diffstat (limited to 'src')
-rw-r--r-- | src/lac.h | 79 | ||||
-rw-r--r-- | src/lacconnection.c | 187 | ||||
-rw-r--r-- | src/lacdns-nameserver.c | 26 | ||||
-rw-r--r-- | src/lachttp.c | 42 |
4 files changed, 257 insertions, 77 deletions
@@ -263,70 +263,69 @@ gboolean lac_fd_is_watched (gint fd); /* * Connection */ -typedef struct _LacConnection LacConnection; -typedef union _LacConnectionEvent LacConnectionEvent; +typedef struct _LacGConnection LacGConnection; +typedef union _LacGConnectionEvent LacGConnectionEvent; typedef enum { - LAC_CONNECTION_EVENT_CONNECT, /* connect successful */ - LAC_CONNECTION_EVENT_READ, /* data to read */ - LAC_CONNECTION_EVENT_CLOSE, /* Connection closed */ - LAC_CONNECTION_EVENT_ERROR, /* error */ -} LacConnectionEventType; + LAC_GCONNECTION_EVENT_CONNECT, /* connect successful */ + LAC_GCONNECTION_EVENT_READ, /* data to read */ + LAC_GCONNECTION_EVENT_CLOSE, /* GConnection closed */ + LAC_GCONNECTION_EVENT_ERROR, /* error */ +} LacGConnectionEventType; typedef struct { - LacConnectionEventType type; -} LacConnectionConnectEvent; + LacGConnectionEventType type; +} LacGConnectionConnectEvent; typedef struct { - LacConnectionEventType type; + LacGConnectionEventType type; gpointer _lac_reserved0; gpointer _lac_reserved1; LacByteQueue *byte_queue; const gchar *data; guint len; -} LacConnectionReadEvent; +} LacGConnectionReadEvent; typedef struct { - LacConnectionEventType type; + LacGConnectionEventType type; gboolean remote_closed; /* true: remote closed. false: local closed */ -} LacConnectionCloseEvent; +} LacGConnectionCloseEvent; typedef struct { - LacConnectionEventType type; + LacGConnectionEventType type; const GError *err; -} LacConnectionErrorEvent; - -union _LacConnectionEvent { - LacConnectionEventType type; - LacConnectionConnectEvent connect; - LacConnectionReadEvent read; - LacConnectionCloseEvent close; - LacConnectionErrorEvent error; +} LacGConnectionErrorEvent; + +union _LacGConnectionEvent { + LacGConnectionEventType type; + LacGConnectionConnectEvent connect; + LacGConnectionReadEvent read; + LacGConnectionCloseEvent close; + LacGConnectionErrorEvent error; }; -typedef void (* LacConnectionFunc) (LacConnection *connection, - const LacConnectionEvent *event); +typedef void (* LacGConnectionFunc) (LacGConnection *connection, + const LacGConnectionEvent *event); -LacConnection * lac_connection_new (const LacAddress *address, - gint port, - LacConnectionFunc callback, - gpointer data); -gpointer lac_connection_get_data (LacConnection *connection); -void lac_connection_write (LacConnection *connection, +LacGConnection * lac_g_connection_new (const LacAddress *address, + gint port, + LacGConnectionFunc callback, + gpointer data); +gpointer lac_g_connection_get_data (LacGConnection *connection); +void lac_g_connection_write (LacGConnection *connection, const gchar *data, guint len); -void lac_connection_write_cstr (LacConnection *connection, +void lac_g_connection_write_cstr (LacGConnection *connection, const gchar *data); -void lac_connection_shutdown_write (LacConnection *connection); -LacConnection * lac_connection_ref (LacConnection *connection); -void lac_connection_unref (LacConnection *connection); -G_CONST_RETURN LacAddress *lac_connection_get_address (LacConnection *connection); -gint lac_connection_get_port (LacConnection *connection); -void lac_connection_close (LacConnection *connection); -gboolean lac_connection_is_connected (LacConnection *connection); -void lac_connection_flush (LacConnection *connection); - +void lac_g_connection_shutdown_write (LacGConnection *connection); +LacGConnection * lac_g_connection_ref (LacGConnection *connection); +void lac_g_connection_unref (LacGConnection *connection); +G_CONST_RETURN LacAddress *lac_g_connection_get_address (LacGConnection *connection); +gint lac_g_connection_get_port (LacGConnection *connection); +void lac_g_connection_close (LacGConnection *connection); +gboolean lac_g_connection_is_connected (LacGConnection *connection); +void lac_g_connection_flush (LacGConnection *connection); /* * URI diff --git a/src/lacconnection.c b/src/lacconnection.c index d96a7f4..e8b4365 100644 --- a/src/lacconnection.c +++ b/src/lacconnection.c @@ -1,3 +1,72 @@ + +#include "lac.h" +#include <string.h> +typedef struct _LacConnection LacConnection; +typedef union _LacConnectionEvent LacConnectionEvent; + +typedef enum { + LAC_CONNECTION_EVENT_CONNECT, /* connect successful */ + LAC_CONNECTION_EVENT_READ, /* data to read */ + LAC_CONNECTION_EVENT_CLOSE, /* Connection closed */ + LAC_CONNECTION_EVENT_ERROR, /* error */ +} LacConnectionEventType; + +typedef struct { + LacConnectionEventType type; +} LacConnectionConnectEvent; + +typedef struct { + LacConnectionEventType type; + gpointer _lac_reserved0; + gpointer _lac_reserved1; + LacByteQueue *byte_queue; + const gchar *data; + guint len; +} LacConnectionReadEvent; + +typedef struct { + LacConnectionEventType type; + gboolean remote_closed; /* true: remote closed. + false: local closed */ +} LacConnectionCloseEvent; + +typedef struct { + LacConnectionEventType type; + const GError *err; +} LacConnectionErrorEvent; + +union _LacConnectionEvent { + LacConnectionEventType type; + LacConnectionConnectEvent connect; + LacConnectionReadEvent read; + LacConnectionCloseEvent close; + LacConnectionErrorEvent error; +}; + +typedef void (* LacConnectionFunc) (LacConnection *connection, + const LacConnectionEvent *event); + +LacConnection * lac_connection_new (const LacAddress *address, + gint port, + LacConnectionFunc callback, + gpointer data); +gpointer lac_connection_get_data (LacConnection *connection); +void lac_connection_write (LacConnection *connection, + const gchar *data, + guint len); +void lac_connection_write_cstr (LacConnection *connection, + const gchar *data); +void lac_connection_shutdown_write (LacConnection *connection); +LacConnection * lac_connection_ref (LacConnection *connection); +void lac_connection_unref (LacConnection *connection); +G_CONST_RETURN LacAddress *lac_connection_get_address (LacConnection *connection); +gint lac_connection_get_port (LacConnection *connection); +void lac_connection_close (LacConnection *connection); +gboolean lac_connection_is_connected (LacConnection *connection); +void lac_connection_flush (LacConnection *connection); + + + /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- */ /* Lac - Library for asynchronous communication @@ -19,9 +88,6 @@ * Boston, MA 02111-1307, USA. */ -#include "lac.h" -#include <string.h> - /* * Prototypes for a primitive abstraction covering TCP and SSL */ @@ -542,3 +608,118 @@ lac_connection_flush (LacConnection *connection) if (lac_byte_queue_get_length (connection->unwritten) == 0) lac_connection_do_writes (connection); } + + + + + + + + + + + +/******** general connection ************/ + +struct _LacGConnection +{ + LacConnection *connection; + + LacGConnectionFunc func; + gpointer data; +}; + +static void +on_connection_callback (LacConnection *connection, + const LacConnectionEvent *event) +{ + LacGConnection *g_connection = lac_connection_get_data (connection); + + g_connection->func (g_connection, (LacGConnectionEvent *)event); +} + +LacGConnection * +lac_g_connection_new (const LacAddress *address, + gint port, + LacGConnectionFunc callback, + gpointer data) +{ + LacGConnection *g_connection = g_new0 (LacGConnection, 1); + + g_connection->connection = lac_connection_new (address, port, + on_connection_callback, g_connection); + + return g_connection; +} + +gpointer +lac_g_connection_get_data (LacGConnection *connection) +{ + return connection->data; +} + +void +lac_g_connection_write (LacGConnection *connection, + const gchar *data, + guint len) +{ + lac_connection_write (connection->connection, data, len); +} + +void +lac_g_connection_write_cstr (LacGConnection *connection, + const gchar *data) +{ + lac_connection_write_cstr (connection->connection, data); +} + +void +lac_g_connection_shutdown_write (LacGConnection *connection) +{ + lac_connection_shutdown_write (connection->connection); +} + +LacGConnection * +lac_g_connection_ref (LacGConnection *connection) +{ + lac_connection_ref (connection->connection); + + return connection; +} + +void +lac_g_connection_unref (LacGConnection *connection) +{ + lac_connection_unref (connection->connection); +} + +G_CONST_RETURN LacAddress * +lac_g_connection_get_address (LacGConnection *connection) +{ + return lac_connection_get_address (connection->connection); +} + + +gint +lac_g_connection_get_port (LacGConnection *connection) +{ + return lac_connection_get_port (connection->connection); +} + +void +lac_g_connection_close (LacGConnection *connection) +{ + lac_connection_close (connection->connection); +} + +gboolean +lac_g_connection_is_connected (LacGConnection *connection) +{ + return lac_connection_is_connected (connection->connection); +} + +void +lac_g_connection_flush (LacGConnection *connection) +{ + lac_connection_flush (connection->connection); +} diff --git a/src/lacdns-nameserver.c b/src/lacdns-nameserver.c index 8e2eacf..601d9ff 100644 --- a/src/lacdns-nameserver.c +++ b/src/lacdns-nameserver.c @@ -324,10 +324,10 @@ typedef struct TcpClosure { } TcpClosure; static void -name_server_handle_tcp_event (LacConnection *connection, - const LacConnectionEvent *event) +name_server_handle_tcp_event (LacGConnection *connection, + const LacGConnectionEvent *event) { - TcpClosure *closure = lac_connection_get_data (connection); + TcpClosure *closure = lac_g_connection_get_data (connection); #if 0 lac_debug_checkpoint (); @@ -335,11 +335,11 @@ name_server_handle_tcp_event (LacConnection *connection, switch (event->type) { - case LAC_CONNECTION_EVENT_CONNECT: + case LAC_GCONNECTION_EVENT_CONNECT: /* ignore */ break; - case LAC_CONNECTION_EVENT_READ: + case LAC_GCONNECTION_EVENT_READ: g_string_append_len ( closure->unparsed_data, event->read.data, event->read.len); @@ -347,11 +347,11 @@ name_server_handle_tcp_event (LacConnection *connection, closure->server->outstanding_queries, closure->unparsed_data->str, closure->unparsed_data->len)) { - lac_connection_close (connection); + lac_g_connection_close (connection); } break; - case LAC_CONNECTION_EVENT_CLOSE: + case LAC_GCONNECTION_EVENT_CLOSE: if (event->close.remote_closed && closure->unparsed_data->len > 0) { /* Since we didn't get a useful response, we can't @@ -361,14 +361,14 @@ name_server_handle_tcp_event (LacConnection *connection, g_warning ("DNS: server closed connection in the " "middle of a message"); } - lac_connection_unref (connection); + lac_g_connection_unref (connection); g_string_free (closure->unparsed_data, TRUE); g_free (closure); break; - case LAC_CONNECTION_EVENT_ERROR: + case LAC_GCONNECTION_EVENT_ERROR: g_warning ("error: %s\n", event->error.err->message); - lac_connection_unref (connection); + lac_g_connection_unref (connection); g_string_free (closure->unparsed_data, TRUE); g_free (closure); break; @@ -383,7 +383,7 @@ static void name_server_dispatch_tcp_query (NameServer *server, Query *query) { TcpClosure *closure; - LacConnection *connection; + LacGConnection *connection; GString *msg_str; g_assert (!g_hash_table_lookup ( @@ -398,7 +398,7 @@ name_server_dispatch_tcp_query (NameServer *server, Query *query) #if 0 g_print ("NEW CONNECTION\n"); #endif - connection = lac_connection_new ( + connection = lac_g_connection_new ( server->address, DNS_PORT, name_server_handle_tcp_event, closure); @@ -411,7 +411,7 @@ name_server_dispatch_tcp_query (NameServer *server, Query *query) /* message */ g_string_append_len (msg_str, query->msg, query->msg_len); - lac_connection_write (connection, msg_str->str, msg_str->len); + lac_g_connection_write (connection, msg_str->str, msg_str->len); query->timeout_id = g_timeout_add (QUERY_TIMEOUT, query_timeout, query); g_string_free (msg_str, TRUE); diff --git a/src/lachttp.c b/src/lachttp.c index 6717d50..bf4bd35 100644 --- a/src/lachttp.c +++ b/src/lachttp.c @@ -241,7 +241,7 @@ static void http_host_transport_closed_notify (HttpHost *hos */ struct _HttpTransport { HttpHost * host; - LacConnection * connection; + LacGConnection * connection; GQueue * unsent; GQueue * in_progress; LacHttpRequest * current; @@ -2026,7 +2026,7 @@ answer_timeout (gpointer data) #endif server_choked_on_pipeline (transport, CHOKE_RECOVERY); http_host_transport_will_close_notify (transport->host, transport); - lac_connection_close (transport->connection); + lac_g_connection_close (transport->connection); } return FALSE; @@ -2064,8 +2064,8 @@ http_transport_flush_write_buffer (HttpTransport *transport) if (n_bytes > 0) { - /* FIXME: should we have a lac_connection_write_byte_queue()? */ - lac_connection_write (transport->connection, bytes, n_bytes); + /* FIXME: should we have a lac_g_connection_write_byte_queue()? */ + lac_g_connection_write (transport->connection, bytes, n_bytes); lac_byte_queue_delete_head (transport->write_buffer, n_bytes); } @@ -2077,7 +2077,7 @@ flush_write_buffer_timeout (gpointer data) HttpTransport *transport = data; http_transport_flush_write_buffer (transport); - lac_connection_flush (transport->connection); + lac_g_connection_flush (transport->connection); transport->write_timeout = 0; return FALSE; @@ -2088,7 +2088,7 @@ flush_write_buffer_timeout (gpointer data) * we have serialized it. There is no point in distinguishing * between stuff we have buffered up here and stuff that has * been passed to send(), because it could just as well be buffered - * in the LacConnection, in the kernel or in transit. + * in the LacGConnection, in the kernel or in transit. */ static void http_transport_transmit_request (HttpTransport *transport, @@ -2143,7 +2143,7 @@ http_transport_transmit_request (HttpTransport *transport, else { http_transport_flush_write_buffer (transport); - lac_connection_flush (transport->connection); + lac_g_connection_flush (transport->connection); } http_transport_reset_answer_timeout (transport); @@ -2188,7 +2188,7 @@ static void write_log_file (HttpTransport * transport, guint len, gint used, - const LacConnectionReadEvent *read_event) + const LacGConnectionReadEvent *read_event) { static FILE *f; int i, n_bytes; @@ -2222,7 +2222,7 @@ write_log_file (HttpTransport * transport, static void http_transport_handle_read (HttpTransport *transport, - const LacConnectionReadEvent *read_event) + const LacGConnectionReadEvent *read_event) { #if 0 { @@ -2288,7 +2288,7 @@ http_transport_handle_read (HttpTransport *transport, } g_error_free (err); - lac_connection_close (transport->connection); + lac_g_connection_close (transport->connection); break; } @@ -2382,7 +2382,7 @@ http_transport_handle_read (HttpTransport *transport, /* FIXME return outstanding */ http_host_transport_will_close_notify ( transport->host, transport); - lac_connection_close (transport->connection); + lac_g_connection_close (transport->connection); } } } @@ -2425,16 +2425,16 @@ http_transport_handle_close (HttpTransport *transport) } static void -connection_callback (LacConnection *connection, - const LacConnectionEvent *event) +connection_callback (LacGConnection *connection, + const LacGConnectionEvent *event) { - HttpTransport *transport = lac_connection_get_data (connection); + HttpTransport *transport = lac_g_connection_get_data (connection); http_transport_reset_answer_timeout (transport); switch (event->type) { - case LAC_CONNECTION_EVENT_CONNECT: + case LAC_GCONNECTION_EVENT_CONNECT: #if 0 g_print ("CONNECT\n"); #endif @@ -2447,18 +2447,18 @@ connection_callback (LacConnection *connection, } break; - case LAC_CONNECTION_EVENT_READ: + case LAC_GCONNECTION_EVENT_READ: http_transport_handle_read (transport, &(event->read)); break; - case LAC_CONNECTION_EVENT_CLOSE: + case LAC_GCONNECTION_EVENT_CLOSE: #if 0 g_print ("%p HTTP TRANSPORT CLOSED\n", transport); #endif http_transport_handle_close (transport); break; - case LAC_CONNECTION_EVENT_ERROR: + case LAC_GCONNECTION_EVENT_ERROR: g_print ("seen error: %s\n", event->error.err->message); if (!transport->broken_server && @@ -2564,7 +2564,7 @@ http_transport_new (HttpHost *host, #endif transport->host = host; - transport->connection = lac_connection_new ( + transport->connection = lac_g_connection_new ( host->address, host->port, connection_callback, transport); transport->unsent = g_queue_new (); @@ -2584,7 +2584,7 @@ http_transport_new (HttpHost *host, static void http_transport_destroy (HttpTransport *transport) { - lac_connection_unref (transport->connection); + lac_g_connection_unref (transport->connection); #if 0 g_source_remove (transport->debug_timeout); @@ -2617,7 +2617,7 @@ http_transport_add_request (HttpTransport *transport, request->transport = transport; - if (lac_connection_is_connected (transport->connection)) + if (lac_g_connection_is_connected (transport->connection)) { http_transport_transmit_request (transport, request); } |