diff options
author | Emanuele Giaquinta <exg@irssi.org> | 2008-05-22 22:38:29 +0000 |
---|---|---|
committer | exg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564> | 2008-05-22 22:38:29 +0000 |
commit | f053542dcfd1739152c57eede2b882894911ca48 (patch) | |
tree | ec5f8f8b4a0c78d0dd5dcb76847a29e329de0d1f /src/irc | |
parent | 9f99376a8ac3d86d09bb5358753df2c3eaca5cae (diff) | |
download | irssi-f053542dcfd1739152c57eede2b882894911ca48.zip |
Extend net_sendbuffer by adding a LINEBUF_REC member and a net_sendbuffer_receive_line
function to read linewise from the associated io channel.
Rewrite irc/dcc/proxy read logic on top of it.
git-svn-id: file:///var/www/svn.irssi.org/SVN/irssi/trunk@4841 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/irc')
-rw-r--r-- | src/irc/core/irc-servers.c | 2 | ||||
-rw-r--r-- | src/irc/core/irc.c | 31 | ||||
-rw-r--r-- | src/irc/dcc/dcc-chat.c | 9 | ||||
-rw-r--r-- | src/irc/dcc/dcc-chat.h | 1 | ||||
-rw-r--r-- | src/irc/dcc/dcc-server.c | 9 | ||||
-rw-r--r-- | src/irc/dcc/dcc-server.h | 1 | ||||
-rw-r--r-- | src/irc/proxy/listen.c | 8 | ||||
-rw-r--r-- | src/irc/proxy/module.h | 3 |
8 files changed, 17 insertions, 47 deletions
diff --git a/src/irc/core/irc-servers.c b/src/irc/core/irc-servers.c index 9f688006..99574c57 100644 --- a/src/irc/core/irc-servers.c +++ b/src/irc/core/irc-servers.c @@ -334,7 +334,7 @@ static void sig_server_quit(IRC_SERVER_REC *server, const char *msg) char *str; if (!IS_IRC_SERVER(server) || server->handle == NULL || - server->buffer == NULL) + server->handle->readbuffer == NULL) return; str = g_strdup_printf("QUIT :%s", msg); diff --git a/src/irc/core/irc.c b/src/irc/core/irc.c index 150013dd..636bb0df 100644 --- a/src/irc/core/irc.c +++ b/src/irc/core/irc.c @@ -22,7 +22,6 @@ #include "modules.h" #include "network.h" #include "net-sendbuffer.h" -#include "line-split.h" #include "rawlog.h" #include "misc.h" @@ -326,28 +325,6 @@ static void irc_server_event(IRC_SERVER_REC *server, const char *line, g_free(recoded_nick); } -/* Read line from server */ -static int irc_receive_line(SERVER_REC *server, char **str, int read_socket) -{ - char tmpbuf[512]; - int recvlen, ret; - - g_return_val_if_fail(server != NULL, -1); - g_return_val_if_fail(str != NULL, -1); - - recvlen = !read_socket ? 0 : - net_receive(net_sendbuffer_handle(server->handle), - tmpbuf, sizeof(tmpbuf)); - - ret = line_split(tmpbuf, recvlen, str, &server->buffer); - if (ret == -1) { - /* connection lost */ - server->connection_lost = TRUE; - server_disconnect(server); - } - return ret; -} - static char *irc_parse_prefix(char *line, char **nick, char **address) { char *p; @@ -403,6 +380,7 @@ static void irc_parse_incoming(SERVER_REC *server) { char *str; int count; + int ret; g_return_if_fail(server != NULL); @@ -412,7 +390,7 @@ static void irc_parse_incoming(SERVER_REC *server) count = 0; server_ref(server); while (!server->disconnected && - irc_receive_line(server, &str, count < MAX_SOCKET_READS) > 0) { + (ret = net_sendbuffer_receive_line(server->handle, &str, count < MAX_SOCKET_READS)) > 0) { rawlog_input(server->rawlog, str); signal_emit_id(signal_server_incoming, 2, server, str); @@ -421,6 +399,11 @@ static void irc_parse_incoming(SERVER_REC *server) count++; } + if (ret == -1) { + /* connection lost */ + server->connection_lost = TRUE; + server_disconnect(server); + } server_unref(server); } diff --git a/src/irc/dcc/dcc-chat.c b/src/irc/dcc/dcc-chat.c index 782c33b3..61b69d73 100644 --- a/src/irc/dcc/dcc-chat.c +++ b/src/irc/dcc/dcc-chat.c @@ -24,7 +24,6 @@ #include "recode.h" #include "network.h" #include "net-sendbuffer.h" -#include "line-split.h" #include "misc.h" #include "settings.h" @@ -91,7 +90,6 @@ static void sig_dcc_destroyed(CHAT_DCC_REC *dcc) dcc_remove_chat_refs(dcc); if (dcc->sendbuf != NULL) net_sendbuffer_destroy(dcc->sendbuf, FALSE); - line_split_free(dcc->readbuf); g_free(dcc->id); } @@ -297,15 +295,14 @@ static void cmd_ctcp(const char *data, IRC_SERVER_REC *server) /* input function: DCC CHAT received some data.. */ void dcc_chat_input(CHAT_DCC_REC *dcc) { - char tmpbuf[512], *str; - int recvlen, ret; + char *str; + int ret; g_return_if_fail(IS_DCC_CHAT(dcc)); do { - recvlen = net_receive(dcc->handle, tmpbuf, sizeof(tmpbuf)); + ret = net_sendbuffer_receive_line(dcc->sendbuf, &str, 1); - ret = line_split(tmpbuf, recvlen, &str, &dcc->readbuf); if (ret == -1) { /* connection lost */ dcc->connection_lost = TRUE; diff --git a/src/irc/dcc/dcc-chat.h b/src/irc/dcc/dcc-chat.h index 62cb771f..c8f2cea9 100644 --- a/src/irc/dcc/dcc-chat.h +++ b/src/irc/dcc/dcc-chat.h @@ -13,7 +13,6 @@ struct CHAT_DCC_REC { #include "dcc-rec.h" char *id; /* unique identifier - usually same as nick. */ - LINEBUF_REC *readbuf; NET_SENDBUF_REC *sendbuf; unsigned int mirc_ctcp:1; /* Send CTCPs without the CTCP_MESSAGE prefix */ diff --git a/src/irc/dcc/dcc-server.c b/src/irc/dcc/dcc-server.c index 73a56d62..30224ff9 100644 --- a/src/irc/dcc/dcc-server.c +++ b/src/irc/dcc/dcc-server.c @@ -23,7 +23,6 @@ #include "commands.h" #include "network.h" #include "net-sendbuffer.h" -#include "line-split.h" #include "misc.h" #include "irc-servers.h" @@ -47,7 +46,6 @@ static void sig_dcc_destroyed(SERVER_DCC_REC *dcc) if (dcc->sendbuf != NULL) net_sendbuffer_destroy(dcc->sendbuf, FALSE); - line_split_free(dcc->readbuf); } /* Start listening for incoming connections */ @@ -65,15 +63,14 @@ static GIOChannel *dcc_listen_port(GIOChannel *iface, IPADDR *ip, int port) /* input function: DCC SERVER received some data.. */ static void dcc_server_input(SERVER_DCC_REC *dcc) { - char tmpbuf[512], *str; - int recvlen, ret; + char *str; + int ret; g_return_if_fail(IS_DCC_SERVER(dcc)); do { - recvlen = net_receive(dcc->handle, tmpbuf, sizeof(tmpbuf)); + ret = net_sendbuffer_receive_line(dcc->sendbuf, &str, 1); - ret = line_split(tmpbuf, recvlen, &str, &dcc->readbuf); if (ret == -1) { /* connection lost */ dcc_close(DCC(dcc)); diff --git a/src/irc/dcc/dcc-server.h b/src/irc/dcc/dcc-server.h index 4f6f248e..72435cbf 100644 --- a/src/irc/dcc/dcc-server.h +++ b/src/irc/dcc/dcc-server.h @@ -11,7 +11,6 @@ struct SERVER_DCC_REC { #include "dcc-rec.h" - LINEBUF_REC *readbuf; NET_SENDBUF_REC *sendbuf; unsigned int accept_send:1; /* Accept SEND connections */ diff --git a/src/irc/proxy/listen.c b/src/irc/proxy/listen.c index 9c9fb43f..5e7497c1 100644 --- a/src/irc/proxy/listen.c +++ b/src/irc/proxy/listen.c @@ -50,7 +50,6 @@ static void remove_client(CLIENT_REC *rec) g_free(rec->proxy_address); net_sendbuffer_destroy(rec->handle, TRUE); g_source_remove(rec->recv_tag); - line_split_free(rec->buffer); g_free_not_null(rec->nick); g_free_not_null(rec->host); g_free(rec); @@ -296,14 +295,13 @@ static void handle_client_cmd(CLIENT_REC *client, char *cmd, char *args, static void sig_listen_client(CLIENT_REC *client) { - char tmpbuf[1024], *str, *cmd, *args; - int ret, recvlen; + char *str, *cmd, *args; + int ret; g_return_if_fail(client != NULL); while (g_slist_find(proxy_clients, client) != NULL) { - recvlen = net_receive(client->handle->handle, tmpbuf, sizeof(tmpbuf)); - ret = line_split(tmpbuf, recvlen, &str, &client->buffer); + ret = net_sendbuffer_receive_line(client->handle, &str, 1); if (ret == -1) { /* connection lost */ remove_client(client); diff --git a/src/irc/proxy/module.h b/src/irc/proxy/module.h index 4116b716..e2580e1b 100644 --- a/src/irc/proxy/module.h +++ b/src/irc/proxy/module.h @@ -3,7 +3,6 @@ #define MODULE_NAME "proxy" #include "network.h" -#include "line-split.h" #include "irc.h" #include "irc-servers.h" @@ -18,8 +17,6 @@ typedef struct { } LISTEN_REC; typedef struct { - LINEBUF_REC *buffer; - char *nick, *host; NET_SENDBUF_REC *handle; int recv_tag; |