Thu Aug 7 07:53:01 EDT 2008 Pekka Pessi <first.last@nokia.com>
* soa_static.c: increment version number in o= line only when generating offer or answer Bug reported by Timo Bruhn. git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@9276 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
parent
b489249f60
commit
8eaf59b7f3
|
@ -1 +1 @@
|
|||
Tue Aug 12 13:06:30 EDT 2008
|
||||
Tue Aug 12 13:06:53 EDT 2008
|
||||
|
|
|
@ -87,6 +87,9 @@ typedef struct soa_static_session
|
|||
int *sss_u2s;
|
||||
/** Mapping from session SDP m= lines to user SDP m= lines */
|
||||
int *sss_s2u;
|
||||
|
||||
/** Our latest offer or answer */
|
||||
sdp_session_t *sss_latest;
|
||||
}
|
||||
soa_static_session_t;
|
||||
|
||||
|
@ -1103,6 +1106,8 @@ static int offer_answer_step(soa_session_t *ss,
|
|||
|
||||
int *u2s = NULL, *s2u = NULL, *tbf;
|
||||
|
||||
sdp_session_t *latest = NULL, *previous = NULL;
|
||||
|
||||
char const *phrase = "Internal Media Error";
|
||||
|
||||
su_home_t tmphome[SU_HOME_AUTO_SIZE(8192)];
|
||||
|
@ -1327,10 +1332,27 @@ static int offer_answer_step(soa_session_t *ss,
|
|||
|
||||
if (ss->ss_local->ssd_sdp != local &&
|
||||
sdp_session_cmp(ss->ss_local->ssd_sdp, local)) {
|
||||
/* We have modified local session: update origin-line */
|
||||
if (local->sdp_origin != o)
|
||||
*o = *local->sdp_origin, local->sdp_origin = o;
|
||||
o->o_version++;
|
||||
int bump;
|
||||
|
||||
switch (action) {
|
||||
case generate_offer:
|
||||
bump = sdp_session_cmp(local, sss->sss_latest);
|
||||
break;
|
||||
case generate_answer:
|
||||
bump = 1;
|
||||
break;
|
||||
case process_answer:
|
||||
default:
|
||||
bump = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (bump) {
|
||||
/* Upgrade the version number */
|
||||
if (local->sdp_origin != o)
|
||||
*o = *local->sdp_origin, local->sdp_origin = o;
|
||||
o->o_version++;
|
||||
}
|
||||
|
||||
/* Do sanity checks for the created SDP */
|
||||
if (!local->sdp_subject) /* s= is mandatory */
|
||||
|
@ -1362,6 +1384,11 @@ static int offer_answer_step(soa_session_t *ss,
|
|||
|
||||
goto internal_error;
|
||||
}
|
||||
|
||||
if (bump) {
|
||||
latest = sdp_session_dup(ss->ss_home, ss->ss_local->ssd_sdp);
|
||||
previous = sss->sss_latest;
|
||||
}
|
||||
}
|
||||
|
||||
if (u2s) {
|
||||
|
@ -1373,10 +1400,12 @@ static int offer_answer_step(soa_session_t *ss,
|
|||
switch (action) {
|
||||
case generate_offer:
|
||||
ss->ss_local_user_version = user_version;
|
||||
sss->sss_latest = latest;
|
||||
break;
|
||||
case generate_answer:
|
||||
ss->ss_local_user_version = user_version;
|
||||
ss->ss_local_remote_version = remote_version;
|
||||
sss->sss_latest = latest;
|
||||
break;
|
||||
case process_answer:
|
||||
ss->ss_local_remote_version = remote_version;
|
||||
|
@ -1384,6 +1413,9 @@ static int offer_answer_step(soa_session_t *ss,
|
|||
break;
|
||||
}
|
||||
|
||||
if (previous)
|
||||
su_free(ss->ss_home, previous);
|
||||
|
||||
su_home_deinit(tmphome);
|
||||
return 0;
|
||||
|
||||
|
|
Loading…
Reference in New Issue