--- channels/chan_sip.c.2011-02-23-before-allow-tcp-connection-save 2011-02-23 21:35:52.000000000 -0700 +++ channels/chan_sip.c 2011-02-24 11:03:46.000000000 -0700 @@ -12866,7 +12866,8 @@ AST_APP_ARG(contact); ); - if (peer->rt_fromcontact) { + /* If read-only RT backend, then refresh from local DB cache */ + if (peer->rt_fromcontact && sip_cfg.peer_rtupdate) { return; } if (ast_db_get("SIP/Registry", peer->name, data, sizeof(data))) { @@ -13198,11 +13199,8 @@ pvt->expiry = expire; snprintf(data, sizeof(data), "%s:%d:%s:%s", ast_sockaddr_stringify(&peer->addr), expire, peer->username, peer->fullcontact); - /* Saving TCP connections is useless, we won't be able to reconnect - XXX WHY???? XXX - \todo Fix this immediately. - */ - if (!peer->rt_fromcontact && (peer->socket.type & SIP_TRANSPORT_UDP)) + /* We might not immediately be able to reconnect via TCP, but try caching it anyhow */ + if (!peer->rt_fromcontact || !sip_cfg.peer_rtupdate) ast_db_put("SIP/Registry", peer->name, data); manager_event(EVENT_FLAG_SYSTEM, "PeerStatus", "ChannelType: SIP\r\nPeer: SIP/%s\r\nPeerStatus: Registered\r\nAddress: %s\r\n", peer->name, ast_sockaddr_stringify(&peer->addr)); @@ -26484,7 +26482,8 @@ if (ast_test_flag(&peer->flags[1], SIP_PAGE2_ALLOWSUBSCRIBE)) { sip_cfg.allowsubscribe = TRUE; /* No global ban any more */ } - if (peer->host_dynamic && !peer->is_realtime) { + /* If read-only RT backend, then refresh from local DB cache */ + if (peer->host_dynamic && !sip_cfg.peer_rtupdate) { reg_source_db(peer); }