From b7e34d6ddeb428361513c9b9b88fa0291beeb7f3 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sat, 5 Mar 2016 22:10:35 +0000
Subject: [PATCH 01/15] Added some comments.
FossilOrigin-Name: 04f80317574a45bfd705dc38137f421eacc055ae76c51f9648f2ca46b27793fd
---
 src/cw/cw.h | 14 +++++++++++++-
 src/cw/lw.h |  4 ++++
 2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/cw/cw.h b/src/cw/cw.h
index 9250514f..817ec953 100644
--- a/src/cw/cw.h
+++ b/src/cw/cw.h
@@ -16,7 +16,6 @@
  */
 
 
-
 /* Use some macros from LWAPP */
 
 /**
@@ -43,9 +42,22 @@
  */
 #define cw_put_data lw_put_data
 
+/**
+ * Put a bstr_t object
+ * see #lw_put_bstr
+ */
 #define cw_put_bstr lw_put_bstr
+
+/**
+ * Put bstr16_t object
+ * see #lw_put_bstr16
+ */
 #define cw_put_bstr16 lw_put_bstr16
 
+/**
+ * Set dword
+ * see #lw_set_dword
+ */
 #define cw_set_dword lw_set_dword
 
 #define cw_get_byte lw_get_byte
diff --git a/src/cw/lw.h b/src/cw/lw.h
index f3e61199..203a78ca 100644
--- a/src/cw/lw.h
+++ b/src/cw/lw.h
@@ -50,6 +50,10 @@
 #define lw_set_word(dst,b) \
 	(*((uint16_t*)(dst)) = htons(w))
 
+/**
+ * Same as #lw_put_dword, but the return value
+ * is unspecified.
+ */
 #define lw_set_dword(dst,dw)\
 	(*((uint32_t*)(dst)) = htonl(dw))
 
From f8f02e05ac2adabad0bc2fd12f7546ae894558de Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 09:04:21 +0000
Subject: [PATCH 02/15] Added documentation, removed contitional ipv6 support.
FossilOrigin-Name: b187e4014bc965bb64296ca3813ffe0e786f9db8061d74cbe505328eacf3128e
---
 src/cw/sock_setport.c | 42 ++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)
diff --git a/src/cw/sock_setport.c b/src/cw/sock_setport.c
index bcd38bba..8ec25d39 100644
--- a/src/cw/sock_setport.c
+++ b/src/cw/sock_setport.c
@@ -1,21 +1,59 @@
+/*
+    This file is part of actube.
+
+    actube is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    libcapwap is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with Foobar.  If not, see .
+
+*/
+
 #include "sock.h"
 
 #include 
 #include 
 
+/**
+ * @file 
+ * @brief implements sock_setport
+ */
+
+/**
+ * @addtogroup SOCK
+ * @{
+ */
+
+/**
+ * Set the port number of a sockaddr
+ * @param addr sockaddr where the port will be set
+ * @param port number
+ * @return 1 if successful, otherwise 0
+ * Ports can only be set for sockaddrs of type AF_INET and AF_INET6
+ */
 int sock_setport(struct sockaddr *addr, int port)
 {
 	switch (addr->sa_family){
 		case AF_INET:
 			((struct sockaddr_in*)addr)->sin_port=htons(port);
 			break;
-#ifdef WITH_IPV6
 		case AF_INET6:
 			((struct sockaddr_in6*)addr)->sin6_port=htonl(port);
 			break;
-#endif
 		default:
 			return 0;
 	}
 	return 1;
 }
+
+/**
+ * @}
+ */
+
From 370476b921f76ef4e83fed37012254eeceb6c3e2 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 09:12:29 +0000
Subject: [PATCH 03/15] Fixed wrong prot size for IPv6
FossilOrigin-Name: b113c728b2a94fa9f99e3267ac2c3ac843269156bca5487018e5e4330f5b9ffe
---
 src/cw/sock_setport.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/cw/sock_setport.c b/src/cw/sock_setport.c
