diff options
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) { |