diff --git a/include/re_udp.h b/include/re_udp.h index 1c091de..f744f2f 100644 --- a/include/re_udp.h +++ b/include/re_udp.h @@ -56,3 +56,4 @@ int udp_register_helper(struct udp_helper **uhp, struct udp_sock *us, void *arg); int udp_send_helper(struct udp_sock *us, const struct sa *dst, struct mbuf *mb, struct udp_helper *uh); +struct udp_helper *udp_helper_find(const struct udp_sock *us, int layer); diff --git a/src/udp/udp.c b/src/udp/udp.c index c1afee5..07ad55d 100644 --- a/src/udp/udp.c +++ b/src/udp/udp.c @@ -808,3 +808,30 @@ int udp_send_helper(struct udp_sock *us, const struct sa *dst, return udp_send_internal(us, dst, mb, uh->le.prev); } + + +/** + * Find a UDP-helper on a UDP socket + * + * @param us UDP socket + * @param layer Layer number + * + * @return UDP-helper if found, NULL if not found + */ +struct udp_helper *udp_helper_find(const struct udp_sock *us, int layer) +{ + struct le *le; + + if (!us) + return NULL; + + for (le = us->helpers.head; le; le = le->next) { + + struct udp_helper *uh = le->data; + + if (layer == uh->layer) + return uh; + } + + return NULL; +}