[Asterisk-code-review] netsock2: Implementation for ast_sockaddr_from_sockaddr. (asterisk[13])

Jaco Kroon asteriskteam at digium.com
Tue Dec 3 12:41:05 CST 2019


Jaco Kroon has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/13361 )


Change subject: netsock2: Implementation for ast_sockaddr_from_sockaddr.
......................................................................

netsock2: Implementation for ast_sockaddr_from_sockaddr.

sockaddr can be either a sockaddr_in or sockaddr_in6 (as identified by
the sa_family), and will be used to populate ast_sockaddr.

Change-Id: Iee604e96e9096c79b477d6e5ff310cf0b06dae86
Signed-off-by: Jaco Kroon <jaco at uls.co.za>
---
M include/asterisk/netsock2.h
M main/netsock2.c
2 files changed, 33 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/61/13361/1

diff --git a/include/asterisk/netsock2.h b/include/asterisk/netsock2.h
index b6f2858..8b3bfb2 100644
--- a/include/asterisk/netsock2.h
+++ b/include/asterisk/netsock2.h
@@ -727,6 +727,21 @@
 void _ast_sockaddr_from_sin(struct ast_sockaddr *addr, const struct sockaddr_in *sin,
 		const char *file, int line, const char *func);
 
+/*!
+ * \brief Converts a struct sockaddr_in to a struct ast_sockaddr.
+ *
+ * Note that there is an underlying assumption that sockaddr data is valid, more specifically,
+ * if sa_family is set to AF_INET that it's actually a sockaddr_in, and in the case of AF_INET6
+ * a valid sockaddr_in6 structure.
+ *
+ * \param addr
+ * \param sin The sockaddr_in to convert
+ * \return an ast_sockaddr structure
+ */
+#define ast_sockaddr_from_sockaddr(addr,sockaddr)	_ast_sockaddr_from_sockaddr(addr,sockaddr, __FILE__, __LINE__, __PRETTY_FUNCTION__)
+void _ast_sockaddr_from_sockaddr(struct ast_sockaddr *addr, const struct sockaddr *sockaddr,
+		const char *file, int line, const char *func);
+
 /*@}*/
 
 #if defined(__cplusplus) || defined(c_plusplus)
diff --git a/main/netsock2.c b/main/netsock2.c
index 90835c3..7655bcb 100644
--- a/main/netsock2.c
+++ b/main/netsock2.c
@@ -678,3 +678,21 @@
 
 	addr->len = sizeof(*sin);
 }
+
+void _ast_sockaddr_from_sockaddr(struct ast_sockaddr *addr, const struct sockaddr *sockaddr,
+		const char *file, int line, const char *func)
+{
+	switch (sockaddr->sa_family) {
+	case AF_INET:
+		addr->len = sizeof(struct sockaddr_in);
+		break;
+	case AF_INET6:
+		addr->len = sizeof(struct sockaddr_in6);
+		break;
+	default:
+		addr->len = 0;
+		ast_log(__LOG_DEBUG, file, line, func, "Address family is not AF_INET or AF_INET6\n");
+	}
+	if (addr->len)
+		memcpy(&addr->ss, sockaddr, addr->len);
+}

-- 
To view, visit https://gerrit.asterisk.org/c/asterisk/+/13361
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 13
Gerrit-Change-Id: Iee604e96e9096c79b477d6e5ff310cf0b06dae86
Gerrit-Change-Number: 13361
Gerrit-PatchSet: 1
Gerrit-Owner: Jaco Kroon <jaco at uls.co.za>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20191203/212d8fd2/attachment-0001.html>


More information about the asterisk-code-review mailing list