@ -2740,18 +2740,16 @@ static struct iax2_user *realtime_user(const char *username)
return user ;
}
static void realtime_update_peer ( const char * peername , struct sockaddr_in * sin )
static void realtime_update_peer ( const char * peername , struct sockaddr_in * sin , time_t regtime )
{
char port [ 10 ] ;
char ipaddr [ 20 ] ;
char regseconds [ 20 ] ;
time_t nowtime ;
char port [ 10 ] ;
char ipaddr [ 20 ] ;
char regseconds [ 20 ] ;
time ( & nowtime ) ;
snprintf ( regseconds , sizeof ( regseconds ) , " %d " , ( int ) nowtime ) ;
ast_inet_ntoa ( ipaddr , sizeof ( ipaddr ) , sin - > sin_addr ) ;
snprintf ( port , sizeof ( port ) , " %d " , ntohs ( sin - > sin_port ) ) ;
ast_update_realtime ( " iaxpeers " , " name " , peername , " ipaddr " , ipaddr , " port " , port , " regseconds " , regseconds , NULL ) ;
snprintf ( regseconds , sizeof ( regseconds ) , " %d " , ( int ) regtime ) ;
ast_inet_ntoa ( ipaddr , sizeof ( ipaddr ) , sin - > sin_addr ) ;
snprintf ( port , sizeof ( port ) , " %d " , ntohs ( sin - > sin_port ) ) ;
ast_update_realtime ( " iaxpeers " , " name " , peername , " ipaddr " , ipaddr , " port " , port , " regseconds " , regseconds , NULL ) ;
}
struct create_addr_info {
@ -5654,6 +5652,8 @@ static int expire_registry(void *data)
struct iax2_peer * p = data ;
ast_log ( LOG_DEBUG , " Expiring registration for peer '%s' \n " , p - > name ) ;
if ( ast_test_flag ( ( & globalflags ) , IAX_RTUPDATE ) & & ( ast_test_flag ( p , IAX_TEMPONLY | IAX_RTCACHEFRIENDS ) ) )
realtime_update_peer ( p - > name , & p - > addr , 0 ) ;
/* Reset the address */
memset ( & p - > addr , 0 , sizeof ( p - > addr ) ) ;
/* Reset expire notice */
@ -5735,8 +5735,14 @@ static int update_registry(char *name, struct sockaddr_in *sin, int callno, char
return - 1 ;
}
if ( ast_test_flag ( ( & globalflags ) , IAX_RTUPDATE ) & & ( ast_test_flag ( p , IAX_TEMPONLY | IAX_RTCACHEFRIENDS ) ) )
realtime_update_peer ( name , sin ) ;
if ( ast_test_flag ( ( & globalflags ) , IAX_RTUPDATE ) & & ( ast_test_flag ( p , IAX_TEMPONLY | IAX_RTCACHEFRIENDS ) ) ) {
if ( sin - > sin_addr . s_addr ) {
time_t nowtime ;
time ( & nowtime ) ;
realtime_update_peer ( name , sin , nowtime ) ;
} else
realtime_update_peer ( name , sin , 0 ) ;
}
if ( inaddrcmp ( & p - > addr , sin ) ) {
if ( iax2_regfunk )
iax2_regfunk ( p - > name , 1 ) ;