summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-06-06 14:12:23 +0000
committerBenny Prijono <bennylp@teluu.com>2008-06-06 14:12:23 +0000
commitd37adaba9d2fe38fe3f06759c6ba47e37aa562c5 (patch)
treeeb4410c8886db119d3e623bf9b4b29f400467356
parent70e0bfbb16138e426e270b15919ca333de352e6b (diff)
More ticket #531: added user_data parameter in activesocket creation API to make it more robust against programming errors
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1986 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjlib/include/pj/activesock.h6
-rw-r--r--pjlib/src/pj/activesock.c5
-rw-r--r--pjlib/src/pjlib-test/activesock.c3
3 files changed, 11 insertions, 3 deletions
diff --git a/pjlib/include/pj/activesock.h b/pjlib/include/pj/activesock.h
index 056890fb..e2213fda 100644
--- a/pjlib/include/pj/activesock.h
+++ b/pjlib/include/pj/activesock.h
@@ -227,6 +227,8 @@ PJ_DECL(void) pj_activesock_cfg_default(pj_activesock_cfg *cfg);
* 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 @@ PJ_DECL(pj_status_t) pj_activesock_create(pj_pool_t *pool,
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 @@ PJ_DECL(pj_status_t) pj_activesock_create(pj_pool_t *pool,
* 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 @@ PJ_DECL(pj_status_t) pj_activesock_create_udp(pj_pool_t *pool,
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 112ca5f2..8e098ed1 100644
--- a/pjlib/src/pj/activesock.c
+++ b/pjlib/src/pj/activesock.c
@@ -97,6 +97,7 @@ PJ_DEF(pj_status_t) pj_activesock_create( pj_pool_t *pool,
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 @@ PJ_DEF(pj_status_t) pj_activesock_create( pj_pool_t *pool,
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 @@ PJ_DEF(pj_status_t) pj_activesock_create_udp( pj_pool_t *pool,
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 @@ PJ_DEF(pj_status_t) pj_activesock_create_udp( pj_pool_t *pool,
}
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 0e38eea9..570aef56 100644
--- a/pjlib/src/pjlib-test/activesock.c
+++ b/pjlib/src/pjlib-test/activesock.c
@@ -114,7 +114,7 @@ static pj_status_t udp_echo_srv_create(pj_pool_t *pool,
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 @@ static pj_status_t udp_echo_srv_create(pj_pool_t *pool,
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);