Changeset 140 for pjproject/trunk/pjmedia/src/pjmedia/sdp_neg.c
- Timestamp:
- Feb 7, 2006 12:34:58 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjmedia/src/pjmedia/sdp_neg.c
r129 r140 78 78 PJ_DEF(pj_status_t) 79 79 pjmedia_sdp_neg_create_w_remote_offer(pj_pool_t *pool, 80 const pjmedia_sdp_session * local,80 const pjmedia_sdp_session *initial, 81 81 const pjmedia_sdp_session *remote, 82 82 pjmedia_sdp_neg **p_neg) … … 86 86 87 87 /* Check arguments are valid. */ 88 PJ_ASSERT_RETURN(pool && local &&remote && p_neg, PJ_EINVAL);88 PJ_ASSERT_RETURN(pool && remote && p_neg, PJ_EINVAL); 89 89 90 90 *p_neg = NULL; 91 91 92 /* Validate remote offer and local answer */92 /* Validate remote offer and initial answer */ 93 93 status = pjmedia_sdp_validate(remote); 94 94 if (status != PJ_SUCCESS) 95 95 return status; 96 PJ_ASSERT_RETURN((status=pjmedia_sdp_validate(local))==PJ_SUCCESS, status);97 96 98 97 /* Create and initialize negotiator. */ … … 100 99 PJ_ASSERT_RETURN(neg != NULL, PJ_ENOMEM); 101 100 102 neg->state = PJMEDIA_SDP_NEG_STATE_WAIT_NEGO;103 neg->initial_sdp = pjmedia_sdp_session_clone(pool, local);104 PJ_ASSERT_RETURN((status=pjmedia_sdp_validate(neg->initial_sdp))==PJ_SUCCESS,105 status);106 107 neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, local);108 101 neg->neg_remote_sdp = pjmedia_sdp_session_clone(pool, remote); 109 PJ_ASSERT_RETURN((status=pjmedia_sdp_validate(neg->neg_remote_sdp))==PJ_SUCCESS, 110 status); 102 103 if (initial) { 104 PJ_ASSERT_RETURN((status=pjmedia_sdp_validate(initial))==PJ_SUCCESS, 105 status); 106 107 neg->initial_sdp = pjmedia_sdp_session_clone(pool, initial); 108 neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, initial); 109 110 neg->state = PJMEDIA_SDP_NEG_STATE_WAIT_NEGO; 111 112 } else { 113 114 neg->state = PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER; 115 116 } 111 117 112 118 *p_neg = neg; … … 127 133 128 134 PJ_DEF(pj_status_t) 129 pjmedia_sdp_neg_get_ local( pjmedia_sdp_neg *neg,130 135 pjmedia_sdp_neg_get_active_local( pjmedia_sdp_neg *neg, 136 const pjmedia_sdp_session **local) 131 137 { 132 138 PJ_ASSERT_RETURN(neg && local, PJ_EINVAL); … … 139 145 140 146 PJ_DEF(pj_status_t) 141 pjmedia_sdp_neg_get_ remote( pjmedia_sdp_neg *neg,142 147 pjmedia_sdp_neg_get_active_remote( pjmedia_sdp_neg *neg, 148 const pjmedia_sdp_session **remote) 143 149 { 144 150 PJ_ASSERT_RETURN(neg && remote, PJ_EINVAL); … … 146 152 147 153 *remote = neg->active_remote_sdp; 154 return PJ_SUCCESS; 155 } 156 157 PJ_DEF(pj_status_t) 158 pjmedia_sdp_neg_get_neg_remote( pjmedia_sdp_neg *neg, 159 const pjmedia_sdp_session **remote) 160 { 161 PJ_ASSERT_RETURN(neg && remote, PJ_EINVAL); 162 PJ_ASSERT_RETURN(neg->neg_remote_sdp, PJMEDIA_SDPNEG_ENONEG); 163 164 *remote = neg->neg_remote_sdp; 165 return PJ_SUCCESS; 166 } 167 168 PJ_DEF(pj_status_t) 169 pjmedia_sdp_neg_get_neg_local( pjmedia_sdp_neg *neg, 170 const pjmedia_sdp_session **local) 171 { 172 PJ_ASSERT_RETURN(neg && local, PJ_EINVAL); 173 PJ_ASSERT_RETURN(neg->neg_local_sdp, PJMEDIA_SDPNEG_ENONEG); 174 175 *local = neg->neg_local_sdp; 148 176 return PJ_SUCCESS; 149 177 } … … 175 203 176 204 PJ_DEF(pj_status_t) 177 pjmedia_sdp_neg_ tx_local_offer( pj_pool_t *pool,178 pjmedia_sdp_neg *neg,179 const pjmedia_sdp_session **offer)205 pjmedia_sdp_neg_send_local_offer( pj_pool_t *pool, 206 pjmedia_sdp_neg *neg, 207 const pjmedia_sdp_session **offer) 180 208 { 181 209 /* Check arguments are valid. */ … … 211 239 212 240 PJ_DEF(pj_status_t) 213 pjmedia_sdp_neg_rx_remote_offer( pj_pool_t *pool, 214 pjmedia_sdp_neg *neg, 215 const pjmedia_sdp_session *remote) 241 pjmedia_sdp_neg_set_remote_answer( pj_pool_t *pool, 242 pjmedia_sdp_neg *neg, 243 const pjmedia_sdp_session *remote) 244 { 245 /* Check arguments are valid. */ 246 PJ_ASSERT_RETURN(pool && neg && remote, PJ_EINVAL); 247 248 /* Can only do this in STATE_LOCAL_OFFER. 249 * If we haven't provided local offer, then rx_remote_offer() should 250 * be called instead of this function. 251 */ 252 PJ_ASSERT_RETURN(neg->state == PJMEDIA_SDP_NEG_STATE_LOCAL_OFFER, 253 PJMEDIA_SDPNEG_EINSTATE); 254 255 /* We're ready to negotiate. */ 256 neg->state = PJMEDIA_SDP_NEG_STATE_WAIT_NEGO; 257 neg->has_remote_answer = 1; 258 neg->neg_remote_sdp = pjmedia_sdp_session_clone(pool, remote); 259 260 return PJ_SUCCESS; 261 } 262 263 PJ_DEF(pj_status_t) 264 pjmedia_sdp_neg_set_remote_offer( pj_pool_t *pool, 265 pjmedia_sdp_neg *neg, 266 const pjmedia_sdp_session *remote) 216 267 { 217 268 /* Check arguments are valid. */ … … 225 276 PJMEDIA_SDPNEG_EINSTATE); 226 277 227 /* We're ready to negotiate. */228 neg->state = PJMEDIA_SDP_NEG_STATE_ WAIT_NEGO;278 /* State now is STATE_REMOTE_OFFER. */ 279 neg->state = PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER; 229 280 neg->neg_remote_sdp = pjmedia_sdp_session_clone(pool, remote); 230 281 … … 233 284 234 285 PJ_DEF(pj_status_t) 235 pjmedia_sdp_neg_ rx_remote_answer( pj_pool_t *pool,286 pjmedia_sdp_neg_set_local_answer( pj_pool_t *pool, 236 287 pjmedia_sdp_neg *neg, 237 const pjmedia_sdp_session * remote)288 const pjmedia_sdp_session *local) 238 289 { 239 290 /* Check arguments are valid. */ 240 PJ_ASSERT_RETURN(pool && neg && remote, PJ_EINVAL);241 242 /* Can only do this in STATE_ LOCAL_OFFER.243 * If we haven't provided local offer, then rx_remote_offer() should291 PJ_ASSERT_RETURN(pool && neg && local, PJ_EINVAL); 292 293 /* Can only do this in STATE_REMOTE_OFFER. 294 * If we already provide local offer, then rx_remote_answer() should 244 295 * be called instead of this function. 245 296 */ 246 PJ_ASSERT_RETURN(neg->state == PJMEDIA_SDP_NEG_STATE_ LOCAL_OFFER,297 PJ_ASSERT_RETURN(neg->state == PJMEDIA_SDP_NEG_STATE_REMOTE_OFFER, 247 298 PJMEDIA_SDPNEG_EINSTATE); 248 299 249 /* We're ready to negotiate. */300 /* State now is STATE_WAIT_NEGO. */ 250 301 neg->state = PJMEDIA_SDP_NEG_STATE_WAIT_NEGO; 251 neg->has_remote_answer = 1; 252 neg->neg_remote_sdp = pjmedia_sdp_session_clone(pool, remote); 253 302 if (local) 303 neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, local); 304 else { 305 PJ_ASSERT_RETURN(neg->initial_sdp, PJMEDIA_SDPNEG_ENOINITIAL); 306 neg->neg_local_sdp = pjmedia_sdp_session_clone(pool, neg->initial_sdp); 307 } 308 254 309 return PJ_SUCCESS; 255 310 } … … 464 519 { 465 520 unsigned mi; 521 pj_bool_t has_active = PJ_FALSE; 466 522 pj_status_t status; 467 523 … … 479 535 if (status != PJ_SUCCESS) 480 536 return status; 537 538 if (offer->media[mi]->desc.port != 0) 539 has_active = PJ_TRUE; 481 540 } 482 541 483 542 *p_active = offer; 484 return PJ_SUCCESS; 543 544 return has_active ? PJ_SUCCESS : PJMEDIA_SDPNEG_ENOMEDIA; 485 545 } 486 546 … … 675 735 { 676 736 pj_status_t status; 737 pj_bool_t has_active = PJ_FALSE; 677 738 pjmedia_sdp_session *answer; 678 739 char media_used[PJSDP_MAX_MEDIA]; … … 749 810 /* Add the media answer */ 750 811 answer->media[answer->media_count++] = am; 812 813 /* Check if this media is active.*/ 814 if (am->desc.port != 0) 815 has_active = PJ_TRUE; 751 816 } 752 817 753 818 *p_answer = answer; 754 return PJ_SUCCESS; 819 820 return has_active ? PJ_SUCCESS : PJMEDIA_SDPNEG_ENOMEDIA; 755 821 } 756 822 … … 785 851 pjmedia_sdp_session *answer; 786 852 787 status = create_answer(pool, neg-> initial_sdp, neg->neg_remote_sdp,853 status = create_answer(pool, neg->neg_local_sdp, neg->neg_remote_sdp, 788 854 &answer); 789 855 if (status == PJ_SUCCESS) {
Note: See TracChangeset
for help on using the changeset viewer.