1919// Commands register, execution API and cmd tokenizer
2020#include "../cmnds/cmd_public.h"
2121#include "../logging/logging.h"
22- #include "../devicegroups/deviceGroups_public.h"
2322#include "lwip/sockets.h"
2423#include "lwip/ip_addr.h"
2524#include "lwip/inet.h"
@@ -125,7 +124,6 @@ static void DRV_SSDP_CreateSocket_Receive() {
125124 struct sockaddr_in addr ;
126125 struct ip_mreq mreq ;
127126 int flag = 1 ;
128- int broadcast = 1 ;
129127 int iResult = 1 ;
130128
131129 // create what looks like an ordinary UDP socket
@@ -137,31 +135,13 @@ static void DRV_SSDP_CreateSocket_Receive() {
137135 return ;
138136 }
139137
140- if (broadcast )
138+ iResult = setsockopt (g_ssdp_socket_receive , SOL_SOCKET , SO_BROADCAST , (char * )& flag , sizeof (flag ));
139+ if (iResult != 0 )
141140 {
142-
143- iResult = setsockopt (g_ssdp_socket_receive , SOL_SOCKET , SO_BROADCAST , (char * )& flag , sizeof (flag ));
144- if (iResult != 0 )
145- {
146- addLogAdv (LOG_ERROR , LOG_FEATURE_HTTP ,"DRV_SSDP_CreateSocket_Receive: failed to do setsockopt SO_BROADCAST\n" );
147- close (g_ssdp_socket_receive );
148- g_ssdp_socket_receive = -1 ;
149- return ;
150- }
151- }
152- else {
153- // allow multiple sockets to use the same PORT number
154- //
155- if (
156- setsockopt (
157- g_ssdp_socket_receive , SOL_SOCKET , SO_REUSEADDR , (char * ) & flag , sizeof (flag )
158- ) < 0
159- ){
160- addLogAdv (LOG_ERROR , LOG_FEATURE_HTTP ,"DRV_SSDP_CreateSocket_Receive: failed to do setsockopt SO_REUSEADDR\n" );
161- close (g_ssdp_socket_receive );
162- g_ssdp_socket_receive = -1 ;
163- return ;
164- }
141+ addLogAdv (LOG_ERROR , LOG_FEATURE_HTTP ,"DRV_SSDP_CreateSocket_Receive: failed to do setsockopt SO_BROADCAST\n" );
142+ close (g_ssdp_socket_receive );
143+ g_ssdp_socket_receive = -1 ;
144+ return ;
165145 }
166146
167147 // set up destination address
@@ -180,13 +160,7 @@ static void DRV_SSDP_CreateSocket_Receive() {
180160 return ;
181161 }
182162
183- /* if(broadcast)
184- {
185-
186- }
187- else*/
188163 {
189-
190164 // use setsockopt() to request that the kernel join a multicast group
191165 //
192166 mreq .imr_multiaddr .s_addr = inet_addr (ssdp_group );
@@ -235,15 +209,13 @@ void DRV_WEMO_Send_Advert_To(int mode, struct sockaddr_in *addr);
235209void DRV_HUE_Send_Advert_To (struct sockaddr_in * addr );
236210
237211void DRV_SSDP_SendReply (struct sockaddr_in * addr , const char * message ) {
238-
239- int nbytes ;
240212 if (g_ssdp_socket_receive <= 0 ) {
241213 addLogAdv (LOG_ERROR , LOG_FEATURE_HTTP , "DRV_SSDP_SendReply: no socket" );
242214 return ;
243215 }
244216 // set up destination address
245217 //
246- nbytes = sendto (
218+ sendto (
247219 g_ssdp_socket_receive ,
248220 (const char * )message ,
249221 strlen (message ),
@@ -257,7 +229,7 @@ static void DRV_SSDP_Send_Advert_To(struct sockaddr_in *addr) {
257229
258230
259231 if (!advert_message ){
260- advert_maxlen = strlen (message_template ) + 100 ;
232+ advert_maxlen = sizeof (message_template ) + 99 ;
261233 advert_message = (char * )malloc (advert_maxlen + 1 );
262234 }
263235
@@ -309,15 +281,15 @@ static void DRV_SSDP_Send_Notify() {
309281 const char * myip = HAL_GetMyIPString ();
310282
311283 if (!notify_message ){
312- notify_maxlen = strlen (notify_template ) + 100 ;
284+ notify_maxlen = sizeof (notify_template ) + 99 ;
313285 notify_message = (char * )malloc (notify_maxlen + 1 );
314286 }
315287
316288 snprintf (notify_message , notify_maxlen , notify_template , myip , g_ssdp_uuid );
317289
318290 int len = strlen (notify_message );
319291
320- addLogAdv (LOG_EXTRADEBUG , LOG_FEATURE_HTTP ,"DRV_SSDP_Send_Notify: space: %d msg:%d" , strlen ( notify_template ) + 100 , len );
292+ addLogAdv (LOG_EXTRADEBUG , LOG_FEATURE_HTTP ,"DRV_SSDP_Send_Notify: space: %d msg:%d" , notify_maxlen , len );
321293 addLogAdv (LOG_EXTRADEBUG , LOG_FEATURE_HTTP ,"DRV_SSDP_Send_Notify: \r\n%s\r\n" , notify_message );
322294
323295 // set up destination address
@@ -493,7 +465,6 @@ void DRV_SSDP_RunQuickTick() {
493465 (struct sockaddr * ) & addr ,
494466 & addrlen
495467 );
496- udp_msgbuf [UDP_MSGBUF_LEN ] = 0 ;
497468 if (nbytes <= 0 ) {
498469 //addLogAdv(LOG_INFO, LOG_FEATURE_HTTP,"nothing\n");
499470 return ;
@@ -505,7 +476,6 @@ void DRV_SSDP_RunQuickTick() {
505476 addLogAdv (LOG_EXTRADEBUG , LOG_FEATURE_HTTP ,"Received %i bytes from %s" ,nbytes ,inet_ntoa (((struct sockaddr_in * )& addr )-> sin_addr ));
506477 udp_msgbuf [nbytes ] = 0 ;
507478 addLogAdv (LOG_EXTRADEBUG , LOG_FEATURE_HTTP ,"data: %s" ,udp_msgbuf );
508- udp_msgbuf [nbytes ] = '\0' ;
509479
510480 /* we may get:
511481 M-SEARCH * HTTP/1.1
0 commit comments