summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/plugins.c8
-rw-r--r--src/common/socket.c8
-rw-r--r--src/common/socket.h4
3 files changed, 15 insertions, 5 deletions
diff --git a/src/common/plugins.c b/src/common/plugins.c
index 5951885a1..9da12c35f 100644
--- a/src/common/plugins.c
+++ b/src/common/plugins.c
@@ -291,6 +291,12 @@ int plugins_config_read(const char *cfgName)
return 0;
}
+/// backward compatibillity function
+int plugin_WFIFOSET(int fd,int len)
+{
+ return _WFIFOSET(fd,len,0);
+}
+
void plugins_init (void)
{
char *PLUGIN_CONF_FILENAME = "conf/plugin_athena.conf";
@@ -302,7 +308,7 @@ void plugins_init (void)
// networking
export_symbol (func_parse_table, 18);
export_symbol (RFIFOSKIP, 17);
- export_symbol (WFIFOSET, 16);
+ export_symbol (plugin_WFIFOSET, 16);
export_symbol (delete_session, 15);
export_symbol (session, 14);
export_symbol (&fd_max, 13);
diff --git a/src/common/socket.c b/src/common/socket.c
index bedad4ed0..dcaf2cdf2 100644
--- a/src/common/socket.c
+++ b/src/common/socket.c
@@ -687,7 +687,7 @@ int realloc_writefifo(int fd, size_t addition)
return 0;
}
-int WFIFOSET(int fd,int len)
+int _WFIFOSET(int fd, int len, char flush)
{
size_t newreserve;
struct socket_data *s = session[fd];
@@ -712,7 +712,9 @@ int WFIFOSET(int fd,int len)
// For inter-server connections, let the reserve be 1/4th of the link size.
newreserve = s->wdata_size + (s->max_wdata>=FIFOSIZE_SERVERLINK?FIFOSIZE_SERVERLINK/4:wfifo_size);
- if(s->wdata_size >= frame_size)
+ if( flush )
+ flush_fifo(fd);
+ else if(s->wdata_size >= frame_size)
send_from_fifo(fd);
// realloc after sending
@@ -807,7 +809,7 @@ int do_sendrecv(int next)
if(session[i]->wdata_size && session[i]->func_send)
session[i]->func_send(i);
- if(session[i]->eof) //The session check is for when the connection ended in func_parse
+ if(session[i] && session[i]->eof) //The session check is for when the connection ended in func_parse
{ //Finally, even if there is no data to parse, connections signalled eof should be closed, so we call parse_func [Skotlex]
if (session[i]->func_parse)
session[i]->func_parse(i); //This should close the session inmediately.
diff --git a/src/common/socket.h b/src/common/socket.h
index 9552575f3..2c0412a9e 100644
--- a/src/common/socket.h
+++ b/src/common/socket.h
@@ -67,6 +67,8 @@ extern time_t stall_time;
#define WFIFOL(fd,pos) (*(unsigned long*)WFIFOP(fd,pos))
// use function instead of macro.
//#define WFIFOSET(fd,len) (session[fd]->wdata_size = (session[fd]->wdata_size + (len) + 2048 < session[fd]->max_wdata) ? session[fd]->wdata_size + len : session[fd]->wdata_size)
+#define WFIFOSET(fd,len) _WFIFOSET(fd,len,0)
+#define WFIFOSET2(fd,len,flush) _WFIFOSET(fd,len,flush)
#define WBUFP(p,pos) (((unsigned char*)(p)) + (pos))
#define WBUFB(p,pos) (*(unsigned char*)((p) + (pos)))
#define WBUFW(p,pos) (*(unsigned short*)((p) + (pos)))
@@ -149,7 +151,7 @@ int make_connection(long,int);
int delete_session(int);
int realloc_fifo(int fd,unsigned int rfifo_size,unsigned int wfifo_size);
int realloc_writefifo(int fd, size_t addition);
-int WFIFOSET(int fd,int len);
+int _WFIFOSET(int fd,int len,char flush);
int RFIFOSKIP(int fd,int len);
int do_sendrecv(int next);