diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2013-08-25 02:38:40 +0200 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2013-08-25 02:38:40 +0200 |
commit | 0fe0e29029f6bb27bfeaa3f459179d0285b9b674 (patch) | |
tree | e317d766300743a997cd6cca1bb39b689c89977c | |
parent | WIP (diff) | |
download | glouglou-0fe0e29029f6bb27bfeaa3f459179d0285b9b674.tar.xz glouglou-0fe0e29029f6bb27bfeaa3f459179d0285b9b674.zip |
WIP
-rw-r--r-- | v3/glougloud/probes.c | 15 | ||||
-rw-r--r-- | v3/glougloud/viz.c | 13 | ||||
-rw-r--r-- | v3/libglouglou/Makefile | 2 | ||||
-rw-r--r-- | v3/libglouglou/client.c (renamed from v3/libglouglou/probe.c) | 0 | ||||
-rw-r--r-- | v3/libglouglou/libglouglou.h | 72 | ||||
-rw-r--r-- | v3/libglouglou/packet.c (renamed from v3/libglouglou/proto.c) | 0 | ||||
-rw-r--r-- | v3/libglouglou/server.c | 17 |
7 files changed, 94 insertions, 25 deletions
diff --git a/v3/glougloud/probes.c b/v3/glougloud/probes.c index 7482a50..93cc0d4 100644 --- a/v3/glougloud/probes.c +++ b/v3/glougloud/probes.c @@ -9,12 +9,14 @@ struct glougloud_probes { struct event_base *evb; struct modules *mods; redisAsyncContext *rc; + struct gg_server *server; }; struct glougloud *_ggd; struct glougloud_probes *_probes; -void cb_connect(const redisAsyncContext *c, int status) +static void +cb_connect(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { log_warn("redis error: %s", c->errstr); @@ -23,7 +25,8 @@ void cb_connect(const redisAsyncContext *c, int status) log_info("redis connected\n"); } -void cb_disconnect(const redisAsyncContext *c, int status) +static void +cb_disconnect(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { log_warn("redis error: %s", c->errstr); @@ -32,14 +35,14 @@ void cb_disconnect(const redisAsyncContext *c, int status) log_info("redis disconnected"); } -int +static int prb_handle_conn(struct gg_server *srv, struct gg_user *usr) { // XXX return 0; } -int +static int prb_handle_packet(struct gg_server *srv, struct gg_user *usr, struct gg_packet *pkt) { // XXX @@ -62,12 +65,12 @@ probes_init(struct glougloud *ggd) { // XXX libglouglou gg_server _probes->server = gg_server_start(_probes->evb, - ggd->probes.serv_ip, ggd->probes.serv_port, + &ggd->probes.serv_ip, ggd->probes.serv_port, prb_handle_conn, prb_handle_packet, NULL); event_base_dispatch(_probes->evb); - gg_server_stop(_probes); + gg_server_stop(_probes->server); return 0; } diff --git a/v3/glougloud/viz.c b/v3/glougloud/viz.c index 182e086..730ccf1 100644 --- a/v3/glougloud/viz.c +++ b/v3/glougloud/viz.c @@ -17,7 +17,8 @@ struct glougloud_viz { struct glougloud *_ggd; struct glougloud_viz *_viz; -void cb_notification(redisAsyncContext *c, void *r, void *privdata) +static void +cb_notification(redisAsyncContext *c, void *r, void *privdata) { redisReply *reply = r; if (!reply) @@ -26,7 +27,8 @@ void cb_notification(redisAsyncContext *c, void *r, void *privdata) log_debug("redis cb_notification: %s\n", reply->str); } -void cb_connect(const redisAsyncContext *c, int status) +static void +cb_connect(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { log_warn("redis error: %s", c->errstr); @@ -35,7 +37,8 @@ void cb_connect(const redisAsyncContext *c, int status) log_info("redis connected\n"); } -void cb_disconnect(const redisAsyncContext *c, int status) +static void +cb_disconnect(const redisAsyncContext *c, int status) { if (status != REDIS_OK) { log_warn("redis error: %s", c->errstr); @@ -44,7 +47,7 @@ void cb_disconnect(const redisAsyncContext *c, int status) log_info("redis disconnected"); } -void +static void cb_srv_conn(evutil_socket_t listener, short event, void *arg) { @@ -69,7 +72,7 @@ viz_init(struct glougloud *ggd) { _viz->srv_tcp.ev = tcp_server_create(_viz->evb, &_ggd->viz.serv_ip, _ggd->viz.serv_port, cb_srv_conn, NULL); - event_base_dispatch(ev_base); + event_base_dispatch(_viz->evb); return 0; } diff --git a/v3/libglouglou/Makefile b/v3/libglouglou/Makefile index 4c2a90d..0b61a9e 100644 --- a/v3/libglouglou/Makefile +++ b/v3/libglouglou/Makefile @@ -7,7 +7,7 @@ LIBDIR=$(PREFIX)/lib LIBNAME=libglouglou TARGET = ${LIBNAME}.so -SOURCES = log.c probe.c proto.c server.c utils.c +SOURCES = log.c client.c packet.c server.c utils.c HEADERS = libglouglou.h OBJECTS = $(SOURCES:.c=.o) diff --git a/v3/libglouglou/probe.c b/v3/libglouglou/client.c index e69de29..e69de29 100644 --- a/v3/libglouglou/probe.c +++ b/v3/libglouglou/client.c diff --git a/v3/libglouglou/libglouglou.h b/v3/libglouglou/libglouglou.h index 3e2ebe6..8944d59 100644 --- a/v3/libglouglou/libglouglou.h +++ b/v3/libglouglou/libglouglou.h @@ -14,33 +14,79 @@ #define GLOUGLOU_PROBE_DEFAULT_PORT 4430 #define GLOUGLOU_VIZ_DEFAULT_PORT 4431 -/* proto.c */ +/* packet.c */ -struct gg_packet { +#define PACKET_VERSION 0x03 +#define PACKET_HEADER_SIZE 2 +#define PACKET_BUFFER_SIZE 16384 +#define PACKET_SNDBUF_MAX 500 +#define PACKET_ARG_MAX 60 +struct __attribute__((packed)) gg_packet { + u_int8_t ver; + u_int8_t module; }; -/* probe.c */ +/* client.c */ -struct gg_probe { +enum client_status { + GG_CLIENT_STATUS_CONNECTING = 0, + GG_CLIENT_STATUS_CONNECTED = 1 +}; +struct gg_client { + struct event_base *ev_base; + struct addr *ip; + int port; + struct sockaddr_in addr; + struct event *ev; + struct event *ev_timer; + int sock; + enum client_status status; + int (*handle_conn)(struct gg_client *); + int (*handle_packet)(struct gg_client *, struct gg_packet *); + void *usrdata; + struct sendbuf *sbuf; }; -struct gg_probe *gg_probe_connect(struct addr *ip, int port, - int (*handle_conn)(struct gg_probe *prb), - int (*handle_pkt)(struct gg_probe *prb, struct gg_packet *pkt)); -void gg_probe_disconnect(struct gg_probe *); -int gg_probe_send(struct gg_probe *probe, struct gg_packet *pkt); + +struct gg_client *gg_client_connect(struct event_base *, + struct addr *ip, int port, + int (*handle_conn)(struct gg_client *prb), + int (*handle_pkt)(struct gg_client *prb, struct gg_packet *pkt)); +void gg_client_disconnect(struct gg_client *); +int gg_client_send(struct gg_client *, struct gg_packet *); /* server.c */ -struct gg_server { +struct gg_user { + LIST_ENTRY(gg_user) entry; + int id; + int sock; + struct sockaddr_in addr; + struct sendbuf *sbuf; +}; +struct gg_server { + struct event_base *ev_base; + struct addr *ip; + int port; + struct sockaddr_in addr; + struct event *ev; + int sock; + int (*handle_conn)(struct gg_server *, struct gg_user *); + int (*handle_packet)(struct gg_server *, + struct gg_user *, struct gg_packet *); + void *usrdata; + LIST_HEAD(, gg_user) user_list; + int user_count; + int user_id_count; }; -struct gg_server *gg_server_start(struct addr *ip, int port, - int (*handle_conn)(struct gg_server *srv), - int (*handle_pkt)(struct gg_server *srv, struct gg_packet *pkt)); +struct gg_server *gg_server_start(struct event_base *, + struct addr *ip, int port, + int (*handle_conn)(struct gg_server *srv, struct gg_user *usr), + int (*handle_pkt)(struct gg_server *srv, struct gg_user *usr, struct gg_packet *pkt), void *); void gg_server_stop(struct gg_server *srv); /* log.c */ diff --git a/v3/libglouglou/proto.c b/v3/libglouglou/packet.c index e69de29..e69de29 100644 --- a/v3/libglouglou/proto.c +++ b/v3/libglouglou/packet.c diff --git a/v3/libglouglou/server.c b/v3/libglouglou/server.c index e69de29..eaa4135 100644 --- a/v3/libglouglou/server.c +++ b/v3/libglouglou/server.c @@ -0,0 +1,17 @@ +#include "libglouglou.h" + +struct gg_server *gg_server_start(struct event_base *evb, + struct addr *ip, int port, + int (*handle_conn)(struct gg_server *srv, struct gg_user *usr), + int (*handle_pkt)(struct gg_server *srv, struct gg_user *usr, struct gg_packet *pkt), void *usrdata) +{ + return NULL; +} + + +void +gg_server_stop(struct gg_server *srv) +{ + +} + |