--- chan_sip.c.bk 2007-02-12 23:47:11.000000000 +0100 +++ chan_sip.c 2007-02-12 23:47:12.000000000 +0100 @@ -28,7 +28,6 @@ * \todo Better support of forking */ - #include #include #include @@ -1614,17 +1613,30 @@ static void realtime_update_peer(const c char ipaddr[20]; char regseconds[20]; time_t nowtime; - + + char ipsvr[20]; + 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(&nowtime); nowtime += expirey; snprintf(regseconds, sizeof(regseconds), "%d", (int)nowtime); /* Expiration time */ ast_inet_ntoa(ipaddr, sizeof(ipaddr), sin->sin_addr); snprintf(port, sizeof(port), "%d", ntohs(sin->sin_port)); - + + memcpy((char *)them, (char*)&sin->sin_addr, sizeof(&sin->sin_addr)); + ast_ouraddrfor(them, us); + memcpy((char *)&sockaddr_us->sin_addr.s_addr, (char*)&us->s_addr, sizeof(&us->s_addr)); + ast_inet_ntoa(ipsvr, sizeof(ipsvr), sockaddr_us->sin_addr); + if (fullcontact) - ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, "fullcontact", fullcontact, NULL); + ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, "fullcontact", fullcontact, "ipsvr", ipsvr, NULL); else - ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, NULL); + ast_update_realtime("sippeers", "name", peername, "ipaddr", ipaddr, "port", port, "regseconds", regseconds, "username", username, "ipsvr", ipsvr, NULL); } /*! \brief register_peer_exten: Automatically add peer extension to dial plan ---*/