Fix SIP realtime bug (somehow didn't get committed yesterday)

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@5228 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Mark Spencer
2005-03-22 19:09:47 +00:00
parent 6e420b3c38
commit fea72cb65d

View File

@@ -1257,13 +1257,13 @@ static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *
struct sip_peer *peer=NULL; struct sip_peer *peer=NULL;
struct ast_variable *var; struct ast_variable *var;
struct ast_variable *tmp; struct ast_variable *tmp;
char *newpeername = (char *) peername;
char iabuf[80] = "";
/* First check on peer name */ /* First check on peer name */
if (peername) if (newpeername)
var = ast_load_realtime("sippeers", "name", peername, NULL); var = ast_load_realtime("sippeers", "name", peername, NULL);
else if (sin) { /* Then check on IP address */ else if (sin) { /* Then check on IP address */
char iabuf[80];
ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr); ast_inet_ntoa(iabuf, sizeof(iabuf), sin->sin_addr);
var = ast_load_realtime("sippeers", "ipaddr", iabuf, NULL); var = ast_load_realtime("sippeers", "ipaddr", iabuf, NULL);
} else } else
@@ -1279,23 +1279,30 @@ static struct sip_peer *realtime_peer(const char *peername, struct sockaddr_in *
!strcasecmp(tmp->value, "user")) { !strcasecmp(tmp->value, "user")) {
ast_variables_destroy(var); ast_variables_destroy(var);
return NULL; return NULL;
} else if(!newpeername && !strcasecmp(tmp->name, "name")) {
newpeername = tmp->value;
} }
tmp = tmp->next; tmp = tmp->next;
} }
peer = build_peer(peername, var, ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS) ? 0 : 1); if (newpeername) {
peer = build_peer(newpeername, var, ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS) ? 0 : 1);
if (peer) { if (peer) {
if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTCACHEFRIENDS)) { 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); 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)) { if(ast_test_flag((&global_flags_page2), SIP_PAGE2_RTAUTOCLEAR)) {
peer->expire = ast_sched_add(sched, (global_rtautoclear) * 1000, expire_register, (void *)peer); 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); ast_variables_destroy(var);
return peer; return peer;
} }