]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
Allow changing the Sockaddr in ComboAddress
authorAki Tuomi <cmouse@desteem.org>
Wed, 5 Nov 2014 10:05:29 +0000 (12:05 +0200)
committerAki Tuomi <cmouse@desteem.org>
Wed, 5 Nov 2014 10:05:29 +0000 (12:05 +0200)
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)
   {