[svn-commits] oej: branch oej/pgtips-srv-and-outbound-stuff-1.8 r421670 - in /team/oej/pgti...
SVN commits to the Digium repositories
svn-commits at lists.digium.com
Thu Aug 21 08:23:11 CDT 2014
Author: oej
Date: Thu Aug 21 08:23:04 2014
New Revision: 421670
URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=421670
Log:
Failing. Over.
Modified:
team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c
team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h
Modified: team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c?view=diff&rev=421670&r1=421669&r2=421670
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c (original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/chan_sip.c Thu Aug 21 08:23:04 2014
@@ -3763,6 +3763,7 @@
* check in case the scheduler gets behind or the clock is changed. */
if ((diff <= 0) || (diff > pkt->retrans_stop_time)) {
pkt->retrans_stop = 1;
+ ast_debug(4, "--- Retransmission stops here and now. Time limit exceeded\n");
}
/* Lock channel PVT */
@@ -6079,6 +6080,11 @@
{
/* Really delete */
ast_debug(3, "Destroying registry entry for %s@%s\n", reg->username, reg->hostname);
+
+ if (reg->srvcontext) { /* Free the list of SRV entries used by this registration */
+ ast_srv_context_free_list(reg->srvcontext);
+ ast_free(reg->srvcontext);
+ }
if (reg->call) {
/* Clear registry before destroying to ensure
@@ -13776,6 +13782,7 @@
* Otherwise destroy it, as we have a timeout so we don't want it.
*/
if (r->call) {
+ ast_debug(3, " -- Removing dialog from registry entry %s\n", r->hostname);
/* Unlink us, destroy old call. Locking is not relevant here because all this happens
in the single SIP manager thread. */
p = r->call;
@@ -13783,6 +13790,9 @@
pvt_set_needdestroy(p, "registration timeout");
/* Pretend to ACK anything just in case */
__sip_pretend_ack(p);
+ /* Save away the DNS srv list so we don't forget where we are */
+ r->srvcontext = p->srvcontext;
+ p->srvcontext = NULL;
sip_pvt_unlock(p);
/* decouple the two objects */
@@ -13802,8 +13812,8 @@
r->regstate = REG_STATE_FAILED;
} else {
r->regstate = REG_STATE_UNREGISTERED;
+ ast_log(LOG_NOTICE, " -- Registration for '%s@%s' timed out, trying again (Attempt #%d)\n", r->username, r->hostname, r->regattempts);
transmit_register(r, SIP_REGISTER, NULL, NULL);
- ast_log(LOG_NOTICE, " -- Registration for '%s@%s' timed out, trying again (Attempt #%d)\n", r->username, r->hostname, r->regattempts);
}
manager_event(EVENT_FLAG_SYSTEM, "Registry", "ChannelType: SIP\r\nUsername: %s\r\nDomain: %s\r\nStatus: %s\r\n", r->username, r->hostname, regstate2str(r->regstate));
registry_unref(r, "unreffing registry_unref r");
@@ -13898,6 +13908,31 @@
if (!(p = sip_alloc( r->callid, NULL, 0, SIP_REGISTER, NULL))) {
ast_log(LOG_WARNING, "Unable to allocate registration transaction (memory or socket error)\n");
return 0;
+ }
+ if (r->srvcontext) {
+ char hostname[MAXHOSTNAMELEN];
+ const char *host = &hostname[0];
+ unsigned short port, prio, weight;
+
+ /* We have an existing SRV list from a previously failed attempt. Let's reuse that one */
+ /* This time we test the next SRV entry. */
+ if(ast_srv_get_next_record(p->srvcontext, &host, &port, &prio, &weight)) {
+ /* No more hosts to try. Let's give up and retry DNS again. */
+ ast_srv_context_free_list(r->srvcontext);
+ ast_free(r->srvcontext);
+ dialog_unlink_all(p);
+ p = dialog_unref(p, "unref dialog after unlink_all");
+ ast_debug(3, " ---> No more SRV entries to play with. Giving up on REGISTER\n");
+ return 0;
+ } else {
+ /* Let's try with another host */
+ ast_string_field_set(p, hostname, host);
+ dosrvlookup = FALSE;
+ ast_sockaddr_set_port(&p->sa, port);
+ ast_debug(3, " ---> REGISTER SRV failover on domain %s to host %s port %d \n", r->hostname, host, port);
+ }
+ //p->srvcontext = r->srvcontext;
+ //r->srvcontext = NULL;
}
/* reset tag to consistent value from registry */
@@ -29160,7 +29195,7 @@
if (!ast_strlen_zero(peer->srvdomain)) {
if (peer->srvcontext) {
ast_srv_context_free_list(peer->srvcontext);
- free(peer->srvcontext);
+ ast_free(peer->srvcontext);
}
peer->srvcontext = ast_srv_context_new();
if (peer->srvcontext == NULL) {
Modified: team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h
URL: http://svnview.digium.com/svn/asterisk/team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h?view=diff&rev=421670&r1=421669&r2=421670
==============================================================================
--- team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h (original)
+++ team/oej/pgtips-srv-and-outbound-stuff-1.8/channels/sip/include/sip.h Thu Aug 21 08:23:04 2014
@@ -1369,6 +1369,7 @@
struct ast_sockaddr us; /*!< Who the server thinks we are */
int noncecount; /*!< Nonce-count */
char lastmsg[256]; /*!< Last Message sent/received */
+ struct srv_context *srvcontext; /*!< SRV record list */
};
struct tcptls_packet {
More information about the svn-commits
mailing list