Bläddra i källkod

BAddr: add functions which return addresses

ambrop7 12 år sedan
förälder
incheckning
77013d347b
1 ändrade filer med 77 tillägg och 26 borttagningar
  1. 77 26
      system/BAddr.h

+ 77 - 26
system/BAddr.h

@@ -130,28 +130,52 @@ typedef struct {
 } BAddr;
 
 /**
- * Initializes an invalid address.
+ * Makes an invalid address.
  */
-static void BAddr_InitNone (BAddr *addr);
+static BAddr BAddr_MakeNone (void);
 
 /**
- * Initializes an IPv4 address.
+ * Makes an IPv4 address.
  *
- * @param addr the object
  * @param ip IP address in network byte order
  * @param port port number in network byte order
  */
-static void BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port);
+static BAddr BAddr_MakeIPv4 (uint32_t ip, uint16_t port);
 
 /**
- * Initializes an IPv6 address.
+ * Makes an IPv6 address.
  *
- * @param addr the object
- * @param ip 16-byte IP address in network byte order
+ * @param ip IP address (16 bytes)
  * @param port port number in network byte order
  */
+static BAddr BAddr_MakeIPv6 (const uint8_t *ip, uint16_t port);
+
+/**
+ * Makes an address from a BIPAddr and port number.
+ *
+ * @param ipaddr the BIPAddr
+ * @param port port number in network byte order
+ */
+static BAddr BAddr_MakeFromIpaddrAndPort (BIPAddr ipaddr, uint16_t port);
+
+/**
+ * Deprecated, use BAddr_MakeNone.
+ */
+static void BAddr_InitNone (BAddr *addr);
+
+/**
+ * Deprecated, use BAddr_MakeIPv4.
+ */
+static void BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port);
+
+/**
+ * Deprecated, use BAddr_MakeIPv6.
+ */
 static void BAddr_InitIPv6 (BAddr *addr, uint8_t *ip, uint16_t port);
 
+/**
+ * Deprecated, use BAddr_MakeFromIpaddrAndPort.
+ */
 static void BAddr_InitFromIpaddrAndPort (BAddr *addr, BIPAddr ipaddr, uint16_t port);
 
 /**
@@ -459,43 +483,70 @@ void BIPAddr_Print (BIPAddr *addr, char *out)
     }
 }
 
-void BAddr_InitNone (BAddr *addr)
+BAddr BAddr_MakeNone (void)
 {
-    addr->type = BADDR_TYPE_NONE;
+    BAddr addr;
+    addr.type = BADDR_TYPE_NONE;
+    return addr;
 }
 
-void BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port)
+BAddr BAddr_MakeIPv4 (uint32_t ip, uint16_t port)
 {
-    addr->type = BADDR_TYPE_IPV4;
-    addr->ipv4.ip = ip;
-    addr->ipv4.port = port;
+    BAddr addr;
+    addr.type = BADDR_TYPE_IPV4;
+    addr.ipv4.ip = ip;
+    addr.ipv4.port = port;
+    return addr;
 }
 
-void BAddr_InitIPv6 (BAddr *addr, uint8_t *ip, uint16_t port)
+BAddr BAddr_MakeIPv6 (const uint8_t *ip, uint16_t port)
 {
-    addr->type = BADDR_TYPE_IPV6;
-    memcpy(addr->ipv6.ip, ip, 16);
-    addr->ipv6.port = port;
+    BAddr addr;
+    addr.type = BADDR_TYPE_IPV6;
+    memcpy(addr.ipv6.ip, ip, 16);
+    addr.ipv6.port = port;
+    return addr;
 }
 
-void BAddr_InitFromIpaddrAndPort (BAddr *addr, BIPAddr ipaddr, uint16_t port)
+BAddr BAddr_MakeFromIpaddrAndPort (BIPAddr ipaddr, uint16_t port)
 {
     BIPAddr_Assert(&ipaddr);
     
     switch (ipaddr.type) {
         case BADDR_TYPE_NONE:
-            BAddr_InitNone(addr);
-            break;
+            return BAddr_MakeNone();
         case BADDR_TYPE_IPV4:
-            BAddr_InitIPv4(addr, ipaddr.ipv4, port);
-            break;
+            return BAddr_MakeIPv4(ipaddr.ipv4, port);
         case BADDR_TYPE_IPV6:
-            BAddr_InitIPv6(addr, ipaddr.ipv6, port);
-            break;
-        default: ASSERT(0);
+            return BAddr_MakeIPv6(ipaddr.ipv6, port);
+        default:
+            ASSERT(0);
+            return BAddr_MakeNone();
     }
 }
 
+void BAddr_InitNone (BAddr *addr)
+{
+    *addr = BAddr_MakeNone();
+}
+
+void BAddr_InitIPv4 (BAddr *addr, uint32_t ip, uint16_t port)
+{
+    *addr = BAddr_MakeIPv4(ip, port);
+}
+
+void BAddr_InitIPv6 (BAddr *addr, uint8_t *ip, uint16_t port)
+{
+    *addr = BAddr_MakeIPv6(ip, port);
+}
+
+void BAddr_InitFromIpaddrAndPort (BAddr *addr, BIPAddr ipaddr, uint16_t port)
+{
+    BIPAddr_Assert(&ipaddr);
+    
+    *addr = BAddr_MakeFromIpaddrAndPort(ipaddr, port);
+}
+
 #ifdef BADVPN_LINUX
 
 void BAddr_InitPacket (BAddr *addr, uint16_t phys_proto, int interface_index, int header_type, int packet_type, uint8_t *phys_addr)