index 8ec25d39..e5df2643 100644
--- a/src/cw/sock_setport.c
+++ b/src/cw/sock_setport.c
@@ -45,7 +45,7 @@ int sock_setport(struct sockaddr *addr, int port)
 			((struct sockaddr_in*)addr)->sin_port=htons(port);
 			break;
 		case AF_INET6:
-			((struct sockaddr_in6*)addr)->sin6_port=htonl(port);
+			((struct sockaddr_in6*)addr)->sin6_port=htons(port);
 			break;
 		default:
 			return 0;
From 2e4eafc44a3fefc65e9af577ba5f8fa0aacb2ae6 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 09:30:04 +0000
Subject: [PATCH 04/15] Added comments, fixed formatting for IPv6 with port
 number.
FossilOrigin-Name: 3811a844e550a8d4095298c5bab3b32012f60cadcdbbc21d2153dbedf8056b96
---
 src/cw/sock_addrtostr.c | 70 +++++++++++++++++++++++++----------------
 1 file changed, 43 insertions(+), 27 deletions(-)
diff --git a/src/cw/sock_addrtostr.c b/src/cw/sock_addrtostr.c
index f4972c43..5dbe6fda 100644
--- a/src/cw/sock_addrtostr.c
+++ b/src/cw/sock_addrtostr.c
@@ -1,7 +1,7 @@
 /*
-    This file is part of libcapwap.
+    This file is part of actube.
 
-    libcapwap is free software: you can redistribute it and/or modify
+    actube is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
@@ -15,6 +15,17 @@
     along with Foobar.  If not, see .
 
 */
+
+/**
+ * @file
+ * @brief implements sock_addrtostr
+ */
+
+/**
+ * @addtogroup sock
+ * @{
+ */
+
 #include 
 #include 
 
@@ -32,40 +43,40 @@
 
 #include "sock.h"
 
-/*
-void sock_hwaddrtostr(const uint8_t *haddr,int len,char *dst)
+/**
+ * Convert a struct sockaddr int to a human readable string.
+ * @param sa sockaddr to convert
+ * @param s Destination buffer
+ * @param maxlen Size of destination buffer
+ * @param addport If true then the port number wil be added to the output
+ * Works only for sockaddrs of type AF_INET, AF_INET6, AF_PACKET, AF_LINK.
+ */
+char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addport)
 {
-	int i;
-	for (i=0; isa_family) {
 		case AF_INET:
-			inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), s, maxlen);
-			port = ((struct sockaddr_in *)sa)->sin_port;
-			if (addport) 
-				sprintf(s,"%s:%i",s,ntohs(port));
+			inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), d, maxlen);
+			if (addport){
+				port = ((struct sockaddr_in *)sa)->sin_port;
+				sprintf(s,"%s:%i",d,ntohs(port));
+			}
 			else
-				sprintf(s,"%s",s);
+				sprintf(s,"%s",d);
 			break;
 
 	        case AF_INET6:
-			inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), s, maxlen);
-			break;
+			inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), d, maxlen);
+			if (addport){
+				port = ((struct sockaddr_in6 *)sa)->sin6_port;
+				sprintf(s,"[%s]:%i",d,ntohs(port));
+			}
+			else
+				sprintf(s,"%s",d);
+	break;
 #ifdef AF_LINK
 		case AF_LINK:
 			{
@@ -99,3 +110,8 @@ char *sock_strsockaddr(const struct sockaddr *sa, char *s, size_t maxlen,int add
 	}
 	return s;
 }
+
+/**
+ * @}
+ */
+
From d0d34deaad94635edae57edf37507f7f52923e0a Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:00:41 +0000
Subject: [PATCH 05/15] Removed some out-commented code, updated license.
FossilOrigin-Name: 7487e615b6426fe0843a5ef243ad76460b8cdc2b17b585f138748eea0e62c0a1
---
 src/cw/conn_send_packet.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)
