]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
Use ast_sockaddr_from_sin function not memcpy
authorPaul Belanger <paul.belanger@polybeacon.com>
Mon, 1 Nov 2010 16:09:05 +0000 (16:09 +0000)
committerPaul Belanger <paul.belanger@polybeacon.com>
Mon, 1 Nov 2010 16:09:05 +0000 (16:09 +0000)
This resolves some IAX2 registration issue report on the
asterisk-users mailing list.

(closes issue #18202)
Reported by: pabelanger
Patches:
      update_registry.patch.v2 uploaded by pabelanger (license 224)
Tested by: pabelanger, Nic Colledge (mailing list)

Review: https://reviewboard.asterisk.org/r/993

git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@293496 65c4cc65-6c06-0410-ace0-fbb531ad65f3

channels/chan_iax2.c

index 5f962155d1150700db991ecd798ddb5b3f1b5b3f..c21c18246160680ab7f5d98dab5bc90c0be67dde 100644 (file)
@@ -8700,7 +8700,7 @@ static int update_registry(struct sockaddr_in *sin, int callno, char *devtype, i
                peercnt_modify(0, 0, &p->addr);
 
                /* Stash the IP address from which they registered */
-               memcpy(&p->addr, sin, sizeof(p->addr));
+               ast_sockaddr_from_sin(&p->addr, sin);
 
                snprintf(data, sizeof(data), "%s:%d:%d", ast_inet_ntoa(sin->sin_addr), ntohs(sin->sin_port), p->expiry);
                if (!ast_test_flag64(p, IAX_TEMPONLY) && sin->sin_addr.s_addr) {
@@ -11190,10 +11190,13 @@ immediatedial:
                                if ((ast_strlen_zero(iaxs[fr->callno]->secret) && ast_strlen_zero(iaxs[fr->callno]->inkeys)) ||
                                                ast_test_flag(&iaxs[fr->callno]->state, IAX_STATE_AUTHENTICATED)) {
 
-                                       if (f.subclass.integer == IAX_COMMAND_REGREL)
+                                       if (f.subclass.integer == IAX_COMMAND_REGREL) {
                                                memset(&sin, 0, sizeof(sin));
-                                       if (update_registry(&sin, fr->callno, ies.devicetype, fd, ies.refresh))
+                                               sin.sin_family = AF_INET;
+                                       }
+                                       if (update_registry(&sin, fr->callno, ies.devicetype, fd, ies.refresh)) {
                                                ast_log(LOG_WARNING, "Registry error\n");
+                                       }
                                        if (!iaxs[fr->callno]) {
                                                break;
                                        }