]> git.meshlink.io Git - meshlink/commitdiff
Utility functions to get string representation of sockaddr components.
authorAaron Krebs <aaron.krebs@everbase.net>
Wed, 30 Jul 2014 15:44:23 +0000 (17:44 +0200)
committerAaron Krebs <aaron.krebs@everbase.net>
Wed, 30 Jul 2014 15:44:23 +0000 (17:44 +0200)
src/utils.c
src/utils.h

index e45e5942d8a477a82e08924ba59e727c1feca4ff..0f7b00cc7949807aa1ce4d2a39577049c3e4dc6e 100644 (file)
@@ -178,3 +178,51 @@ unsigned int bitfield_to_int(const void *bitfield, size_t size) {
        memcpy(&value, bitfield, size);
        return value;
 }
+
+/* Write IP address from sockaddr to string.
+ * Returns NULL on error.
+ */
+char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen)
+{
+       switch(sa->sa_family) {
+               case AF_INET:
+                       inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr),
+                               s, maxlen);
+                       break;
+
+               case AF_INET6:
+                       inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr),
+                               s, maxlen);
+                       break;
+
+               default:
+                       strncpy(s, "Unknown AF", maxlen);
+                       return NULL;
+       }
+
+       return s;
+}
+
+/* Write port from sockaddr to string.
+ * Returns NULL on error.
+ */
+char *get_port_str(const struct sockaddr *sa, char *s, size_t maxlen)
+{
+       switch(sa->sa_family) {
+               case AF_INET:
+                       snprintf(s, maxlen, "%d",
+                               ntohs(((struct sockaddr_in*)sa)->sin_port));
+                       break;
+
+               case AF_INET6:
+                       snprintf(s, maxlen, "%d",
+                               ntohs(((struct sockaddr_in6*)sa)->sin6_port));
+                       break;
+
+               default:
+                       strncpy(s, "Unknown AF", maxlen);
+                       return NULL;
+       }
+
+       return s;
+}
index 1ea1026a52303bfa82681eb1dc025eb45a323a7c..c0b677fcccbef542069800b916bf625e020308f9 100644 (file)
@@ -47,4 +47,7 @@ extern const char *winerror(int);
 
 extern unsigned int bitfield_to_int(const void *bitfield, size_t size);
 
+extern char *get_ip_str(const struct sockaddr *sa, char *s, size_t maxlen);
+extern char *get_port_str(const struct sockaddr *sa, char *s, size_t maxlen);
+
 #endif /* __MESHLINK_UTILS_H__ */