diff --git a/src/cw/conn_send_packet.c b/src/cw/conn_send_packet.c
index 28e810b1..38261440 100644
--- a/src/cw/conn_send_packet.c
+++ b/src/cw/conn_send_packet.c
@@ -1,7 +1,7 @@
 /*
-    This file is part of libcapwap.
+    This file is part of actube.
 
-    libcapwap is free software: you can redistribute it and/or modify
+    actube is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
@@ -28,14 +28,6 @@
 
 int conn_send_packet(struct conn * conn, const uint8_t * buffer, int len)
 {
-/*
-#ifdef WITH_CW_LOG_DEBUG
-	char addrstr[64];
-	sock_addrtostr((struct sockaddr*)&conn->addr,addrstr,64);
-	cw_log_debug1("Sending packet to %s, len=%d",addrstr,len);
-	cw_log_debug2_dump(buffer,len,"Packet data for packet, sent to %s",addrstr);
-#endif
-*/	
 	int n;
 	while((n=sendto( conn->sock, buffer, len, 0, 
 				(struct sockaddr*)&conn->addr, 
@@ -43,6 +35,8 @@ int conn_send_packet(struct conn * conn, const uint8_t * buffer, int len)
 
 		if(errno == EINTR) 
 			continue;
+
+
 		return n;
         }
 
From 5e58d45233904e771ff4610e4f63750deb44bac4 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:03:55 +0000
Subject: [PATCH 06/15] Added some comments
FossilOrigin-Name: f30fe7913a468e8b2ad80f478a8d2ec45d9cdf5aa0011fd48735ac99b4f73759
---
 src/cw/aciplist.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/src/cw/aciplist.c b/src/cw/aciplist.c
index 45bb65fd..622ff0c5 100644
--- a/src/cw/aciplist.c
+++ b/src/cw/aciplist.c
@@ -16,6 +16,10 @@
 
 */
 
+/**
+ * @file
+ * @brief Implements some aciplist functions
+ */
 
 #include 
 #include 
@@ -69,10 +73,12 @@ static void acip_del(void *d)
 	free(d);
 }
 
+/**
+ * Create a cw_aciplist_t object
+ * @return The created aciplist or NULL if an error has occured.
+ */
 cw_aciplist_t cw_aciplist_create()
 {
 	return  avltree_create(acip_cmp, acip_del);
 }
 
-
- 
From 70e0756a6a55b6bb00b4ac445bb7289ed25df610 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:04:34 +0000
Subject: [PATCH 07/15] Handles now both IPv4 and IPv6 Function should be
 renamed
FossilOrigin-Name: 6a79cd856a810895a4ef8499e210e0fb7f9338e9ce7a1f173daa218e1763535c
---
 src/cw/cw_in_capwap_control_ipv4_address.c | 29 +++++++++++++++++-----
 1 file changed, 23 insertions(+), 6 deletions(-)
diff --git a/src/cw/cw_in_capwap_control_ipv4_address.c b/src/cw/cw_in_capwap_control_ipv4_address.c
index 1e5f49e4..ebe6cb83 100644
--- a/src/cw/cw_in_capwap_control_ipv4_address.c
+++ b/src/cw/cw_in_capwap_control_ipv4_address.c
@@ -36,13 +36,30 @@ int cw_in_capwap_control_ipv4_address(struct conn *conn, struct cw_action_in *a,
 			return 0;
 	}
 
-	struct sockaddr_in addr;
-	memcpy(&addr.sin_addr,data,4);
-	addr.sin_family=AF_INET;
-	sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT);
-	memcpy(&acip->ip,&addr,sizeof(addr));
+	
+	if (a->elem_id == CW_ELEM_CAPWAP_CONTROL_IPV4_ADDRESS) {
+		struct sockaddr_in addr;
+		memcpy(&addr.sin_addr,data,4);
+		addr.sin_family=AF_INET;
+		sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT);
+		memcpy(&acip->ip,&addr,sizeof(addr));
+		acip->wtp_count = cw_get_word(data+4);
+	}
+
+	if (a->elem_id == CW_ELEM_CAPWAP_CONTROL_IPV6_ADDRESS) {
+		struct sockaddr_in6 addr;
+		memset (&addr,0,sizeof(addr));
+		memcpy(&addr.sin6_addr,data,16);
+		addr.sin6_family=AF_INET6;
+		sock_setport((struct sockaddr*)&addr,CAPWAP_CONTROL_PORT);
+		memcpy(&acip->ip,&addr,sizeof(addr));
+		acip->wtp_count = cw_get_word(data+16);
+	}
+
+
+
+
 
