From 6fa2ab95e2e040ba4a5fef0889e9df6d7853f918 Mon Sep 17 00:00:00 2001 From: Richard Newman Date: Thu, 21 Feb 2008 18:54:24 +0000 Subject: [PATCH] Use correct sizeof for IPv4/IPv6 in udp_trsp::send. git-svn-id: http://svn.berlios.de/svnroot/repos/sems/trunk@745 8eb893ce-cfd4-0310-b710-fb5ebe64c474 --- core/plug-in/sipctrl/udp_trsp.cpp | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/core/plug-in/sipctrl/udp_trsp.cpp b/core/plug-in/sipctrl/udp_trsp.cpp index b636083a..29986680 100644 --- a/core/plug-in/sipctrl/udp_trsp.cpp +++ b/core/plug-in/sipctrl/udp_trsp.cpp @@ -201,15 +201,26 @@ int udp_trsp::bind(const string& address, unsigned short port) /** @see transport */ int udp_trsp::send(const sockaddr_storage* sa, const char* msg, const int msg_len) { - int err = sendto(sd,msg,msg_len,0,(const struct sockaddr*)sa,sizeof(sockaddr_storage)); - if(err < 0){ - ERROR("sendto: %s\n",strerror(errno)); - return err; - } - else if(err != msg_len){ - ERROR("sendto: sent %i instead of %i bytes\n",err,msg_len); - return -1; - } + int err; +#ifdef SUPPORT_IPV6 + if (sa->ss_family == AF_INET6) { + err = sendto(sd, msg, msg_len, 0, (const struct sockaddr*)sa, sizeof(sockaddr_in6)); + } + else { +#endif + err = sendto(sd, msg, msg_len, 0, (const struct sockaddr*)sa, sizeof(sockaddr_in)); +#ifdef SUPPORT_IPV6 + } +#endif - return 0; + if (err < 0) { + ERROR("sendto: %s\n",strerror(errno)); + return err; + } + else if (err != msg_len) { + ERROR("sendto: sent %i instead of %i bytes\n", err, msg_len); + return -1; + } + + return 0; }