Author: mikej Date: Tue Oct 7 18:15:51 2008 New Revision: 9885 Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Log: handle multi contact register responses and register timeout better Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia.c Tue Oct 7 18:15:51 2008 @@ -958,7 +958,7 @@ gateway->freq, name); gateway->freq = 3600; } - gateway->freq -= 2; + gateway->next = profile->gateways; profile->gateways = gateway; Modified: freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c ============================================================================== --- freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c (original) +++ freeswitch/trunk/src/mod/endpoints/mod_sofia/sofia_reg.c Tue Oct 7 18:15:51 2008 @@ -119,7 +119,12 @@ break; case REG_STATE_REGISTER: switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "registered %s\n", gateway_ptr->name); - gateway_ptr->expires = now + gateway_ptr->freq; + if (gateway_ptr->expires > 60) { + gateway_ptr->expires = now + (gateway_ptr->freq - 15); + } else { + gateway_ptr->expires = now + (gateway_ptr->freq - 2); + } + gateway_ptr->state = REG_STATE_REGED; gateway_ptr->status = SOFIA_GATEWAY_UP; break; @@ -1025,9 +1030,14 @@ const char *new_expires; uint32_t expi; if (contact->m_next) { - //const char *sipip = profile->extsipip ? profile->extsipip : profile->sipip; - //find the contact + const char *sipip = profile->extsipip ? profile->extsipip : profile->sipip; + for ( ; contact && strcasecmp(contact->m_url->url_host, sipip); contact = contact->m_next); } + + if (!contact) { + contact = sip->sip_contact; + } + if (contact->m_expires) { new_expires = contact->m_expires; expi = (uint32_t) atoi(new_expires);