Commit 98a07066 authored by John Selbie's avatar John Selbie

recvfromex no longer sets port number

parent d4c403c4
......@@ -473,8 +473,7 @@ Cleanup:
HRESULT UdpClientLoop(StunClientLogicConfig& config, const ClientSocketConfig& socketconfig)
{
HRESULT hr = S_OK;
CRefCountedStunSocket spStunSocket;
CStunSocket stunSocket;;
CStunSocket stunSocket;
CRefCountedBuffer spMsg(new CBuffer(MAX_STUN_MESSAGE_SIZE));
int sock = -1;
CSocketAddress addrDest; // who we send to
......@@ -566,6 +565,7 @@ HRESULT UdpClientLoop(StunClientLogicConfig& config, const ClientSocketConfig& s
ret = ::recvfromex(sock, spMsg->GetData(), spMsg->GetAllocatedSize(), MSG_DONTWAIT, &addrRemote, &addrLocal);
if (ret > 0)
{
addrLocal.SetPort(stunSocket.GetLocalAddress().GetPort()); // recvfromex doesn't fill in the dest port value, only dest IP
addrRemote.ToString(&strAddr);
addrLocal.ToString(&strAddrLocal);
Logging::LogMsg(LL_DEBUG, "Got response (%d bytes) from %s on interface %s", ret, strAddr.c_str(), strAddrLocal.c_str());
......
......@@ -20,32 +20,6 @@
#include "socketaddress.h"
static void GetLocalPortNumberFromSocket(int sockfd, CSocketAddress* pAddr)
{
sockaddr_storage addr = {};
socklen_t len = sizeof(addr);
int ret;
ret = ::getsockname(sockfd, (sockaddr*)&addr, &len);
if (ret != -1)
{
uint16_t port=0;
if (addr.ss_family == AF_INET)
{
port = ntohs(((sockaddr_in*)&addr)->sin_port);
}
else if (addr.ss_family == AF_INET6)
{
port = ntohs(((sockaddr_in6*)&addr)->sin6_port);
}
pAddr->SetPort(port);
}
}
static void InitSocketAddress(int family, CSocketAddress* pAddr)
{
if (family == AF_INET)
......@@ -112,7 +86,6 @@ ssize_t recvfromex(int sockfd, void* buf, size_t len, int flags, CSocketAddress*
addr.sin6_family = AF_INET6;
addr.sin6_addr = pInfo->ipi6_addr;
*pDstAddr = CSocketAddress(addr);
GetLocalPortNumberFromSocket(sockfd, pDstAddr);
break;
}
......@@ -129,7 +102,6 @@ ssize_t recvfromex(int sockfd, void* buf, size_t len, int flags, CSocketAddress*
addr.sin_family = AF_INET;
addr.sin_addr = pInfo->ipi_addr;
*pDstAddr = CSocketAddress(addr);
GetLocalPortNumberFromSocket(sockfd, pDstAddr);
break;
}
#endif
......@@ -142,7 +114,6 @@ ssize_t recvfromex(int sockfd, void* buf, size_t len, int flags, CSocketAddress*
addr.sin_family = AF_INET;
addr.sin_addr = *(in_addr*)CMSG_DATA(pCmsg);
*pDstAddr = CSocketAddress(addr);
GetLocalPortNumberFromSocket(sockfd, pDstAddr);
break;
}
#endif
......
......@@ -314,6 +314,12 @@ void CStunSocketThread::Run()
ret = ::recvfromex(pSocket->GetSocketHandle(), _spBufferIn->GetData(), _spBufferIn->GetAllocatedSize(), recvflags, &_msgIn.addrRemote, &_msgIn.addrLocal);
// recvfromex no longer sets the port value on the local address
if (ret >= 0)
{
_msgIn.addrLocal.SetPort(pSocket->GetLocalAddress().GetPort());
}
if (Logging::GetLogLevel() >= LL_VERBOSE)
{
char szIPRemote[100];
......@@ -333,7 +339,7 @@ void CStunSocketThread::Run()
{
break;
}
_spBufferIn->SetSize(ret);
_msgIn.socketrole = pSocket->GetRole();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment