Annotation of embedaddon/miniupnpd/miniupnpc-async/upnputils.c, revision 1.1
1.1 ! misho 1: /* $Id: upnputils.c,v 1.1 2013/09/07 06:45:39 nanard Exp $ */
! 2: /* MiniUPnP project
! 3: * http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
! 4: * (c) 2006-2013 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 <string.h>
! 12: #include <syslog.h>
! 13: #include <unistd.h>
! 14: #include <fcntl.h>
! 15: #include <sys/types.h>
! 16: #include <sys/socket.h>
! 17: #include <netinet/in.h>
! 18: #include <arpa/inet.h>
! 19: #ifdef AF_LINK
! 20: #include <net/if_dl.h>
! 21: #endif
! 22:
! 23: #include "upnputils.h"
! 24:
! 25: int
! 26: sockaddr_to_string(const struct sockaddr * addr, char * str, size_t size)
! 27: {
! 28: char buffer[64];
! 29: unsigned short port = 0;
! 30: int n = -1;
! 31:
! 32: switch(addr->sa_family)
! 33: {
! 34: case AF_INET6:
! 35: inet_ntop(addr->sa_family,
! 36: &((struct sockaddr_in6 *)addr)->sin6_addr,
! 37: buffer, sizeof(buffer));
! 38: port = ntohs(((struct sockaddr_in6 *)addr)->sin6_port);
! 39: n = snprintf(str, size, "[%s]:%hu", buffer, port);
! 40: break;
! 41: case AF_INET:
! 42: inet_ntop(addr->sa_family,
! 43: &((struct sockaddr_in *)addr)->sin_addr,
! 44: buffer, sizeof(buffer));
! 45: port = ntohs(((struct sockaddr_in *)addr)->sin_port);
! 46: n = snprintf(str, size, "%s:%hu", buffer, port);
! 47: break;
! 48: #ifdef AF_LINK
! 49: #if defined(__sun)
! 50: /* solaris does not seem to have link_ntoa */
! 51: /* #define link_ntoa _link_ntoa */
! 52: #define link_ntoa(x) "dummy-link_ntoa"
! 53: #endif
! 54: case AF_LINK:
! 55: {
! 56: struct sockaddr_dl * sdl = (struct sockaddr_dl *)addr;
! 57: n = snprintf(str, size, "index=%hu type=%d %s",
! 58: sdl->sdl_index, sdl->sdl_type,
! 59: link_ntoa(sdl));
! 60: }
! 61: break;
! 62: #endif
! 63: default:
! 64: n = snprintf(str, size, "unknown address family %d", addr->sa_family);
! 65: #if 0
! 66: n = snprintf(str, size, "unknown address family %d "
! 67: "%02x %02x %02x %02x %02x %02x %02x %02x",
! 68: addr->sa_family,
! 69: addr->sa_data[0], addr->sa_data[1], (unsigned)addr->sa_data[2], addr->sa_data[3],
! 70: addr->sa_data[4], addr->sa_data[5], (unsigned)addr->sa_data[6], addr->sa_data[7]);
! 71: #endif
! 72: }
! 73: return n;
! 74: }
! 75:
! 76:
! 77: int
! 78: set_non_blocking(int fd)
! 79: {
! 80: int flags = fcntl(fd, F_GETFL);
! 81: if(flags < 0)
! 82: return 0;
! 83: if(fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0)
! 84: return 0;
! 85: return 1;
! 86: }
! 87:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>