aboutsummaryrefslogtreecommitdiffstats
path: root/libglouglou/libggnet.c
diff options
context:
space:
mode:
Diffstat (limited to 'libglouglou/libggnet.c')
-rw-r--r--libglouglou/libggnet.c27
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)
{