summaryrefslogtreecommitdiff
path: root/src/irc
diff options
context:
space:
mode:
authorEmanuele Giaquinta <exg@irssi.org>2008-05-22 22:38:29 +0000
committerexg <exg@dbcabf3a-b0e7-0310-adc4-f8d773084564>2008-05-22 22:38:29 +0000
commitf053542dcfd1739152c57eede2b882894911ca48 (patch)
treeec5f8f8b4a0c78d0dd5dcb76847a29e329de0d1f /src/irc
parent9f99376a8ac3d86d09bb5358753df2c3eaca5cae (diff)
downloadirssi-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.c2
-rw-r--r--src/irc/core/irc.c31
-rw-r--r--src/irc/dcc/dcc-chat.c9
-rw-r--r--src/irc/dcc/dcc-chat.h1
-rw-r--r--src/irc/dcc/dcc-server.c9
-rw-r--r--src/irc/dcc/dcc-server.h1
-rw-r--r--src/irc/proxy/listen.c8
-rw-r--r--src/irc/proxy/module.h3
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;