git migration: Refactor the ASTERISK_FILE_VERSION macro
[asterisk/asterisk.git] / main / netsock.c
index 2201f26..568add4 100644 (file)
  * \author Mark Spencer <markster@digium.com>
  */
 
+/*** MODULEINFO
+       <support_level>core</support_level>
+ ***/
+
 #include "asterisk.h"
 
-ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
+ASTERISK_REGISTER_FILE()
 
 #ifndef __linux__
 #if defined(__OpenBSD__) || defined(__NetBSD__) || defined(__FreeBSD__) || defined(__Darwin__) || defined(__GLIBC__)
@@ -113,7 +117,7 @@ struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct i
        const int reuseFlag = 1;
 
        /* Make a UDP socket */
-       netsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
+       netsocket = socket(ast_sockaddr_is_ipv6(bindaddr) ? AST_AF_INET6 : AST_AF_INET, SOCK_DGRAM, IPPROTO_IP);
 
        if (netsocket < 0) {
                ast_log(LOG_ERROR, "Unable to create network socket: %s\n", strerror(errno));
@@ -151,7 +155,7 @@ struct ast_netsock *ast_netsock_bindaddr(struct ast_netsock_list *list, struct i
        ns->ioc = ioc;
        ns->sockfd = netsocket;
        ns->data = data;
-       memcpy(&ns->bindaddr, bindaddr, sizeof(ns->bindaddr));
+       ast_sockaddr_copy(&ns->bindaddr, bindaddr);
        ASTOBJ_CONTAINER_LINK(list, ns);
 
        return ns;
@@ -167,10 +171,6 @@ struct ast_netsock *ast_netsock_bind(struct ast_netsock_list *list, struct io_co
        struct ast_sockaddr addr;
 
        if (ast_sockaddr_parse(&addr, bindinfo, 0)) {
-               if (!ast_sockaddr_is_ipv4(&addr)) {
-                       ast_log(LOG_WARNING, "Only IPv4 addresses are supported at this time.\n");
-                       return NULL;
-               }
 
                if (!ast_sockaddr_port(&addr)) {
                        ast_sockaddr_set_port(&addr, defaultport);
@@ -201,106 +201,3 @@ void ast_netsock_unref(struct ast_netsock *ns)
 {
        ASTOBJ_UNREF(ns, ast_netsock_destroy);
 }
-
-char *ast_eid_to_str(char *s, int maxlen, struct ast_eid *eid)
-{
-       int x;
-       char *os = s;
-       if (maxlen < 18) {
-               if (s && (maxlen > 0))
-                       *s = '\0';
-       } else {
-               for (x = 0; x < 5; x++) {
-                       sprintf(s, "%02x:", eid->eid[x]);
-                       s += 3;
-               }
-               sprintf(s, "%02x", eid->eid[5]);
-       }
-       return os;
-}
-
-void ast_set_default_eid(struct ast_eid *eid)
-{
-#if defined(SIOCGIFHWADDR) && defined(HAVE_STRUCT_IFREQ_IFR_IFRU_IFRU_HWADDR)
-       int s, x = 0;
-       char eid_str[20];
-       struct ifreq ifr;
-       static const unsigned int MAXIF = 10;
-
-       s = socket(AF_INET, SOCK_STREAM, 0);
-       if (s < 0)
-               return;
-       for (x = 0; x < MAXIF; x++) {
-               static const char *prefixes[] = { "eth", "em" };
-               unsigned int i;
-
-               for (i = 0; i < ARRAY_LEN(prefixes); i++) {
-                       memset(&ifr, 0, sizeof(ifr));
-                       snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s%d", prefixes[i], x);
-                       if (!ioctl(s, SIOCGIFHWADDR, &ifr)) {
-                               break;
-                       }
-               }
-
-               if (i == ARRAY_LEN(prefixes)) {
-                       /* Try pciX#[1..N] */
-                       for (i = 0; i < MAXIF; i++) {
-                               memset(&ifr, 0, sizeof(ifr));
-                               snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "pci%u#%u", x, i);
-                               if (!ioctl(s, SIOCGIFHWADDR, &ifr)) {
-                                       break;
-                               }
-                       }
-                       if (i == MAXIF) {
-                               continue;
-                       }
-               }
-
-               memcpy(eid, ((unsigned char *)&ifr.ifr_hwaddr) + 2, sizeof(*eid));
-               ast_debug(1, "Seeding global EID '%s' from '%s' using 'siocgifhwaddr'\n", ast_eid_to_str(eid_str, sizeof(eid_str), eid), ifr.ifr_name);
-               close(s);
-               return;
-       }
-       close(s);
-#else
-#if defined(ifa_broadaddr) && !defined(SOLARIS)
-       char eid_str[20];
-       struct ifaddrs *ifap;
-
-       if (getifaddrs(&ifap) == 0) {
-               struct ifaddrs *p;
-               for (p = ifap; p; p = p->ifa_next) {
-                       if ((p->ifa_addr->sa_family == AF_LINK) && !(p->ifa_flags & IFF_LOOPBACK) && (p->ifa_flags & IFF_RUNNING)) {
-                               struct sockaddr_dl* sdp = (struct sockaddr_dl*) p->ifa_addr;
-                               memcpy(&(eid->eid), sdp->sdl_data + sdp->sdl_nlen, 6);
-                               ast_debug(1, "Seeding global EID '%s' from '%s' using 'getifaddrs'\n", ast_eid_to_str(eid_str, sizeof(eid_str), eid), p->ifa_name);
-                               freeifaddrs(ifap);
-                               return;
-                       }
-               }
-               freeifaddrs(ifap);
-       }
-#endif
-#endif
-       ast_debug(1, "No ethernet interface found for seeding global EID. You will have to set it manually.\n");
-}
-
-int ast_str_to_eid(struct ast_eid *eid, const char *s)
-{
-       unsigned int eid_int[6];
-       int x;
-
-       if (sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x", &eid_int[0], &eid_int[1], &eid_int[2],
-                &eid_int[3], &eid_int[4], &eid_int[5]) != 6)
-                       return -1;
-
-       for (x = 0; x < 6; x++)
-               eid->eid[x] = eid_int[x];
-
-       return 0;
-}
-
-int ast_eid_cmp(const struct ast_eid *eid1, const struct ast_eid *eid2)
-{
-       return memcmp(eid1, eid2, sizeof(*eid1));
-}