X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/cb2c2bfcff87c4d6959fe3ccf47a4b509f933e9c..d98625f4404ba4fca4f395bc72f15d68043d75b4:/server/servutil.c diff --git a/server/servutil.c b/server/servutil.c index 70721396..b6fbf5b8 100644 --- a/server/servutil.c +++ b/server/servutil.c @@ -121,6 +121,30 @@ int mystrieq(const char *x, const char *y) } } +/*----- Address handling --------------------------------------------------*/ + +const struct addrfam aftab[] = { +#define DEF(af) { AF_##af, #af }, + ADDRFAM(DEF) +#undef DEF +}; + +/* --- @afix@ --- * + * + * Arguments: @int af@ = an address family code + * + * Returns: The index of the address family's record in @aftab@, or @-1@. + */ + +int afix(int af) +{ + int i; + + for (i = 0; i < NADDRFAM; i++) + if (af == aftab[i].af) return (i); + return (-1); +} + /* --- @addrsz@ --- * * * Arguments: @const addr *a@ = a network address @@ -136,4 +160,30 @@ socklen_t addrsz(const addr *a) } } +/* --- @getport@, @setport@ --- * + * + * Arguments: @addr *a@ = a network address + * @unsigned port@ = port number to set + * + * Returns: --- + * + * Use: Retrieves or sets the port number in an address structure. + */ + +unsigned getport(addr *a) +{ + switch (a->sa.sa_family) { + case AF_INET: return (ntohs(a->sin.sin_port)); break; + default: abort(); + } +} + +void setport(addr *a, unsigned port) +{ + switch (a->sa.sa_family) { + case AF_INET: a->sin.sin_port = htons(port); break; + default: abort(); + } +} + /*----- That's all, folks -------------------------------------------------*/