-	acip->wtp_count = cw_get_word(data+4);
 	cw_aciplist_replace(list,acip);
 
 
From 2d5c4ab3605e942b25c704e29420dc44573853ba Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:06:23 +0000
Subject: [PATCH 08/15] Added comments
FossilOrigin-Name: cff820c5c88db1039126df959766ef4e9269b2cd01b91c34bd332f0fd33b9dc9
---
 src/cw/dtls_gnutls_bio.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/cw/dtls_gnutls_bio.c b/src/cw/dtls_gnutls_bio.c
index 9ddae9f1..3afc6b16 100644
--- a/src/cw/dtls_gnutls_bio.c
+++ b/src/cw/dtls_gnutls_bio.c
@@ -15,6 +15,13 @@
     along with Foobar.  If not, see .
 
 */
+
+
+/**
+ * @file
+ * @brief DTLS functions specific to gnutls
+ */
+
 #include 
 #include 
 
@@ -42,7 +49,6 @@ ssize_t dtls_gnutls_bio_read(gnutls_transport_ptr_t b, void *out, size_t maxlen)
 
 ssize_t dtls_gnutls_bio_write(gnutls_transport_ptr_t b, const void *data, size_t len)
 {
-
 	struct conn *conn = (struct conn*)b;
 	return dtls_bio_write(conn,data,len);
 }
From e51d715b8b48511039014e7636171142762b7825 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:07:25 +0000
Subject: [PATCH 09/15] re-indented
FossilOrigin-Name: 7973b2fa759f3820acf6a79727e3c8969b5f81b3813a8a076bdd61803d5ad6ee
---
 src/cw/dtls_gnutls_connect.c | 31 ++++++++++++++++---------------
 1 file changed, 16 insertions(+), 15 deletions(-)
