--- /dev/null
+/* This is from the BIND 4.9.4 release, modified to compile by itself */\r
+\r
+/* Copyright (c) 1996 by Internet Software Consortium.\r
+ *\r
+ * Permission to use, copy, modify, and distribute this software for any\r
+ * purpose with or without fee is hereby granted, provided that the above\r
+ * copyright notice and this permission notice appear in all copies.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS\r
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES\r
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE\r
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL\r
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR\r
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\r
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS\r
+ * SOFTWARE.\r
+ */\r
+\r
+#ifndef HAVE_INET_PTON\r
+\r
+#ifdef HAVE_SYS_PARAM_H\r
+#include <sys/param.h>\r
+#endif\r
+#ifdef HAVE_SYS_TYPES_H\r
+#include <sys/types.h>\r
+#endif\r
+#ifdef HAVE_SYS_SOCKET_H\r
+#include <sys/socket.h>\r
+#endif\r
+#ifdef HAVE_NETINET_IN_H\r
+#include <netinet/in.h>\r
+#endif\r
+#ifdef HAVE_ARPA_INET_H\r
+#include <arpa/inet.h>\r
+#endif\r
+#include <string.h>\r
+#include <errno.h>\r
+\r
+#include "inet_pton.h"\r
+\r
+#define IN6ADDRSZ 16\r
+#define INADDRSZ 4\r
+#define INT16SZ 2\r
+\r
+#ifdef WIN32\r
+#include <winsock2.h>\r
+#define EAFNOSUPPORT WSAEAFNOSUPPORT\r
+#endif\r
+\r
+/*\r
+ * WARNING: Don't even consider trying to compile this on a system where\r
+ * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX.\r
+ */\r
+\r
+static int inet_pton4(const char *src, unsigned char *dst);\r
+#ifdef ENABLE_IPV6\r
+static int inet_pton6(const char *src, unsigned char *dst);\r
+#endif\r
+\r
+/* int\r
+ * inet_pton(af, src, dst)\r
+ * convert from presentation format (which usually means ASCII printable)\r
+ * to network format (which is usually some kind of binary format).\r
+ * return:\r
+ * 1 if the address was valid for the specified address family\r
+ * 0 if the address wasn't valid (`dst' is untouched in this case)\r
+ * -1 if some other error occurred (`dst' is untouched in this case, too)\r
+ * author:\r
+ * Paul Vixie, 1996.\r
+ */\r
+int\r
+switch_inet_pton(int af, const char *src, void *dst)\r
+{\r
+ switch (af) {\r
+ case AF_INET:\r
+ return (inet_pton4(src, (unsigned char *)dst));\r
+#ifdef ENABLE_IPV6\r
+#ifndef AF_INET6\r
+#define AF_INET6 (AF_MAX+1) /* just to let this compile */\r
+#endif\r
+ case AF_INET6:\r
+ return (inet_pton6(src, (unsigned char *)dst));\r
+#endif\r
+ default:\r
+ errno = EAFNOSUPPORT;\r
+ return (-1);\r
+ }\r
+ /* NOTREACHED */\r
+}\r
+\r
+/* int\r
+ * inet_pton4(src, dst)\r
+ * like inet_aton() but without all the hexadecimal and shorthand.\r
+ * return:\r
+ * 1 if `src' is a valid dotted quad, else 0.\r
+ * notice:\r
+ * does not touch `dst' unless it's returning 1.\r
+ * author:\r
+ * Paul Vixie, 1996.\r
+ */\r
+static int\r
+inet_pton4(const char *src, unsigned char *dst)\r
+{\r
+ static const char digits[] = "0123456789";\r
+ int saw_digit, octets, ch;\r
+ unsigned char tmp[INADDRSZ], *tp;\r
+\r
+ saw_digit = 0;\r
+ octets = 0;\r
+ tp = tmp;\r
+ *tp = 0;\r
+ while ((ch = *src++) != '\0') {\r
+ const char *pch;\r
+\r
+ if ((pch = strchr(digits, ch)) != NULL) {\r
+ unsigned int val = *tp * 10 + (unsigned int)(pch - digits);\r
+\r
+ if (val > 255)\r
+ return (0);\r
+ *tp = (unsigned char)val;\r
+ if (! saw_digit) {\r
+ if (++octets > 4)\r
+ return (0);\r
+ saw_digit = 1;\r
+ }\r
+ } else if (ch == '.' && saw_digit) {\r
+ if (octets == 4)\r
+ return (0);\r
+ *++tp = 0;\r
+ saw_digit = 0;\r
+ } else\r
+ return (0);\r
+ }\r
+ if (octets < 4)\r
+ return (0);\r
+ /* bcopy(tmp, dst, INADDRSZ); */\r
+ memcpy(dst, tmp, INADDRSZ);\r
+ return (1);\r
+}\r
+\r
+#ifdef ENABLE_IPV6\r
+/* int\r
+ * inet_pton6(src, dst)\r
+ * convert presentation level address to network order binary form.\r
+ * return:\r
+ * 1 if `src' is a valid [RFC1884 2.2] address, else 0.\r
+ * notice:\r
+ * (1) does not touch `dst' unless it's returning 1.\r
+ * (2) :: in a full address is silently ignored.\r
+ * credit:\r
+ * inspired by Mark Andrews.\r
+ * author:\r
+ * Paul Vixie, 1996.\r
+ */\r
+static int\r
+inet_pton6(const char *src, unsigned char *dst)\r
+{\r
+ static const char xdigits_l[] = "0123456789abcdef",\r
+ xdigits_u[] = "0123456789ABCDEF";\r
+ unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;\r
+ const char *xdigits, *curtok;\r
+ int ch, saw_xdigit;\r
+ unsigned int val;\r
+\r
+ memset((tp = tmp), 0, IN6ADDRSZ);\r
+ endp = tp + IN6ADDRSZ;\r
+ colonp = NULL;\r
+ /* Leading :: requires some special handling. */\r
+ if (*src == ':')\r
+ if (*++src != ':')\r
+ return (0);\r
+ curtok = src;\r
+ saw_xdigit = 0;\r
+ val = 0;\r
+ while ((ch = *src++) != '\0') {\r
+ const char *pch;\r
+\r
+ if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)\r
+ pch = strchr((xdigits = xdigits_u), ch);\r
+ if (pch != NULL) {\r
+ val <<= 4;\r
+ val |= (pch - xdigits);\r
+ if (val > 0xffff)\r
+ return (0);\r
+ saw_xdigit = 1;\r
+ continue;\r
+ }\r
+ if (ch == ':') {\r
+ curtok = src;\r
+ if (!saw_xdigit) {\r
+ if (colonp)\r
+ return (0);\r
+ colonp = tp;\r
+ continue;\r
+ }\r
+ if (tp + INT16SZ > endp)\r
+ return (0);\r
+ *tp++ = (unsigned char) (val >> 8) & 0xff;\r
+ *tp++ = (unsigned char) val & 0xff;\r
+ saw_xdigit = 0;\r
+ val = 0;\r
+ continue;\r
+ }\r
+ if (ch == '.' && ((tp + INADDRSZ) <= endp) &&\r
+ inet_pton4(curtok, tp) > 0) {\r
+ tp += INADDRSZ;\r
+ saw_xdigit = 0;\r
+ break; /* '\0' was seen by inet_pton4(). */\r
+ }\r
+ return (0);\r
+ }\r
+ if (saw_xdigit) {\r
+ if (tp + INT16SZ > endp)\r
+ return (0);\r
+ *tp++ = (unsigned char) (val >> 8) & 0xff;\r
+ *tp++ = (unsigned char) val & 0xff;\r
+ }\r
+ if (colonp != NULL) {\r
+ /*\r
+ * Since some memmove()'s erroneously fail to handle\r
+ * overlapping regions, we'll do the shift by hand.\r
+ */\r
+ const int n = tp - colonp;\r
+ int i;\r
+\r
+ for (i = 1; i <= n; i++) {\r
+ endp[- i] = colonp[n - i];\r
+ colonp[n - i] = 0;\r
+ }\r
+ tp = endp;\r
+ }\r
+ if (tp != endp)\r
+ return (0);\r
+ /* bcopy(tmp, dst, IN6ADDRSZ); */\r
+ memcpy(dst, tmp, IN6ADDRSZ);\r
+ return (1);\r
+}\r
+#endif /* ENABLE_IPV6 */\r
+\r
+#endif /* HAVE_INET_PTON */\r
vm_check_state = VM_CHECK_MENU;
} else if (!strcmp(input, profile->choose_greeting_key)) {
int num;
- switch_input_args_t args = { 0 };
- args.input_callback = cancel_on_dtmf;
+ switch_input_args_t greeting_args = { 0 };
+ greeting_args.input_callback = cancel_on_dtmf;
TRY_CODE(vm_macro_get(session, VM_CHOOSE_GREETING_MACRO, key_buf, input, sizeof(input), 1, "", &term, timeout));
} else {
switch_file_handle_t fh = { 0 };
memset(&fh, 0, sizeof(fh));
- args.input_callback = control_playback;
+ greeting_args.input_callback = control_playback;
memset(&cc, 0, sizeof(cc));
cc.profile = profile;
cc.fh = &fh;
cc.noexit = 1;
- args.buf = &cc;
- status = switch_ivr_play_file(session, NULL, file_path, &args);
+ greeting_args.buf = &cc;
+ status = switch_ivr_play_file(session, NULL, file_path, &greeting_args);
}
if (status != SWITCH_STATUS_SUCCESS && status != SWITCH_STATUS_BREAK) {
TRY_CODE(switch_ivr_phrase_macro(session, VM_CHOOSE_GREETING_FAIL_MACRO, NULL, NULL, NULL));
switch_memory_pool_t *pool;
};
+#ifndef WIN32
+int switch_inet_pton(int af, const char *src, void *dst)
+{
+ return inet_pton(af, src, dst);
+}
+#endif
SWITCH_DECLARE(switch_status_t) switch_network_list_create(switch_network_list_t **list, switch_bool_t default_type, switch_memory_pool_t *pool)
{
int ip, mask;
switch_network_node_t *node;
- inet_pton(AF_INET, host, &ip);
- inet_pton(AF_INET, mask_str, &mask);
+ switch_inet_pton(AF_INET, host, &ip);
+ switch_inet_pton(AF_INET, mask_str, &mask);
node = switch_core_alloc(list->pool, sizeof(*node));
}
bits = atoi(bit_str);
- inet_pton(AF_INET, host, ip);
+ switch_inet_pton(AF_INET, host, ip);
*mask = 0xFFFFFFFF & ~(0xFFFFFFFF << bits);
*bitp = bits;
memset(&remote, 0, sizeof(struct sockaddr_in6));
remote.sin6_family = AF_INET6;
- inet_pton(AF_INET6, buf, &remote.sin6_addr);
+ switch_inet_pton(AF_INET6, buf, &remote.sin6_addr);
remote.sin6_port = htons(4242);
memset(&iface_out, 0, sizeof(iface_out));