diff options
author | Laurent Ghigonis <laurent@p1sec.com> | 2012-12-04 13:14:40 +0100 |
---|---|---|
committer | Laurent Ghigonis <laurent@p1sec.com> | 2012-12-04 13:14:40 +0100 |
commit | 6366fe8057c6310e4697ab5a0572334fb8db2712 (patch) | |
tree | add9d29da0d7cc4be7d1976b81cbb0dfc54577a7 /libglouglou/libggnet.c | |
parent | correctly handle size on connection response in ggnet_conn_data() (diff) | |
download | glouglou-6366fe8057c6310e4697ab5a0572334fb8db2712.tar.xz glouglou-6366fe8057c6310e4697ab5a0572334fb8db2712.zip |
add ggnet_conn_find()
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r-- | libglouglou/libggnet.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/libglouglou/libggnet.c b/libglouglou/libggnet.c index 2e7ff36..7ccfa00 100644 --- a/libglouglou/libggnet.c +++ b/libglouglou/libggnet.c @@ -151,6 +151,33 @@ ggnet_conn_del(struct ggnet *net, struct ggnet_conn *c) free(c); } + +struct ggnet_conn * +ggnet_conn_find(struct ggnet *net, struct in_addr *src, int src_port, + struct in_addr *dst, int dst_port, int proto, int *response) +{ + struct ggnet_conn *c; + + LIST_FOREACH(c, &net->conn_list, entry) { + if (((c->src->addr.s_addr == src->s_addr && + c->src_port == src_port && + c->dst->addr.s_addr == dst->s_addr && + c->dst_port == dst_port) || + (c->src->addr.s_addr == dst->s_addr && + c->src_port == dst_port && + c->dst->addr.s_addr == src->s_addr && + c->dst_port == src_port)) && + c->proto == proto) { + if (c->src->addr.s_addr == src->s_addr) + *response = 0; + else + *response = 1; + return c; + } + } + return NULL; +} + void ggnet_time_update(struct ggnet *net, time_t time) { |