diff --git a/src/cw/dtls_gnutls_connect.c b/src/cw/dtls_gnutls_connect.c
index 619ff7d2..a77c8af0 100644
--- a/src/cw/dtls_gnutls_connect.c
+++ b/src/cw/dtls_gnutls_connect.c
@@ -13,36 +13,37 @@
 
 int dtls_gnutls_connect(struct conn *conn)
 {
-	struct dtls_gnutls_data * d;
-	d = dtls_gnutls_data_create(conn,GNUTLS_CLIENT | GNUTLS_DATAGRAM | GNUTLS_NONBLOCK);
+	struct dtls_gnutls_data *d;
+	d = dtls_gnutls_data_create(conn,
+				    GNUTLS_CLIENT | GNUTLS_DATAGRAM | GNUTLS_NONBLOCK);
 
-//	gnutls_dh_set_prime_bits(d->session, 512);
+//      gnutls_dh_set_prime_bits(d->session, 512);
 #if GNUTLS_VERSION_NUMBER >= 0x030100
-	gnutls_handshake_set_timeout(d->session,GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
+	gnutls_handshake_set_timeout(d->session, GNUTLS_DEFAULT_HANDSHAKE_TIMEOUT);
 
-	gnutls_dtls_set_data_mtu(d->session,1500);
+	gnutls_dtls_set_data_mtu(d->session, 1500);
 #endif
-	gnutls_dtls_set_mtu(d->session,1500);
+	gnutls_dtls_set_mtu(d->session, 1500);
 
-	int rc;	
+	int rc;
 	do {
 		rc = gnutls_handshake(d->session);
-	}while (rc==GNUTLS_E_AGAIN);
+	} while (rc == GNUTLS_E_AGAIN);
 
-	
-	if (rc < 0){
-		cw_log(LOG_ERR,"Can't connect: %s",gnutls_strerror(rc));
+
+	if (rc < 0) {
+		cw_log(LOG_ERR, "DTLS (gnutls) Can't connect to %s: %s",
+		       sock_addr2str(&conn->addr), gnutls_strerror(rc));
 		return 0;
 	}
 
 
-	cw_dbg(DBG_DTLS,"Handshake with %s successful",sock_addr2str(&conn->addr));
+	cw_dbg(DBG_DTLS, "Handshake with %s successful", sock_addr2str(&conn->addr));
 
-	conn->dtls_data=d;
+	conn->dtls_data = d;
 	conn->read = dtls_gnutls_read;
 	conn->write = dtls_gnutls_write;
 
-	
+
 	return 1;
 }
-
From 747dc5e1c2468f432f1342a11fc5aa7722f04599 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:07:49 +0000
Subject: [PATCH 10/15] Added comments.
FossilOrigin-Name: aed38b36b4f76bf44e7af2cf877c6fed1026a8ef599e69b567316c960f59037a
---
 src/cw/mavl.h | 4 ++++
 1 file changed, 4 insertions(+)
diff --git a/src/cw/mavl.h b/src/cw/mavl.h
index dbf28f20..64c7b063 100644
--- a/src/cw/mavl.h
+++ b/src/cw/mavl.h
@@ -47,9 +47,13 @@
  * Defines the structure of an AVL Node.
  */
 struct mavlnode {
+	/** Pointer to data, thant belongs to the node */
 	void *data;
+	/** Pointer to left son*/
 	struct mavlnode *left;
+	/** Pointer to right son*/
 	struct mavlnode *right;
+	/** AVL balance */
 	int bal;
 };
 
From 130df27488b324bada8593be613df2c1ecd040c1 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:08:16 +0000
Subject: [PATCH 11/15] Added comments
FossilOrigin-Name: 2aa841059ef11738f97159e92b1e9ae98b304a7a2fce7e98d22a5ca4b3ee0bd0
---
 src/cw/sock.h | 38 ++++++++++++++++++++++++++++++--------
 1 file changed, 30 insertions(+), 8 deletions(-)
diff --git a/src/cw/sock.h b/src/cw/sock.h
index 43faefad..409f2532 100644
--- a/src/cw/sock.h
+++ b/src/cw/sock.h
@@ -1,7 +1,7 @@
 /*
-    This file is part of libcapwap.
+    This file is part of actube.
 
-    libcapwap is free software: you can redistribute it and/or modify
+    actube is free software: you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation, either version 3 of the License, or
     (at your option) any later version.
@@ -16,6 +16,7 @@
 
 */
 
+
 /**
  *@file
  *@breif
@@ -55,7 +56,7 @@ extern int sock_getifaddr(const char *ifname, int family, int type, struct socka
 extern int sock_getifhwaddr(const char *ifname, uint8_t * hwaddr, uint8_t * addrlen);
 extern char *sock_hwaddrtostr(const uint8_t * haddr, int len, char *dst,
 			      const char *separator);
-extern char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen);
+//extern char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen);
 extern int sock_strtoaddr(const char *s, struct sockaddr *saout);
 extern int sock_set_recvtimeout(int sock, int seconds);
 
@@ -74,16 +75,37 @@ extern int sock_getifinfo(const struct sockaddr *addr, char *ifname,
 
 
 
-char *sock_strsockaddr(const struct sockaddr *sa, char *s, size_t maxlen, int addport);
-int sock_parse_ip_address ( const char** ppszText, 
-		unsigned char* abyAddr, int* pnPort, int* pbIsIPv6 );
+char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addport);
+
+
+/**
+ * Convert a sockaddr structure to a human readable string
+ * @param s sockaddr
+ * @return A char* pointer to converted address
+ *
+ * The returned string is pushed on the stack (unnamed variable), so this macro should
+ * only be used as function argument.
+ *
+ * Example:
+ * \code
+   struct sockaddr sa;
+   // Initialize sa ...
+   sprintf("Adress: %s",sock_addr2str(&sa));
+   \endcode 
+ */
+#define sock_addr2str(s) ( sock_addrtostr( (struct sockaddr*)s, (char[64]){0}, 64, 0 ) )
+
+/**
+ * Same as #sock_addr2str, but also the port number is appended to the result
+ * @see #sock_addr2str
+ */
+#define sock_addr2str_p(s) ( sock_addrtostr( (struct sockaddr*)s, (char[64]){0}, 64,1 ) )
 
 
 
-#define sock_addr2str(s) ( sock_strsockaddr( (struct sockaddr*)s, (char[64]){0}, 64,0 ) )
 #define sock_hwaddr2str(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, ":" ) )
 #define sock_hwaddr2idstr(s,l) ( sock_hwaddrtostr( s,l, (char[64]){0}, "" ) )
-#define sock_addrtostr(s,str,n) sock_strsockaddr(s,str,n,1)
+//#define sock_addrtostr(s,str,n) sock_addrtostr(s,str,n,1)
 
 #define sock_addrfamily(addr) ( ((struct sockaddr_storage*)(addr))->ss_family )
 
From eb90a1bcad09e1d70b5eef8215b9c5662e37578d Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:09:56 +0000
Subject: [PATCH 12/15] re-indented
FossilOrigin-Name: 0c65f09d66682d7f92fb37c44d9c7a406ffd59e16623dfee579392a5bc4c25aa
---
 src/cw/sock_addrtostr.c | 75 +++++++++++++++++++++--------------------
 1 file changed, 38 insertions(+), 37 deletions(-)
diff --git a/src/cw/sock_addrtostr.c b/src/cw/sock_addrtostr.c
index 5dbe6fda..30b7fd96 100644
--- a/src/cw/sock_addrtostr.c
+++ b/src/cw/sock_addrtostr.c
@@ -35,10 +35,10 @@
 #include 
 
 #ifdef AF_LINK
-#   include 
+#include 
 #endif
 #ifdef AF_PACKET
-#   include 
+#include 
 #endif
 
 #include "sock.h"
@@ -49,62 +49,64 @@
  * @param s Destination buffer
  * @param maxlen Size of destination buffer
  * @param addport If true then the port number wil be added to the output
+ *
  * Works only for sockaddrs of type AF_INET, AF_INET6, AF_PACKET, AF_LINK.
  */
-char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addport)
+char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen, int addport)
 {
 	char d[maxlen];
 	int port;
 
 
-	switch(sa->sa_family) {
+	switch (sa->sa_family) {
 		case AF_INET:
-			inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), d, maxlen);
-			if (addport){
-				port = ((struct sockaddr_in *)sa)->sin_port;
-				sprintf(s,"%s:%i",d,ntohs(port));
-			}
-			else
-				sprintf(s,"%s",d);
+			inet_ntop(AF_INET, &(((struct sockaddr_in *) sa)->sin_addr), d,
+				  maxlen);
+			if (addport) {
+				port = ((struct sockaddr_in *) sa)->sin_port;
+				sprintf(s, "%s:%i", d, ntohs(port));
+			} else
+				sprintf(s, "%s", d);
 			break;
 
-	        case AF_INET6:
-			inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), d, maxlen);
-			if (addport){
-				port = ((struct sockaddr_in6 *)sa)->sin6_port;
-				sprintf(s,"[%s]:%i",d,ntohs(port));
-			}
-			else
-				sprintf(s,"%s",d);
-	break;
+		case AF_INET6:
+			inet_ntop(AF_INET6, &(((struct sockaddr_in6 *) sa)->sin6_addr), d,
+				  maxlen);
+			if (addport) {
+				port = ((struct sockaddr_in6 *) sa)->sin6_port;
+				sprintf(s, "[%s]:%i", d, ntohs(port));
+			} else
+				sprintf(s, "%s", d);
+			break;
 #ifdef AF_LINK
 		case AF_LINK:
