From 3ce16e8a22d2e8e11a749902c621673f87f187be Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Tue, 13 Jun 2006 22:22:54 +0000 Subject: Added pjmedia_sdp_neg_was_aswer_remote() git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@501 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/include/pjmedia/sdp_neg.h | 16 ++++++++++++++++ pjmedia/src/pjmedia/sdp_neg.c | 18 ++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) (limited to 'pjmedia') diff --git a/pjmedia/include/pjmedia/sdp_neg.h b/pjmedia/include/pjmedia/sdp_neg.h index 55c74401..d2d977e0 100644 --- a/pjmedia/include/pjmedia/sdp_neg.h +++ b/pjmedia/include/pjmedia/sdp_neg.h @@ -392,6 +392,22 @@ PJ_DECL(pj_status_t) pjmedia_sdp_neg_get_active_remote( pjmedia_sdp_neg *neg, const pjmedia_sdp_session **remote); + +/** + * Determine whether remote sent answer (as opposed to offer) on the + * last negotiation. This function can only be called in state + * PJMEDIA_SDP_NEG_STATE_DONE. + * + * @param neg The SDP negotiator instance. + * + * @return Non-zero if it was remote who sent answer, + * otherwise zero if it was local who supplied + * answer. + */ +PJ_DECL(pj_bool_t) +pjmedia_sdp_neg_was_answer_remote(pjmedia_sdp_neg *neg); + + /** * Get the current remote SDP offer or answer. Application can only * call this function in state PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER or diff --git a/pjmedia/src/pjmedia/sdp_neg.c b/pjmedia/src/pjmedia/sdp_neg.c index dd954305..41383d6d 100644 --- a/pjmedia/src/pjmedia/sdp_neg.c +++ b/pjmedia/src/pjmedia/sdp_neg.c @@ -32,6 +32,7 @@ struct pjmedia_sdp_neg { pjmedia_sdp_neg_state state; /**< Negotiator state. */ pj_bool_t has_remote_answer; + pj_bool_t answer_was_remote; pjmedia_sdp_session *initial_sdp, /**< Initial local SDP */ *active_local_sdp, /**< Currently active local SDP. */ @@ -174,6 +175,16 @@ pjmedia_sdp_neg_get_active_remote( pjmedia_sdp_neg *neg, return PJ_SUCCESS; } + +PJ_DEF(pj_bool_t) +pjmedia_sdp_neg_was_answer_remote(pjmedia_sdp_neg *neg) +{ + PJ_ASSERT_RETURN(neg, PJ_FALSE); + + return neg->answer_was_remote; +} + + PJ_DEF(pj_status_t) pjmedia_sdp_neg_get_neg_remote( pjmedia_sdp_neg *neg, const pjmedia_sdp_session **remote) @@ -274,7 +285,7 @@ pjmedia_sdp_neg_set_remote_answer( pj_pool_t *pool, /* We're ready to negotiate. */ neg->state = PJMEDIA_SDP_NEG_STATE_WAIT_NEGO; - neg->has_remote_answer = 1; + neg->has_remote_answer = PJ_TRUE; neg->neg_remote_sdp = pjmedia_sdp_session_clone(pool, remote); return PJ_SUCCESS; @@ -917,9 +928,12 @@ PJ_DEF(pj_status_t) pjmedia_sdp_neg_negotiate( pj_pool_t *pool, /* State is DONE regardless */ neg->state = PJMEDIA_SDP_NEG_STATE_DONE; + /* Save state */ + neg->answer_was_remote = neg->has_remote_answer; + /* Clear temporary SDP */ neg->neg_local_sdp = neg->neg_remote_sdp = NULL; - neg->has_remote_answer = 0; + neg->has_remote_answer = PJ_FALSE; return status; } -- cgit v1.2.3