aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaurent Ghigonis <laurent@p1sec.com>2013-08-25 02:38:40 +0200
committerLaurent Ghigonis <laurent@p1sec.com>2013-08-25 02:38:40 +0200
commit0fe0e29029f6bb27bfeaa3f459179d0285b9b674 (patch)
treee317d766300743a997cd6cca1bb39b689c89977c
parentWIP (diff)
downloadglouglou-0fe0e29029f6bb27bfeaa3f459179d0285b9b674.tar.xz
glouglou-0fe0e29029f6bb27bfeaa3f459179d0285b9b674.zip
WIP
-rw-r--r--v3/glougloud/probes.c15
-rw-r--r--v3/glougloud/viz.c13
-rw-r--r--v3/libglouglou/Makefile2
-rw-r--r--v3/libglouglou/client.c (renamed from v3/libglouglou/probe.c)0
-rw-r--r--v3/libglouglou/libglouglou.h72
-rw-r--r--v3/libglouglou/packet.c (renamed from v3/libglouglou/proto.c)0
-rw-r--r--v3/libglouglou/server.c17
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)
+{
+
+}
+