-			{
-				struct sockaddr_dl *sl=(struct sockaddr_dl*)sa;
-				sock_hwaddrtostr(((uint8_t*)sl->sdl_data)+sl->sdl_nlen,sl->sdl_alen,s,":");
+		{
+			struct sockaddr_dl *sl = (struct sockaddr_dl *) sa;
+			sock_hwaddrtostr(((uint8_t *) sl->sdl_data) + sl->sdl_nlen,
+					 sl->sdl_alen, s, ":");
 
-			}
+		}
 			break;
 
-#endif	/* AF_LINLK */
+#endif				/* AF_LINLK */
 
 #ifdef AF_PACKET
 		case AF_PACKET:
-			{
-				int i;
-				char *sp=s;
-				struct sockaddr_ll *sl=(struct sockaddr_ll*)sa;
-				for (i=0; isll_halen-1; i++){
-					sprintf(sp,"%02X:",sl->sll_addr[i]);
-					sp+=3;
-				}
-				sprintf(sp,"%02X",sl->sll_addr[i]);
+		{
+			int i;
+			char *sp = s;
+			struct sockaddr_ll *sl = (struct sockaddr_ll *) sa;
+			for (i = 0; i < sl->sll_halen - 1; i++) {
+				sprintf(sp, "%02X:", sl->sll_addr[i]);
+				sp += 3;
 			}
+			sprintf(sp, "%02X", sl->sll_addr[i]);
+		}
 			break;
-#endif /* AF_PACKET */
+#endif				/* AF_PACKET */
 
 
-        	default:
+		default:
 			strncpy(s, "Unknown AF", maxlen);
 			return NULL;
 	}
