More ticket #531: added user_data parameter in activesocket creation API to make it more robust against programming errors

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1986 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjlib/include/pj/activesock.h b/pjlib/include/pj/activesock.h
index 056890f..e2213fd 100644
--- a/pjlib/include/pj/activesock.h
+++ b/pjlib/include/pj/activesock.h
@@ -227,6 +227,8 @@
  *			the default values will be used.
  * @param cb		Pointer to structure containing application
  *			callbacks.
+ * @param user_data	Arbitrary user data to be associated with this
+ *			active socket.
  * @param p_asock	Pointer to receive the active socket instance.
  *
  * @return		PJ_SUCCESS if the operation has been successful,
@@ -238,6 +240,7 @@
 					  const pj_activesock_cfg *opt,
 					  pj_ioqueue_t *ioqueue,
 					  const pj_activesock_cb *cb,
+					  void *user_data,
 					  pj_activesock_t **p_asock);
 
 /**
@@ -253,6 +256,8 @@
  *			the default values will be used.
  * @param cb		Pointer to structure containing application
  *			callbacks.
+ * @param user_data	Arbitrary user data to be associated with this
+ *			active socket.
  * @param p_asock	Pointer to receive the active socket instance.
  * @param bound_addr	If this argument is specified, it will be filled with
  *			the bound address on return.
@@ -265,6 +270,7 @@
 					      const pj_activesock_cfg *opt,
 					      pj_ioqueue_t *ioqueue,
 					      const pj_activesock_cb *cb,
+					      void *user_data,
 					      pj_activesock_t **p_asock,
 					      pj_sockaddr *bound_addr);
 
diff --git a/pjlib/src/pj/activesock.c b/pjlib/src/pj/activesock.c
index 112ca5f..8e098ed 100644
--- a/pjlib/src/pj/activesock.c
+++ b/pjlib/src/pj/activesock.c
@@ -97,6 +97,7 @@
 					  const pj_activesock_cfg *opt,
 					  pj_ioqueue_t *ioqueue,
 					  const pj_activesock_cb *cb,
+					  void *user_data,
 					  pj_activesock_t **p_asock)
 {
     pj_activesock_t *asock;
@@ -114,6 +115,7 @@
     asock->stream_oriented = (sock_type == pj_SOCK_STREAM());
     asock->async_count = (opt? opt->async_cnt : 1);
     asock->max_loop = PJ_ACTIVESOCK_MAX_LOOP;
+    asock->user_data = user_data;
     pj_memcpy(&asock->cb, cb, sizeof(*cb));
 
     pj_bzero(&ioq_cb, sizeof(ioq_cb));
@@ -143,6 +145,7 @@
 					      const pj_activesock_cfg *opt,
 					      pj_ioqueue_t *ioqueue,
 					      const pj_activesock_cb *cb,
+					      void *user_data,
 					      pj_activesock_t **p_asock,
 					      pj_sockaddr *bound_addr)
 {
@@ -168,7 +171,7 @@
     }
 
     status = pj_activesock_create(pool, sock_fd, pj_SOCK_DGRAM(), opt,
-				  ioqueue, cb, p_asock);
+				  ioqueue, cb, user_data, p_asock);
     if (status != PJ_SUCCESS) {
 	pj_sock_close(sock_fd);
 	return status;
diff --git a/pjlib/src/pjlib-test/activesock.c b/pjlib/src/pjlib-test/activesock.c
index 0e38eea..570aef5 100644
--- a/pjlib/src/pjlib-test/activesock.c
+++ b/pjlib/src/pjlib-test/activesock.c
@@ -114,7 +114,7 @@
     activesock_cb.on_data_recvfrom = &udp_echo_srv_on_data_recvfrom;
 
     status = pj_activesock_create_udp(pool, &addr, NULL, ioqueue, &activesock_cb, 
-				      &srv->asock, &addr);
+				      srv, &srv->asock, &addr);
     if (status != PJ_SUCCESS) {
 	pj_sock_close(sock_fd);
 	udp_echo_err("pj_activesock_create()", status);
@@ -123,7 +123,6 @@
 
     srv->port = pj_ntohs(addr.ipv4.sin_port);
 
-    pj_activesock_set_user_data(srv->asock, srv);
     pj_ioqueue_op_key_init(&srv->send_key, sizeof(srv->send_key));
 
     status = pj_activesock_start_recvfrom(srv->asock, pool, 32, 0);