From 6a9be23e695658ce68444a03a9574cc4a21ed4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Gallou=C3=ABt?= Date: Fri, 2 Sep 2016 09:39:38 +0000 Subject: [PATCH] Add mud_peer_is_up() --- mud.c | 23 +++++++++++++++++++++++ mud.h | 3 ++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/mud.c b/mud.c index 3098050..c126268 100644 --- a/mud.c +++ b/mud.c @@ -824,6 +824,29 @@ int mud_can_push (struct mud *mud) return (mud->tx.start != mud->tx.end); } +int mud_peer_is_up (struct mud *mud, const char *name, const char *host, int port) +{ + if (!name || !host || !port) + return 0; + + struct ipaddr local_addr; + + if (mud_ipaddrinfo(&local_addr, name)) + return 0; + + struct sockaddr_storage addr; + + if (mud_addrinfo(&addr, host, port)) + return 0; + + mud_unmapv4((struct sockaddr *)&addr); + + struct path *path = mud_path(mud, &local_addr, + (struct sockaddr *)&addr, 0); + + return path->state.on && path->state.up; +} + int mud_is_up (struct mud *mud) { struct path *path; diff --git a/mud.h b/mud.h index 5e1c055..9ec78c8 100644 --- a/mud.h +++ b/mud.h @@ -17,7 +17,8 @@ int mud_set_time_tolerance_sec (struct mud *, unsigned); int mud_set_on (struct mud *, const char *, int); -int mud_peer (struct mud *, const char *, const char *, int); +int mud_peer (struct mud *, const char *, const char *, int); +int mud_peer_is_up (struct mud *, const char *, const char *, int); int mud_can_pull (struct mud *); int mud_can_push (struct mud *);