@@ -114,4 +116,3 @@ char *sock_addrtostr(const struct sockaddr *sa, char *s, size_t maxlen,int addpo
 /**
  * @}
  */
-
From b96c8d3bf08e6d827efc48609709d3e66027b2ce Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:23:05 +0000
Subject: [PATCH 13/15] Changed to "new" sock_addrtostr.
FossilOrigin-Name: 4514d4f40bed468e001f84182e37529369b1b973c77c35106d40ed0a7b05ae55
---
 src/ac/socklist.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ac/socklist.c b/src/ac/socklist.c
index b18837fb..b9bab9a0 100644
--- a/src/ac/socklist.c
+++ b/src/ac/socklist.c
@@ -264,7 +264,7 @@ int socklist_add_multicast(const char *addr, const char *port, int ac_proto)
 			optlen = sizeof(mreq);
 
 			char sinin[100];
-			sock_addrtostr((struct sockaddr *) sain, sinin, 100);
+			sock_addrtostr((struct sockaddr *) sain, sinin, 100,1);
 
 			if (setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, opt, optlen)
 			    < 0) {
From 70d5986760a6ac25c0f8ba93d8aa62f265beb808 Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:23:34 +0000
Subject: [PATCH 14/15] Changed to sock_addrtostr
FossilOrigin-Name: f14ea1932e4c80b675f6b671dfde15e110abefd8e4e955a17bb9d609eff23354
---
 src/ac/conf.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/ac/conf.c b/src/ac/conf.c
index 1429a5f1..8f155413 100644
--- a/src/ac/conf.c
+++ b/src/ac/conf.c
@@ -389,7 +389,7 @@ static int init_listen_addrs()
 		}
 
 		if (ifa->ifa_addr->sa_family == AF_INET && conf_ipv4) {
-			sock_addrtostr(ifa->ifa_addr, str, 100);
+			sock_addrtostr(ifa->ifa_addr, str, 100,1);
 			*strchr(str, ':') = 0;
 			conf_listen_addrs[ctr] =
 			    (char *) cw_setstr((uint8_t **) & conf_listen_addrs[ctr],
@@ -400,7 +400,7 @@ static int init_listen_addrs()
 		}
 #ifdef WITH_IPV6
 		if (ifa->ifa_addr->sa_family == AF_INET6 && conf_ipv6) {
-			sock_addrtostr(ifa->ifa_addr, str, 100);
+			sock_addrtostr(ifa->ifa_addr, str, 100,1);
 			if (strncmp(str, "fe80:", 5) == 0) {
 				strcat(str, "%");
 				strcat(str, ifa->ifa_name);
@@ -496,7 +496,7 @@ int init_bcast_addrs()
 
 		char str[100];
 		if (ifa->ifa_broadaddr) {
-			sock_addrtostr(ifa->ifa_broadaddr, str, 100);
+			sock_addrtostr(ifa->ifa_broadaddr, str, 100,1);
 			*strchr(str, ':') = 0;
 			stravltree_add(t, str);
 		}
From 22820a911bea88e2e1743c2030600e9c07399e4e Mon Sep 17 00:00:00 2001
From: "7u83@mail.ru" <7u83@mail.ru@noemail.net>
Date: Sun, 6 Mar 2016 10:23:50 +0000
Subject: [PATCH 15/15] Fixed a lot of IPV6 stuff.
FossilOrigin-Name: 30d5fde1afc089a036d5e8aa52211746f6666ffc83fd4b4a9a58e91f50576a00
---
 src/wtp/discovery.c | 11 +++++++++++
 src/wtp/join.c      | 19 +++++++++++--------
 2 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/src/wtp/discovery.c b/src/wtp/discovery.c
index a97a6a8f..c10044cd 100644
--- a/src/wtp/discovery.c
+++ b/src/wtp/discovery.c
@@ -73,6 +73,9 @@ cw_aciplist_t cw_select_ac(struct conn *conn, mbag_t dis)
 
 	DEFINE_AVLITER(i, dis);
 	avliter_foreach(&i){
+
+
+
 		mbag_t ac = ((mbag_item_t *) (avliter_get(&i)))->data;
 
 		char *ac_name = mbag_get_str(ac, CW_ITEM_AC_NAME,NULL);
@@ -92,9 +95,17 @@ printf("nprio: %d\n",priolist->count);
 		cw_aciplist_t acips =
 		    mbag_get_mavl(ac, CW_ITEM_CAPWAP_CONTROL_IP_ADDRESS_LIST);
 
+printf("Number of acips =%d\n",acips->count);
+
+
 		DEFINE_AVLITER(i2, acips);
 		avliter_foreach(&i2){
+
+
 			cw_acip_t *acip = avliter_get(&i2);
+
+printf("The acip: %s\n",sock_addr2str(&acip->ip));
+
 			cw_acip_t *n = malloc(sizeof(cw_acip_t));
 			memcpy(n,acip,sizeof(cw_acip_t));
 			
diff --git a/src/wtp/join.c b/src/wtp/join.c
index e5249db5..3b6136db 100644
--- a/src/wtp/join.c
+++ b/src/wtp/join.c
@@ -102,14 +102,16 @@ int run_join_d(struct sockaddr *sa)
 	int sockfd;
 	int rc;
 
-	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+	sockfd = socket(sa->sa_family, SOCK_DGRAM, 0);
 	if (sockfd == -1) {
 		cw_log(LOG_ERR, "Can't create socket: %s\n", strerror(errno));
 		return -1;
 	}
 	sock_set_recvtimeout(sockfd, 1);
+	conn->sock = sockfd;
+	sock_copyaddr(&conn->addr, sa);
 
-	rc = connect(sockfd, (struct sockaddr *) sa,
+/*	rc = connect(sockfd, (struct sockaddr *) sa,
 		     sock_addrlen((struct sockaddr *) sa));
 
 	if (rc < 0) {
@@ -118,9 +120,7 @@ int run_join_d(struct sockaddr *sa)
 		close(sockfd);
 		return -1;
 	}
-
-	conn->sock = sockfd;
-	sock_copyaddr(&conn->addr, sa);
+*/
 
 	cw_dbg(DBG_DTLS, "Establishing DTLS session with %s", sock_addr2str(sa));
 
@@ -153,7 +153,7 @@ int run_join_d(struct sockaddr *sa)
 	rc = dtls_connect(conn);
 	if (rc != 1) {
 		dtls_shutdown(conn);
-		cw_log(LOG_ERR, "Can't establish DTLS connection to %s",
+		cw_log(LOG_ERR, "Can't establish DTLS connection with %s",
 		       sock_addr2str(sa));
 		close(sockfd);
 		return 0;
@@ -226,12 +226,15 @@ int join()
 
 		cw_acip_t *ip = avliter_get(&ii);
 
+
 		cw_dbg(DBG_INFO, "Going to join CAWAP controller on %s",
-		       sock_addr2str(&ip->ip));
+		       sock_addr2str_p(&ip->ip));
 
 		int rc = run_join_d((struct sockaddr *) &ip->ip);
-		if (!rc)
+
+		if (rc<=0)
 			continue;
+
 		rc = run_join(conn);
 		if (rc) {
 			conn->capwap_state = CW_STATE_CONFIGURE;