X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=secnet.git;a=blobdiff_plain;f=util.c;h=207abb2b7163efa62e9e7c6adbbd9a9645384988;hp=94f9e35679acf34c7d500fade5e25919087cd9cc;hb=a32d56fb47ceff7404072e49a21290fc7314a7c3;hpb=4f28e77ed21e75fcfb30e2f8d1d2b9b1657f44c6 diff --git a/util.c b/util.c index 94f9e35..207abb2 100644 --- a/util.c +++ b/util.c @@ -476,3 +476,39 @@ extern void slilog_part(struct log_if *lf, int priority, const char *message, .. vslilog_part(lf,priority,message,ap); va_end(ap); } + +const char *iaddr_to_string(const union iaddr *ia) +{ + static char bufs[2][100]; + static int b; + + b ^= 1; + + assert(ia->sa.sa_family == AF_INET); + + snprintf(bufs[b], sizeof(bufs[b]), "[%s]:%d", + inet_ntoa(ia->sin.sin_addr), + ntohs(ia->sin.sin_port)); + return bufs[b]; +} + +bool_t iaddr_equal(const union iaddr *ia, const union iaddr *ib) +{ + if (ia->sa.sa_family != ib->sa.sa_family) + return 0; + switch (ia->sa.sa_family) { + case AF_INET: + return ia->sin.sin_addr.s_addr == ib->sin.sin_addr.s_addr + && ia->sin.sin_port == ib->sin.sin_port; + default: + abort(); + } +} + +int iaddr_socklen(const union iaddr *ia) +{ + switch (ia->sa.sa_family) { + case AF_INET: return sizeof(ia->sin); + default: abort(); + } +}