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;
|
int *sss_u2s;
|
||||||
/** Mapping from session SDP m= lines to user SDP m= lines */
|
/** Mapping from session SDP m= lines to user SDP m= lines */
|
||||||
int *sss_s2u;
|
int *sss_s2u;
|
||||||
|
|
||||||
|
/** Our latest offer or answer */
|
||||||
|
sdp_session_t *sss_latest;
|
||||||
}
|
}
|
||||||
soa_static_session_t;
|
soa_static_session_t;
|
||||||
|
|
||||||
|
@ -1103,6 +1106,8 @@ static int offer_answer_step(soa_session_t *ss,
|
||||||
|
|
||||||
int *u2s = NULL, *s2u = NULL, *tbf;
|
int *u2s = NULL, *s2u = NULL, *tbf;
|
||||||
|
|
||||||
|
sdp_session_t *latest = NULL, *previous = NULL;
|
||||||
|
|
||||||
char const *phrase = "Internal Media Error";
|
char const *phrase = "Internal Media Error";
|
||||||
|
|
||||||
su_home_t tmphome[SU_HOME_AUTO_SIZE(8192)];
|
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 &&
|
if (ss->ss_local->ssd_sdp != local &&
|
||||||
sdp_session_cmp(ss->ss_local->ssd_sdp, local)) {
|
sdp_session_cmp(ss->ss_local->ssd_sdp, local)) {
|
||||||
/* We have modified local session: update origin-line */
|
int bump;
|
||||||
if (local->sdp_origin != o)
|
|
||||||
*o = *local->sdp_origin, local->sdp_origin = o;
|
switch (action) {
|
||||||
o->o_version++;
|
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 */
|
/* Do sanity checks for the created SDP */
|
||||||
if (!local->sdp_subject) /* s= is mandatory */
|
if (!local->sdp_subject) /* s= is mandatory */
|
||||||
|
@ -1362,6 +1384,11 @@ static int offer_answer_step(soa_session_t *ss,
|
||||||
|
|
||||||
goto internal_error;
|
goto internal_error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (bump) {
|
||||||
|
latest = sdp_session_dup(ss->ss_home, ss->ss_local->ssd_sdp);
|
||||||
|
previous = sss->sss_latest;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (u2s) {
|
if (u2s) {
|
||||||
|
@ -1373,10 +1400,12 @@ static int offer_answer_step(soa_session_t *ss,
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case generate_offer:
|
case generate_offer:
|
||||||
ss->ss_local_user_version = user_version;
|
ss->ss_local_user_version = user_version;
|
||||||
|
sss->sss_latest = latest;
|
||||||
break;
|
break;
|
||||||
case generate_answer:
|
case generate_answer:
|
||||||
ss->ss_local_user_version = user_version;
|
ss->ss_local_user_version = user_version;
|
||||||
ss->ss_local_remote_version = remote_version;
|
ss->ss_local_remote_version = remote_version;
|
||||||
|
sss->sss_latest = latest;
|
||||||
break;
|
break;
|
||||||
case process_answer:
|
case process_answer:
|
||||||
ss->ss_local_remote_version = remote_version;
|
ss->ss_local_remote_version = remote_version;
|
||||||
|
@ -1384,6 +1413,9 @@ static int offer_answer_step(soa_session_t *ss,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (previous)
|
||||||
|
su_free(ss->ss_home, previous);
|
||||||
|
|
||||||
su_home_deinit(tmphome);
|
su_home_deinit(tmphome);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue