aboutsummaryrefslogtreecommitdiffstats
path: root/channels/chan_sip.c
diff options
context:
space:
mode:
authormarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-22 19:09:47 +0000
committermarkster <markster@f38db490-d61c-443f-a65b-d21fe96a405b>2005-03-22 19:09:47 +0000
commit61ade402beb2d8479f864b6d077b6cae351343ca (patch)
tree5658b91a871d5e40a9c261e03a503f60cf7798ad /channels/chan_sip.c
parentd2d06ed9d22b62132f04a8cf0b1dd4567d2ae6ab (diff)
Fix SIP realtime bug (somehow didn't get committed yesterday)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@5228 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_sip.c')
-rwxr-xr-xchannels/chan_sip.c33
1 files changed, 20 insertions, 13 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index c00510718..87fbf1f8b 100755
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -1257,13 +1257,13 @@ static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *
struct sip_peer *peer=NULL;
struct ast_variable *var;
struct ast_variable *tmp;
+ char *newpeername = (char *) peername;
+ char iabuf[80] = "";
/* First check on peer name */
- if (peername)
+ if (newpeername)
var = ast_load_realtime("sippeers", "name", peername, NULL);
else if (sin) { /* Then check on IP address */
- char iabuf[80];
-
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
var = ast_load_realtime("sippeers", "ipaddr", iabuf, NULL);
} else
@@ -1279,23 +1279,30 @@ static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *
!strcasecmp(tmp->value, "user")) {
ast_variables_destroy(var);
return NULL;
+ } else if(!newpeername && !strcasecmp(tmp->name, "name")) {
+ newpeername = tmp->value;
}
tmp = tmp->next;
}
+
+ if (newpeername) {
+ peer = build_peer(newpeername, var, ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS) ? 0 : 1);
- peer = build_peer(peername, var, ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS) ? 0 : 1);
-
- if (peer) {
- if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) {
- ast_copy_flags((&peer->flags_page2),(&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR|SIP_PAGE2_RTCACHEFRIENDS);
- if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR)) {
- peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, (void *)peer);
+ if (peer) {
+ if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) {
+ ast_copy_flags((&peer->flags_page2),(&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR|SIP_PAGE2_RTCACHEFRIENDS);
+ if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR)) {
+ peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, (void *)peer);
+ }
+ ASTOBJ_CONTAINER_LINK(&peerl,peer);
+ } else {
+ ast_set_flag(peer, SIP_REALTIME);
}
- ASTOBJ_CONTAINER_LINK(&peerl,peer);
- } else {
- ast_set_flag(peer, SIP_REALTIME);
}
+ } else {
+ ast_log(LOG_WARNING, "Cannot Determine peer name ip=%s\n", iabuf);
}
+
ast_variables_destroy(var);
return peer;
}