mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-13 23:46:51 +01:00
Fix IPv6 address scope bug
Signed-off-by: Ciupis, Jedrzej <jedrzej.ciupis@nordicsemi.no>
This commit is contained in:
@@ -328,12 +328,15 @@ int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* add
|
|||||||
hints.ai_family = AF_INET6; // use IPv6
|
hints.ai_family = AF_INET6; // use IPv6
|
||||||
hints.ai_socktype = SOCK_DGRAM;
|
hints.ai_socktype = SOCK_DGRAM;
|
||||||
|
|
||||||
|
int port = 0;
|
||||||
string portStr;
|
string portStr;
|
||||||
if(addr->getPortNo() != 0)
|
if(addr->getPortNo() != 0)
|
||||||
{
|
{
|
||||||
portStr = to_string(addr->getPortNo());
|
port = htons(addr->getPortNo());
|
||||||
|
portStr = to_string(port);
|
||||||
} else {
|
} else {
|
||||||
portStr = to_string(_uniPortNo);
|
port = _uniPortNo;
|
||||||
|
portStr = to_string(port);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(strlen(_interfaceName) != 0)
|
if(strlen(_interfaceName) != 0)
|
||||||
@@ -341,8 +344,16 @@ int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* add
|
|||||||
strcpy(destStr, addr->getAddress());
|
strcpy(destStr, addr->getAddress());
|
||||||
strcat(destStr,"%");
|
strcat(destStr,"%");
|
||||||
strcat(destStr,_interfaceName);
|
strcat(destStr,_interfaceName);
|
||||||
|
if(IN6_IS_ADDR_LINKLOCAL(addr->getAddress()))
|
||||||
|
{
|
||||||
getaddrinfo(destStr, portStr.c_str(), &hints, &res);
|
getaddrinfo(destStr, portStr.c_str(), &hints, &res);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getaddrinfo(addr->getAddress(), portStr.c_str(), &hints, &res);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
strcpy(destStr, addr->getAddress());
|
||||||
getaddrinfo(addr->getAddress(), portStr.c_str(), &hints, &res);
|
getaddrinfo(addr->getAddress(), portStr.c_str(), &hints, &res);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -353,7 +364,7 @@ int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* add
|
|||||||
WRITELOG("errno in UDPPort::unicast(sendto): %d, %s\n",status,strerror(status));
|
WRITELOG("errno in UDPPort::unicast(sendto): %d, %s\n",status,strerror(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITELOG("unicast sendto %s, port: %d length = %d\n", destStr,portStr.c_str(),status);
|
WRITELOG("unicast sendto %s, port: %d length = %d\n", destStr,port,status);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -376,7 +387,15 @@ int UDPPort6::broadcast(const uint8_t* buf, uint32_t length)
|
|||||||
strcpy(destStr, _grpAddr.getAddress());
|
strcpy(destStr, _grpAddr.getAddress());
|
||||||
strcat(destStr,"%");
|
strcat(destStr,"%");
|
||||||
strcat(destStr,_interfaceName);
|
strcat(destStr,_interfaceName);
|
||||||
|
if(IN6_IS_ADDR_MC_NODELOCAL(_grpAddr.getAddress()) ||
|
||||||
|
IN6_IS_ADDR_MC_LINKLOCAL(_grpAddr.getAddress()))
|
||||||
|
{
|
||||||
err = getaddrinfo(destStr, std::to_string(_uniPortNo).c_str(), &hint, &info );
|
err = getaddrinfo(destStr, std::to_string(_uniPortNo).c_str(), &hint, &info );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
err = getaddrinfo(_grpAddr.getAddress(), std::to_string(_uniPortNo).c_str(), &hint, &info );
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
err = getaddrinfo(_grpAddr.getAddress(), std::to_string(_uniPortNo).c_str(), &hint, &info );
|
err = getaddrinfo(_grpAddr.getAddress(), std::to_string(_uniPortNo).c_str(), &hint, &info );
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user