summaryrefslogtreecommitdiff
path: root/pjnath
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-03-23 16:34:20 +0000
committerBenny Prijono <bennylp@teluu.com>2007-03-23 16:34:20 +0000
commite3fd604ea862f68ad3ece248ca7d853899cbf48f (patch)
tree88fb4659ab449d79b25dc8e0dfe3b64f145b9dd3 /pjnath
parent05e7998ba4cbd7fb0b02b7f82c5b328cf203fbc9 (diff)
ICE (work in progress): integration with PJSUA
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1098 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjnath')
-rw-r--r--pjnath/include/pjnath/ice_stream_transport.h3
-rw-r--r--pjnath/src/pjnath/ice.c7
-rw-r--r--pjnath/src/pjnath/ice_stream_transport.c42
3 files changed, 29 insertions, 23 deletions
diff --git a/pjnath/include/pjnath/ice_stream_transport.h b/pjnath/include/pjnath/ice_stream_transport.h
index c85aff98..37ff5686 100644
--- a/pjnath/include/pjnath/ice_stream_transport.h
+++ b/pjnath/include/pjnath/ice_stream_transport.h
@@ -71,6 +71,7 @@ typedef struct pj_ice_st_interface
{
pj_ice_st *ice_st;
pj_ice_cand_type type;
+ pj_status_t status;
unsigned comp_id;
int cand_id;
pj_str_t foundation;
@@ -150,7 +151,7 @@ PJ_DECL(pj_status_t) pj_ice_st_add_relay_interface(pj_ice_st *ice_st,
unsigned local_port,
pj_bool_t notify,
void *notify_data);
-
+PJ_DECL(pj_status_t) pj_ice_st_get_interfaces_status(pj_ice_st *ice_st);
PJ_DECL(pj_status_t) pj_ice_st_init_ice(pj_ice_st *ice_st,
pj_ice_role role,
diff --git a/pjnath/src/pjnath/ice.c b/pjnath/src/pjnath/ice.c
index e21e81f9..d2d2474d 100644
--- a/pjnath/src/pjnath/ice.c
+++ b/pjnath/src/pjnath/ice.c
@@ -888,12 +888,15 @@ static void prune_checklist(pj_ice *ice, pj_ice_checklist *clist)
static void on_ice_complete(pj_ice *ice, pj_status_t status)
{
if (!ice->is_complete) {
+ char errmsg[PJ_ERR_MSG_SIZE];
ice->is_complete = PJ_TRUE;
ice->ice_status = status;
/* Log message */
- LOG((ice->obj_name, "ICE process complete"));
+ LOG((ice->obj_name, "ICE process complete, status=%s",
+ pj_strerror(status, errmsg, sizeof(errmsg)).ptr));
+
dump_checklist("Dumping checklist", ice, &ice->clist);
dump_valid_list("Dumping valid list", ice);
@@ -1136,7 +1139,7 @@ PJ_DEF(pj_status_t) pj_ice_create_check_list(pj_ice *ice,
/* Log checklist */
dump_checklist("Checklist created:", ice, clist);
- pj_mutex_lock(ice->mutex);
+ pj_mutex_unlock(ice->mutex);
return PJ_SUCCESS;
}
diff --git a/pjnath/src/pjnath/ice_stream_transport.c b/pjnath/src/pjnath/ice_stream_transport.c
index 475aa35d..e654fcf7 100644
--- a/pjnath/src/pjnath/ice_stream_transport.c
+++ b/pjnath/src/pjnath/ice_stream_transport.c
@@ -151,7 +151,6 @@ on_error:
return status;
}
-
/*
* This is callback called by ioqueue on incoming packet
*/
@@ -191,7 +190,6 @@ static void on_read_complete(pj_ioqueue_key_t *key,
}
}
-
/*
* Destroy an interface
*/
@@ -207,7 +205,6 @@ static void destroy_ice_interface(pj_ice_st_interface *is)
}
}
-
/*
* Create ICE stream transport
*/
@@ -241,7 +238,6 @@ PJ_DECL(pj_status_t) pj_ice_st_create(pj_stun_config *stun_cfg,
return PJ_SUCCESS;
}
-
static void destroy_ice_st(pj_ice_st *ice_st, pj_status_t reason)
{
unsigned i;
@@ -273,7 +269,6 @@ static void destroy_ice_st(pj_ice_st *ice_st, pj_status_t reason)
}
}
-
/*
* Destroy ICE stream transport.
*/
@@ -283,7 +278,6 @@ PJ_DEF(pj_status_t) pj_ice_st_destroy(pj_ice_st *ice_st)
return PJ_SUCCESS;
}
-
/*
* Resolve STUN server
*/
@@ -300,7 +294,6 @@ PJ_DEF(pj_status_t) pj_ice_st_set_stun( pj_ice_st *ice_st,
return -1;
}
-
/*
* Set STUN server address.
*/
@@ -319,7 +312,6 @@ PJ_DEF(pj_status_t) pj_ice_st_set_stun_addr( pj_ice_st *ice_st,
return PJ_SUCCESS;
}
-
/*
* Add new component.
*/
@@ -350,7 +342,6 @@ PJ_DEF(pj_status_t) pj_ice_st_add_comp(pj_ice_st *ice_st,
return PJ_SUCCESS;
}
-
/* Add interface */
static void add_interface(pj_ice_st *ice_st, pj_ice_st_interface *is,
unsigned *p_itf_id, pj_bool_t notify,
@@ -405,10 +396,12 @@ PJ_DEF(pj_status_t) pj_ice_st_add_host_interface(pj_ice_st *ice_st,
/* Store this interface */
add_interface(ice_st, is, p_itf_id, notify, notify_data);
+ /* Set interface status to SUCCESS */
+ is->status = PJ_SUCCESS;
+
return PJ_SUCCESS;
}
-
/*
* Enumerate and add all host interfaces.
*/
@@ -434,7 +427,6 @@ PJ_DEF(pj_status_t) pj_ice_st_add_all_host_interfaces(pj_ice_st *ice_st,
NULL, notify, notify_data);
}
-
/*
* Add STUN mapping interface.
*/
@@ -453,7 +445,6 @@ PJ_DEF(pj_status_t) pj_ice_st_add_stun_interface(pj_ice_st *ice_st,
return -1;
}
-
/*
* Add TURN mapping interface.
*/
@@ -472,6 +463,25 @@ PJ_DEF(pj_status_t) pj_ice_st_add_relay_interface(pj_ice_st *ice_st,
return -1;
}
+PJ_DEF(pj_status_t) pj_ice_st_get_interfaces_status(pj_ice_st *ice_st)
+{
+ unsigned i;
+ pj_status_t worst = PJ_SUCCESS;
+
+ for (i=0; i<ice_st->itf_cnt; ++i) {
+ pj_ice_st_interface *itf = ice_st->itfs[i];
+
+ if (itf->status == PJ_SUCCESS) {
+ /* okay */
+ } else if (itf->status == PJ_EPENDING && worst==PJ_SUCCESS) {
+ worst = itf->status;
+ } else {
+ worst = itf->status;
+ }
+ }
+
+ return worst;
+}
/*
* Create ICE!
@@ -537,7 +547,6 @@ on_error:
return status;
}
-
/*
* Enum candidates
*/
@@ -568,7 +577,6 @@ PJ_DEF(pj_status_t) pj_ice_st_enum_cands(pj_ice_st *ice_st,
return PJ_SUCCESS;
}
-
/*
* Start ICE processing !
*/
@@ -588,7 +596,6 @@ PJ_DEF(pj_status_t) pj_ice_st_start_ice( pj_ice_st *ice_st,
return pj_ice_start_check(ice_st->ice);
}
-
/*
* Stop ICE!
*/
@@ -602,7 +609,6 @@ PJ_DECL(pj_status_t) pj_ice_st_stop_ice(pj_ice_st *ice_st)
return PJ_SUCCESS;
}
-
/*
* Send data to peer agent.
*/
@@ -617,8 +623,6 @@ PJ_DEF(pj_status_t) pj_ice_st_send_data( pj_ice_st *ice_st,
return pj_ice_send_data(ice_st->ice, comp_id, data, data_len);
}
-
-
/*
* Callback called by ICE session when ICE processing is complete, either
* successfully or with failure.
@@ -631,7 +635,6 @@ static void on_ice_complete(pj_ice *ice, pj_status_t status)
}
}
-
/*
* Callback called by ICE session when it wants to send outgoing packet.
*/
@@ -667,7 +670,6 @@ static pj_status_t on_tx_pkt(pj_ice *ice,
return (status==PJ_SUCCESS||status==PJ_EPENDING) ? PJ_SUCCESS : status;
}
-
/*
* Callback called by ICE session when it receives application data.
*/