aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libglouglou.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libglouglou.c')
-rw-r--r--libglouglou/libglouglou.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/libglouglou/libglouglou.c b/libglouglou/libglouglou.c
index c2c284a..c9c0df8 100644
--- a/libglouglou/libglouglou.c
+++ b/libglouglou/libglouglou.c
@@ -13,6 +13,7 @@
#include <signal.h>
#include "libglouglou.h"
+#include "sendbuf.h"
#define error(fmt, ...) \
if (_verbosity >= 0) \
@@ -58,6 +59,7 @@ gg_server_start(struct event_base *ev_base, char *ip, int port,
struct gg_server *srv;
struct sockaddr_in sock_addr;
struct event *ev;
+ struct sendbuf *sbuf;
int s;
int sock_on = 1;
@@ -68,6 +70,13 @@ gg_server_start(struct event_base *ev_base, char *ip, int port,
srv->handle_conn = handle_conn;
srv->handle_packet = handle_packet;
srv->usrdata = usrdata;
+
+ sbuf = sendbuf_init(ev_base, PACKET_SNDBUF_MAX * 2, PACKET_SNDBUF_MAX, 200,
+ cb_srv_send, srv);
+ if (!sbuf)
+ goto err;
+ srv->sbuf = sbuf;
+
s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0)
goto err;
@@ -99,12 +108,24 @@ err:
}
int
+cb_srv_send(void *data, int size, void *usrdata)
+{
+ struct gg_server *srv;
+
+ srv = usrdata;
+}
+
+int
gg_server_send(struct gg_server *srv, struct gg_packet *pkt, struct gg_user *usr)
{
static struct gg_packet *newpkt;
int size;
- newpkt = pkt_encode(pkt, &size);
+ // XXX IN PROGRESS get size before
+ newpkt = sendbuf_gettoken(srv->sndbuf, size);
+
+ pkt_encode(pkt, &size, newpkt);
+
if (!newpkt)
return -1;
return server_send(srv, usr, newpkt, size);