Annotation of embedaddon/miniupnpd/upnputils.c, revision 1.1.1.1

1.1       misho       1: /* $Id: upnputils.c,v 1.3 2011/05/20 09:42:23 nanard Exp $ */
                      2: /* MiniUPnP project
                      3:  * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
                      4:  * (c) 2006-2011 Thomas Bernard
                      5:  * This software is subject to the conditions detailed
                      6:  * in the LICENCE file provided within the distribution */
                      7: 
                      8: #include "config.h"
                      9: 
                     10: #include <stdio.h>
                     11: #include <sys/types.h>
                     12: #include <sys/socket.h>
                     13: #include <netinet/in.h>
                     14: #include <arpa/inet.h>
                     15: #ifdef AF_LINK
                     16: #include <net/if_dl.h>
                     17: #endif
                     18: 
                     19: #include "upnputils.h"
                     20: 
                     21: int
                     22: sockaddr_to_string(const struct sockaddr * addr, char * str, size_t size)
                     23: {
                     24:        char buffer[64];
                     25:        unsigned short port = 0;
                     26:        int n = -1;
                     27: 
                     28:        switch(addr->sa_family)
                     29:        {
                     30:        case AF_INET6:
                     31:                inet_ntop(addr->sa_family,
                     32:                          &((struct sockaddr_in6 *)addr)->sin6_addr,
                     33:                          buffer, sizeof(buffer));
                     34:                port = ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
                     35:                n = snprintf(str, size, "[%s]:%hu", buffer, port);
                     36:                break;
                     37:        case AF_INET:
                     38:                inet_ntop(addr->sa_family,
                     39:                          &((struct sockaddr_in *)addr)->sin_addr,
                     40:                          buffer, sizeof(buffer));
                     41:                port = ntohs(((struct sockaddr_in *)addr)->sin_port);
                     42:                n = snprintf(str, size, "%s:%hu", buffer, port);
                     43:                break;
                     44: #ifdef AF_LINK
                     45:        case AF_LINK:
                     46:                {
                     47:                        struct sockaddr_dl * sdl = (struct sockaddr_dl *)addr;
                     48:                        n = snprintf(str, size, "index=%hu type=%d %s",
                     49:                                     sdl->sdl_index, sdl->sdl_type,
                     50:                                     link_ntoa(sdl));
                     51:                }
                     52:                break;
                     53: #endif
                     54:        default:
                     55:                n = snprintf(str, size, "unknown address family %d", addr->sa_family);
                     56: #if 0
                     57:                n = snprintf(str, size, "unknown address family %d "
                     58:                             "%02x %02x %02x %02x %02x %02x %02x %02x",
                     59:                             addr->sa_family,
                     60:                             addr->sa_data[0], addr->sa_data[1], (unsigned)addr->sa_data[2], addr->sa_data[3],
                     61:                             addr->sa_data[4], addr->sa_data[5], (unsigned)addr->sa_data[6], addr->sa_data[7]);
                     62: #endif
                     63:        }
                     64:        return n;
                     65: }
                     66: 
                     67: 
                     68: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>