]> granicus.if.org Git - pdns/commitdiff
Allow changing the Sockaddr in ComboAddress
authorAki Tuomi <cmouse@desteem.org>
Wed, 5 Nov 2014 10:05:29 +0000 (12:05 +0200)
committerRuben Kerkhof <ruben@rubenkerkhof.com>
Tue, 20 Jan 2015 20:32:24 +0000 (21:32 +0100)
(cherry picked from commit a7360cd9e1daeb99e0d0632b807e90fc34bedb65)

pdns/iputils.hh

index 9d0aa937588d7351db478af96cbcc696bd23c8c5..c7e0814888b26294dc198df900a2742e162cb3ae 100644 (file)
@@ -110,6 +110,23 @@ union ComboAddress {
     sin4.sin_port=0;
   }
 
+  ComboAddress(const struct sockaddr *sa, socklen_t salen) {
+    setSockaddr(sa, salen);
+  };
+
+  ComboAddress(const struct sockaddr_in6 *sa) {
+    setSockaddr((const struct sockaddr*)sa, sizeof(struct sockaddr_in6));
+  };
+
+  ComboAddress(const struct sockaddr_in *sa) {
+    setSockaddr((const struct sockaddr*)sa, sizeof(struct sockaddr_in));
+  };
+
+  void setSockaddr(const struct sockaddr *sa, socklen_t salen) {
+    if (salen > sizeof(struct sockaddr_in6)) throw PDNSException("ComboAddress can't handle other than sockaddr_in or sockaddr_in6");
+    memcpy(this, sa, salen);
+  }
+
   // 'port' sets a default value in case 'str' does not set a port
   explicit ComboAddress(const string& str, uint16_t port=0)
   {