--- chan_sip.c 2007-02-19 15:59:49.000000000 +0100 +++ chan_sip.c.new 2007-02-19 15:44:44.000000000 +0100 @@ -2291,20 +2291,30 @@ static void realtime_update_peer(const c char ipaddr[INET_ADDRSTRLEN]; char regseconds[20]; - char *sysname = ast_config_AST_SYSTEM_NAME; + char sysname[20]; /* before char* to ast_config_AST_SYSTEM_NAME */ char *syslabel = NULL; + struct in_addr *us; + struct in_addr *them; + struct sockaddr_in *sockaddr_us; + us = malloc(sizeof(struct in_addr)); + them = malloc(sizeof(struct in_addr)); + sockaddr_us = malloc(sizeof(struct sockaddr_in)); + time_t nowtime = time(NULL) + expirey; const char *fc = fullcontact ? "fullcontact" : NULL; snprintf(regseconds, sizeof(regseconds), "%d", (int)nowtime); /* Expiration time */ ast_copy_string(ipaddr, ast_inet_ntoa(sin->sin_addr), sizeof(ipaddr)); snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port)); - - if (ast_strlen_zero(sysname)) /* No system name, disable this */ - sysname = NULL; - else if (ast_test_flag(&global_flags[1], SIP_PAGE2_RTSAVE_SYSNAME)) - syslabel = "regserver"; + + memcpy((char *)them, (char*)&sin->sin_addr, sizeof(&sin->sin_addr)); + ast_sip_ouraddrfor(them, us); + memcpy((char *)&sockaddr_us->sin_addr.s_addr, (char*)&us->s_addr, sizeof(&us->s_addr)); + ast_copy_string(sysname, ast_inet_ntoa(sockaddr_us->sin_addr), sizeof(sysname)); + + if (ast_test_flag(&global_flags[1], SIP_PAGE2_RTSAVE_SYSNAME)) + syslabel = "regserver"; if (fc) ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr,