cid = generate_pai_str(tech_pvt);
- if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) && tech_pvt->early_sdp && strcmp(tech_pvt->early_sdp, tech_pvt->local_sdp_str)) {
- /* The SIP RFC for SOA forbids sending a 183 with one sdp then a 200 with another but it won't do us much good unless
- we do so in this case we will abandon the SOA rules and go rogue.
- */
- sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
+ if (switch_channel_test_flag(tech_pvt->channel, CF_PROXY_MODE) && tech_pvt->early_sdp) {
+ char *a, *b;
+
+ /* start at the s= line to avoid some devices who update the o= between messages */
+ a = strstr(tech_pvt->early_sdp, "s=");
+ b = strstr(tech_pvt->local_sdp_str, "s=");
+
+ if (!a || !b || strcmp(a, b)) {
+
+ /* The SIP RFC for SOA forbids sending a 183 with one sdp then a 200 with another but it won't do us much good unless
+ we do so in this case we will abandon the SOA rules and go rogue.
+ */
+ sofia_clear_flag(tech_pvt, TFLAG_ENABLE_SOA);
+ }
}
if (sofia_use_soa(tech_pvt)) {