summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/asterisk/netsock.h2
-rw-r--r--include/asterisk/res_pjsip_session.h2
-rw-r--r--main/netsock.c103
-rw-r--r--main/utils.c107
4 files changed, 110 insertions, 104 deletions
diff --git a/include/asterisk/netsock.h b/include/asterisk/netsock.h
index f85bd381a..bd80072f5 100644
--- a/include/asterisk/netsock.h
+++ b/include/asterisk/netsock.h
@@ -19,6 +19,8 @@
/*! \file
* \brief Network socket handling
+ *
+ * \deprecated Use netsock2.h instead
*/
#ifndef _ASTERISK_NETSOCK_H
diff --git a/include/asterisk/res_pjsip_session.h b/include/asterisk/res_pjsip_session.h
index 5a07137dc..01c63db66 100644
--- a/include/asterisk/res_pjsip_session.h
+++ b/include/asterisk/res_pjsip_session.h
@@ -25,7 +25,7 @@
/* Needed for AST_MAX_EXTENSION constant */
#include "asterisk/channel.h"
/* Needed for ast_sockaddr struct */
-#include "asterisk/netsock.h"
+#include "asterisk/netsock2.h"
/* Needed for ast_sdp_srtp struct */
#include "asterisk/sdp_srtp.h"
diff --git a/main/netsock.c b/main/netsock.c
index cf4c792af..c11f14a89 100644
--- a/main/netsock.c
+++ b/main/netsock.c
@@ -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:", (unsigned)eid->eid[x]);
- s += 3;
- }
- sprintf(s, "%02x", (unsigned)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%d#%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));
-}
diff --git a/main/utils.c b/main/utils.c
index bb8559d8c..467f9f13c 100644
--- a/main/utils.c
+++ b/main/utils.c
@@ -2548,3 +2548,110 @@ void __ast_assert_failed(int condition, const char *condition_str, const char *f
ast_do_crash();
}
#endif /* defined(AST_DEVMODE) */
+
+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:", (unsigned)eid->eid[x]);
+ s += 3;
+ }
+ sprintf(s, "%02x", (unsigned)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%d#%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));
+}