Improve ssdp part
Do not compile CreateClientRequestPacketUlaGua if IPv6 is disable. Cast DestAddr->sa_family from sa_family_t into int when calling CreateServicePacket as this function has been set back to accept int in a692e591defe6ed9a617b9b4a083964a01f7bbab. Use switch instead of if with AF_INET and AF_INET6. Add missing casts from AF_INET and AF_INET6 into sa_family_t when using them to set sin_family and sin6_family. Add missing explicit casts into size_t or lu when using integer constants with strlen or unsigned long indexes. Set SSDP_PAUSE to be unsigned as it is used with usleep.
This commit is contained in:
parent
d48d73720b
commit
850e6b4849
15
ChangeLog
15
ChangeLog
@ -2,6 +2,21 @@
|
||||
Version 1.6.16
|
||||
*******************************************************************************
|
||||
|
||||
2012-03-14 Fabrice Fontaine <fabrice.fontaine(at)orange.com>
|
||||
|
||||
Improve ssdp part
|
||||
|
||||
Do not compile CreateClientRequestPacketUlaGua if IPv6 is disable.
|
||||
Cast DestAddr->sa_family from sa_family_t into int when calling
|
||||
CreateServicePacket as this function has been set back to accept int in
|
||||
a692e591defe6ed9a617b9b4a083964a01f7bbab.
|
||||
Use switch instead of if with AF_INET and AF_INET6.
|
||||
Add missing casts from AF_INET and AF_INET6 into sa_family_t when using
|
||||
them to set sin_family and sin6_family.
|
||||
Add missing explicit casts into size_t or lu when using integer
|
||||
constants with strlen or unsigned long indexes.
|
||||
Set SSDP_PAUSE to be unsigned as it is used with usleep.
|
||||
|
||||
2012-03-14 Fabrice Fontaine <fabrice.fontaine(at)orange.com>
|
||||
|
||||
Use switch insted of if with enums in ixml
|
||||
|
@ -179,7 +179,7 @@
|
||||
*
|
||||
* @{
|
||||
*/
|
||||
#define SSDP_PAUSE 100
|
||||
#define SSDP_PAUSE 100u
|
||||
/* @} */
|
||||
|
||||
/*!
|
||||
|
@ -330,13 +330,16 @@ static int CreateClientRequestPacket(
|
||||
return UPNP_E_INTERNAL_ERROR;
|
||||
strcpy(RqstBuf, command);
|
||||
|
||||
if (AddressFamily == AF_INET) {
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
rc = snprintf(TempBuf, sizeof(TempBuf), "HOST: %s:%d\r\n", SSDP_IP,
|
||||
SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
rc = snprintf(TempBuf, sizeof(TempBuf), "HOST: [%s]:%d\r\n",
|
||||
SSDP_IPV6_LINKLOCAL, SSDP_PORT);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
return UPNP_E_INVALID_ARGUMENT;
|
||||
}
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(TempBuf))
|
||||
@ -377,6 +380,7 @@ static int CreateClientRequestPacket(
|
||||
/*!
|
||||
* \brief
|
||||
*/
|
||||
#ifdef UPNP_ENABLE_IPV6
|
||||
static int CreateClientRequestPacketUlaGua(
|
||||
/*! [in,out] . */
|
||||
char *RqstBuf,
|
||||
@ -398,13 +402,16 @@ static int CreateClientRequestPacketUlaGua(
|
||||
if (RqstBufSize <= strlen(command))
|
||||
return UPNP_E_INTERNAL_ERROR;
|
||||
strcpy(RqstBuf, command);
|
||||
if (AddressFamily == AF_INET) {
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
rc = snprintf(TempBuf, sizeof(TempBuf), "HOST: %s:%d\r\n", SSDP_IP,
|
||||
SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
rc = snprintf(TempBuf, sizeof(TempBuf), "HOST: [%s]:%d\r\n",
|
||||
SSDP_IPV6_SITELOCAL, SSDP_PORT);
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
return UPNP_E_INVALID_ARGUMENT;
|
||||
}
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(TempBuf))
|
||||
@ -440,6 +447,7 @@ static int CreateClientRequestPacketUlaGua(
|
||||
|
||||
return UPNP_E_SUCCESS;
|
||||
}
|
||||
#endif /* UPNP_ENABLE_IPV6 */
|
||||
|
||||
/*!
|
||||
* \brief
|
||||
@ -547,13 +555,13 @@ int SearchByTarget(int Mx, char *St, void *Cookie)
|
||||
#endif
|
||||
|
||||
memset(&__ss_v4, 0, sizeof(__ss_v4));
|
||||
destAddr4->sin_family = AF_INET;
|
||||
destAddr4->sin_family = (sa_family_t)AF_INET;
|
||||
inet_pton(AF_INET, SSDP_IP, &destAddr4->sin_addr);
|
||||
destAddr4->sin_port = htons(SSDP_PORT);
|
||||
|
||||
#ifdef UPNP_ENABLE_IPV6
|
||||
memset(&__ss_v6, 0, sizeof(__ss_v6));
|
||||
destAddr6->sin6_family = AF_INET6;
|
||||
destAddr6->sin6_family = (sa_family_t)AF_INET6;
|
||||
inet_pton(AF_INET6, SSDP_IPV6_SITELOCAL, &destAddr6->sin6_addr);
|
||||
destAddr6->sin6_port = htons(SSDP_PORT);
|
||||
destAddr6->sin6_scope_id = gIF_INDEX;
|
||||
|
@ -197,7 +197,8 @@ static int NewRequestHandler(
|
||||
return UPNP_E_OUTOF_SOCKET;
|
||||
}
|
||||
|
||||
if (DestAddr->sa_family == AF_INET) {
|
||||
switch (DestAddr->sa_family) {
|
||||
case AF_INET:
|
||||
inet_ntop(AF_INET, &((struct sockaddr_in *)DestAddr)->sin_addr,
|
||||
buf_ntop, sizeof(buf_ntop));
|
||||
setsockopt(ReplySock, IPPROTO_IP, IP_MULTICAST_IF,
|
||||
@ -205,7 +206,8 @@ static int NewRequestHandler(
|
||||
setsockopt(ReplySock, IPPROTO_IP, IP_MULTICAST_TTL,
|
||||
(char *)&ttl, sizeof(int));
|
||||
socklen = sizeof(struct sockaddr_in);
|
||||
} else if (DestAddr->sa_family == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
inet_ntop(AF_INET6,
|
||||
&((struct sockaddr_in6 *)DestAddr)->sin6_addr,
|
||||
buf_ntop, sizeof(buf_ntop));
|
||||
@ -213,7 +215,8 @@ static int NewRequestHandler(
|
||||
(char *)&gIF_INDEX, sizeof(gIF_INDEX));
|
||||
setsockopt(ReplySock, IPPROTO_IPV6, IPV6_MULTICAST_HOPS,
|
||||
(char *)&hops, sizeof(hops));
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
UpnpPrintf(UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||
"Invalid destination address specified.");
|
||||
ret = UPNP_E_NETWORK_ERROR;
|
||||
@ -380,9 +383,11 @@ static void CreateServicePacket(
|
||||
nts = "ssdp:byebye";
|
||||
/* NOTE: The CACHE-CONTROL and LOCATION headers are not present in
|
||||
* a shutdown msg, but are present here for MS WinMe interop. */
|
||||
if (AddressFamily == AF_INET)
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
host = SSDP_IP;
|
||||
else {
|
||||
break;
|
||||
default:
|
||||
if (isUrlV6UlaGua(location))
|
||||
host = "[" SSDP_IPV6_SITELOCAL "]";
|
||||
else
|
||||
@ -445,18 +450,21 @@ int DeviceAdvertisement(char *DevType, int RootDev, char *Udn, char *Location,
|
||||
UpnpPrintf(UPNP_INFO, SSDP, __FILE__, __LINE__,
|
||||
"In function DeviceAdvertisement\n");
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
if (AddressFamily == AF_INET) {
|
||||
DestAddr4->sin_family = (unsigned short)AF_INET;
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
DestAddr4->sin_family = (sa_family_t)AF_INET;
|
||||
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
|
||||
DestAddr4->sin_port = htons(SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
DestAddr6->sin6_family = (unsigned short)AF_INET6;
|
||||
break;
|
||||
case AF_INET6:
|
||||
DestAddr6->sin6_family = (sa_family_t)AF_INET6;
|
||||
inet_pton(AF_INET6,
|
||||
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
|
||||
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
|
||||
DestAddr6->sin6_port = htons(SSDP_PORT);
|
||||
DestAddr6->sin6_scope_id = gIF_INDEX;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
UpnpPrintf(UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||
"Invalid device address family.\n");
|
||||
}
|
||||
@ -533,7 +541,7 @@ int SendReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, "upnp:rootdevice",
|
||||
Mil_Usn, Location, Duration, &msgs[0],
|
||||
DestAddr->sa_family, PowerState,
|
||||
(int)DestAddr->sa_family, PowerState,
|
||||
SleepPeriod, RegistrationState);
|
||||
} else {
|
||||
/* two msgs for embedded devices */
|
||||
@ -543,7 +551,7 @@ int SendReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
if (!ByType) {
|
||||
CreateServicePacket(MSGTYPE_REPLY, Udn, Udn, Location,
|
||||
Duration, &msgs[0],
|
||||
DestAddr->sa_family, PowerState,
|
||||
(int)DestAddr->sa_family, PowerState,
|
||||
SleepPeriod, RegistrationState);
|
||||
} else {
|
||||
rc = snprintf(Mil_Usn, sizeof(Mil_Usn), "%s::%s", Udn,
|
||||
@ -552,7 +560,7 @@ int SendReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, DevType, Mil_Usn,
|
||||
Location, Duration, &msgs[0],
|
||||
DestAddr->sa_family, PowerState,
|
||||
(int)DestAddr->sa_family, PowerState,
|
||||
SleepPeriod, RegistrationState);
|
||||
}
|
||||
}
|
||||
@ -595,7 +603,7 @@ int DeviceReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, Mil_Nt, Mil_Usn,
|
||||
Location, Duration, &szReq[0],
|
||||
DestAddr->sa_family, PowerState,
|
||||
(int)DestAddr->sa_family, PowerState,
|
||||
SleepPeriod, RegistrationState);
|
||||
}
|
||||
rc = snprintf(Mil_Nt, sizeof(Mil_Nt), "%s", Udn);
|
||||
@ -605,7 +613,7 @@ int DeviceReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(Mil_Usn))
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, Mil_Nt, Mil_Usn,
|
||||
Location, Duration, &szReq[1], DestAddr->sa_family,
|
||||
Location, Duration, &szReq[1], (int)DestAddr->sa_family,
|
||||
PowerState, SleepPeriod, RegistrationState);
|
||||
rc = snprintf(Mil_Nt, sizeof(Mil_Nt), "%s", DevType);
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(Mil_Nt))
|
||||
@ -614,7 +622,7 @@ int DeviceReply(struct sockaddr *DestAddr, char *DevType, int RootDev,
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(Mil_Usn))
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, Mil_Nt, Mil_Usn,
|
||||
Location, Duration, &szReq[2], DestAddr->sa_family,
|
||||
Location, Duration, &szReq[2], (int)DestAddr->sa_family,
|
||||
PowerState, SleepPeriod, RegistrationState);
|
||||
/* check error */
|
||||
if ((RootDev && szReq[0] == NULL) ||
|
||||
@ -651,18 +659,21 @@ int ServiceAdvertisement(char *Udn, char *ServType, char *Location,
|
||||
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
szReq[0] = NULL;
|
||||
if (AddressFamily == AF_INET) {
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
DestAddr4->sin_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
|
||||
DestAddr4->sin_port = htons(SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
DestAddr6->sin6_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET6,
|
||||
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
|
||||
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
|
||||
DestAddr6->sin6_port = htons(SSDP_PORT);
|
||||
DestAddr6->sin6_scope_id = gIF_INDEX;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
UpnpPrintf(UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||
"Invalid device address family.\n");
|
||||
}
|
||||
@ -699,7 +710,7 @@ int ServiceReply(struct sockaddr *DestAddr, char *ServType, char *Udn,
|
||||
if (rc < 0 || (unsigned int) rc >= sizeof(Mil_Usn))
|
||||
goto error_handler;
|
||||
CreateServicePacket(MSGTYPE_REPLY, ServType, Mil_Usn,
|
||||
Location, Duration, &szReq[0], DestAddr->sa_family,
|
||||
Location, Duration, &szReq[0], (int)DestAddr->sa_family,
|
||||
PowerState, SleepPeriod, RegistrationState);
|
||||
if (szReq[0] == NULL)
|
||||
goto error_handler;
|
||||
@ -725,18 +736,21 @@ int ServiceShutdown(char *Udn, char *ServType, char *Location, int Duration,
|
||||
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
szReq[0] = NULL;
|
||||
if (AddressFamily == AF_INET) {
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
DestAddr4->sin_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
|
||||
DestAddr4->sin_port = htons(SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
DestAddr6->sin6_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET6,
|
||||
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
|
||||
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
|
||||
DestAddr6->sin6_port = htons(SSDP_PORT);
|
||||
DestAddr6->sin6_scope_id = gIF_INDEX;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
UpnpPrintf(UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||
"Invalid device address family.\n");
|
||||
}
|
||||
@ -775,18 +789,21 @@ int DeviceShutdown(char *DevType, int RootDev, char *Udn, char *_Server,
|
||||
msgs[1] = NULL;
|
||||
msgs[2] = NULL;
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
if (AddressFamily == AF_INET) {
|
||||
switch (AddressFamily) {
|
||||
case AF_INET:
|
||||
DestAddr4->sin_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET, SSDP_IP, &DestAddr4->sin_addr);
|
||||
DestAddr4->sin_port = htons(SSDP_PORT);
|
||||
} else if (AddressFamily == AF_INET6) {
|
||||
break;
|
||||
case AF_INET6:
|
||||
DestAddr6->sin6_family = (sa_family_t)AddressFamily;
|
||||
inet_pton(AF_INET6,
|
||||
(isUrlV6UlaGua(Location)) ? SSDP_IPV6_SITELOCAL :
|
||||
SSDP_IPV6_LINKLOCAL, &DestAddr6->sin6_addr);
|
||||
DestAddr6->sin6_port = htons(SSDP_PORT);
|
||||
DestAddr6->sin6_scope_id = gIF_INDEX;
|
||||
} else {
|
||||
break;
|
||||
default:
|
||||
UpnpPrintf(UPNP_CRITICAL, SSDP, __FILE__, __LINE__,
|
||||
"Invalid device address family.\n");
|
||||
}
|
||||
|
@ -133,7 +133,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
if (NumCopy != 0)
|
||||
imillisleep(SSDP_PAUSE);
|
||||
NumCopy++;
|
||||
for (i = 0;; i++) {
|
||||
for (i = 0lu;; i++) {
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"Entering new device list with i = %lu\n\n",
|
||||
i);
|
||||
@ -156,7 +156,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
"Extracting UDN for %s\n", dbgStr);
|
||||
UpnpPrintf(UPNP_ALL, API, __FILE__, __LINE__,
|
||||
"Extracting device type\n");
|
||||
tmpNode2 = ixmlNodeList_item(nodeList, 0);
|
||||
tmpNode2 = ixmlNodeList_item(nodeList, 0lu);
|
||||
if (!tmpNode2)
|
||||
continue;
|
||||
textNode = ixmlNode_getFirstChild(tmpNode2);
|
||||
@ -184,7 +184,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
__LINE__, "UDN not found!\n");
|
||||
continue;
|
||||
}
|
||||
tmpNode2 = ixmlNodeList_item(nodeList, 0);
|
||||
tmpNode2 = ixmlNodeList_item(nodeList, 0lu);
|
||||
if (!tmpNode2) {
|
||||
UpnpPrintf(UPNP_CRITICAL, API, __FILE__,
|
||||
__LINE__, "UDN not found!\n");
|
||||
@ -208,7 +208,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
if (AdFlag) {
|
||||
/* send the device advertisement */
|
||||
if (AdFlag == 1) {
|
||||
DeviceAdvertisement(devType, i == 0,
|
||||
DeviceAdvertisement(devType, i == 0lu,
|
||||
UDNstr,
|
||||
SInfo->DescURL, Exp,
|
||||
SInfo->DeviceAf,
|
||||
@ -217,7 +217,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
SInfo->RegistrationState);
|
||||
} else {
|
||||
/* AdFlag == -1 */
|
||||
DeviceShutdown(devType, i == 0, UDNstr,
|
||||
DeviceShutdown(devType, i == 0lu, UDNstr,
|
||||
SERVER, SInfo->DescURL,
|
||||
Exp, SInfo->DeviceAf,
|
||||
SInfo->PowerState,
|
||||
@ -227,14 +227,14 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
} else {
|
||||
switch (SearchType) {
|
||||
case SSDP_ALL:
|
||||
DeviceReply(DestAddr, devType, i == 0,
|
||||
DeviceReply(DestAddr, devType, i == 0lu,
|
||||
UDNstr, SInfo->DescURL,
|
||||
defaultExp, SInfo->PowerState,
|
||||
SInfo->SleepPeriod,
|
||||
SInfo->RegistrationState);
|
||||
break;
|
||||
case SSDP_ROOTDEVICE:
|
||||
if (i == 0) {
|
||||
if (i == 0lu) {
|
||||
SendReply(DestAddr, devType, 1,
|
||||
UDNstr,
|
||||
SInfo->DescURL,
|
||||
@ -245,7 +245,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
}
|
||||
break;
|
||||
case SSDP_DEVICEUDN: {
|
||||
if (DeviceUDN && strlen(DeviceUDN) != 0) {
|
||||
if (DeviceUDN && strlen(DeviceUDN) != (size_t)0) {
|
||||
if (strcasecmp(DeviceUDN, UDNstr)) {
|
||||
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__,
|
||||
"DeviceUDN=%s and search UDN=%s DID NOT match\n",
|
||||
@ -264,9 +264,9 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
}
|
||||
}
|
||||
case SSDP_DEVICETYPE: {
|
||||
if (!strncasecmp(DeviceType, devType, strlen(DeviceType) - 2)) {
|
||||
if (!strncasecmp(DeviceType, devType, strlen(DeviceType) - (size_t)2)) {
|
||||
if (atoi(strrchr(DeviceType, ':') + 1)
|
||||
< atoi(&devType[strlen(devType) - 1])) {
|
||||
< atoi(&devType[strlen(devType) - (size_t)1])) {
|
||||
/* the requested version is lower than the device version
|
||||
* must reply with the lower version number and the lower
|
||||
* description URL */
|
||||
@ -279,7 +279,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
SInfo->SleepPeriod,
|
||||
SInfo->RegistrationState);
|
||||
} else if (atoi(strrchr(DeviceType, ':') + 1)
|
||||
== atoi(&devType[strlen(devType) - 1])) {
|
||||
== atoi(&devType[strlen(devType) - (size_t)1])) {
|
||||
UpnpPrintf(UPNP_INFO, API, __FILE__, __LINE__,
|
||||
"DeviceType=%s and search devType=%s MATCH\n",
|
||||
devType, DeviceType);
|
||||
@ -333,7 +333,7 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
"Service not found 3\n");
|
||||
continue;
|
||||
}
|
||||
for (j = 0;; j++) {
|
||||
for (j = 0lu;; j++) {
|
||||
tmpNode = ixmlNodeList_item(nodeList, j);
|
||||
if (!tmpNode) {
|
||||
break;
|
||||
@ -389,9 +389,9 @@ int AdvertiseAndReply(int AdFlag, UpnpDevice_Handle Hnd,
|
||||
break;
|
||||
case SSDP_SERVICE:
|
||||
if (ServiceType) {
|
||||
if (!strncasecmp(ServiceType, servType, strlen(ServiceType) - 2)) {
|
||||
if (!strncasecmp(ServiceType, servType, strlen(ServiceType) - (size_t)2)) {
|
||||
if (atoi(strrchr(ServiceType, ':') + 1) <
|
||||
atoi(&servType[strlen(servType) - 1])) {
|
||||
atoi(&servType[strlen(servType) - (size_t)1])) {
|
||||
/* the requested version is lower than the service version
|
||||
* must reply with the lower version number and the lower
|
||||
* description URL */
|
||||
@ -739,17 +739,20 @@ void readFromSSDPSocket(SOCKET socket)
|
||||
(struct sockaddr *)&__ss, &socklen);
|
||||
if (byteReceived > 0) {
|
||||
requestBuf[byteReceived] = '\0';
|
||||
if (__ss.ss_family == AF_INET)
|
||||
switch (__ss.ss_family) {
|
||||
case AF_INET:
|
||||
inet_ntop(AF_INET,
|
||||
&((struct sockaddr_in *)&__ss)->sin_addr,
|
||||
ntop_buf, sizeof(ntop_buf));
|
||||
break;
|
||||
#ifdef UPNP_ENABLE_IPV6
|
||||
else if (__ss.ss_family == AF_INET6)
|
||||
case AF_INET6:
|
||||
inet_ntop(AF_INET6,
|
||||
&((struct sockaddr_in6 *)&__ss)->sin6_addr,
|
||||
ntop_buf, sizeof(ntop_buf));
|
||||
break;
|
||||
#endif /* UPNP_ENABLE_IPV6 */
|
||||
else {
|
||||
default:
|
||||
memset(ntop_buf, 0, sizeof(ntop_buf));
|
||||
strncpy(ntop_buf, "<Invalid address family>",
|
||||
sizeof(ntop_buf) - 1);
|
||||
@ -830,7 +833,7 @@ static int create_ssdp_sock_v4(
|
||||
}
|
||||
#endif /* BSD, __OSX__, __APPLE__ */
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
ssdpAddr4->sin_family = (unsigned short)AF_INET;
|
||||
ssdpAddr4->sin_family = (sa_family_t)AF_INET;
|
||||
ssdpAddr4->sin_addr.s_addr = htonl(INADDR_ANY);
|
||||
ssdpAddr4->sin_port = htons(SSDP_PORT);
|
||||
ret = bind(*ssdpSock, (struct sockaddr *)ssdpAddr4, sizeof(*ssdpAddr4));
|
||||
@ -984,7 +987,7 @@ static int create_ssdp_sock_v6(
|
||||
return UPNP_E_SOCKET_ERROR;
|
||||
}
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
ssdpAddr6->sin6_family = AF_INET6;
|
||||
ssdpAddr6->sin6_family = (sa_family_t)AF_INET6;
|
||||
ssdpAddr6->sin6_addr = in6addr_any;
|
||||
ssdpAddr6->sin6_scope_id = gIF_INDEX;
|
||||
ssdpAddr6->sin6_port = htons(SSDP_PORT);
|
||||
@ -1098,7 +1101,7 @@ static int create_ssdp_sock_v6_ula_gua(
|
||||
return UPNP_E_SOCKET_ERROR;
|
||||
}
|
||||
memset(&__ss, 0, sizeof(__ss));
|
||||
ssdpAddr6->sin6_family = AF_INET6;
|
||||
ssdpAddr6->sin6_family = (sa_family_t)AF_INET6;
|
||||
ssdpAddr6->sin6_addr = in6addr_any;
|
||||
ssdpAddr6->sin6_scope_id = gIF_INDEX;
|
||||
ssdpAddr6->sin6_port = htons(SSDP_PORT);
|
||||
@ -1187,7 +1190,7 @@ int get_ssdp_sockets(MiniServerSockArray * out)
|
||||
out->ssdpReqSock4 = INVALID_SOCKET;
|
||||
out->ssdpReqSock6 = INVALID_SOCKET;
|
||||
/* Create the IPv4 socket for SSDP REQUESTS */
|
||||
if (strlen(gIF_IPV4) > 0) {
|
||||
if (strlen(gIF_IPV4) > (size_t)0) {
|
||||
retVal = create_ssdp_sock_reqv4(&out->ssdpReqSock4);
|
||||
if (retVal != UPNP_E_SUCCESS)
|
||||
return retVal;
|
||||
@ -1197,7 +1200,7 @@ int get_ssdp_sockets(MiniServerSockArray * out)
|
||||
out->ssdpReqSock4 = INVALID_SOCKET;
|
||||
/* Create the IPv6 socket for SSDP REQUESTS */
|
||||
#ifdef UPNP_ENABLE_IPV6
|
||||
if (strlen(gIF_IPV6) > 0) {
|
||||
if (strlen(gIF_IPV6) > (size_t)0) {
|
||||
retVal = create_ssdp_sock_reqv6(&out->ssdpReqSock6);
|
||||
if (retVal != UPNP_E_SUCCESS) {
|
||||
shutdown(out->ssdpReqSock4, SD_BOTH);
|
||||
|
Loading…
x
Reference in New Issue
Block a user