@@ -25,14 +25,14 @@ License (MIT license):
25
25
THE SOFTWARE.
26
26
27
27
*/
28
-
28
+ # define LWIP_OPEN_SRC
29
29
#include " ESP8266SSDP.h"
30
30
31
31
extern " C" {
32
- #include " ip_addr.h"
33
32
#include " user_interface.h"
34
33
#include " mem.h"
35
34
}
35
+ #include " lwip/ip_addr.h"
36
36
#include " lwip/igmp.h"
37
37
38
38
// #define DEBUG_SSDP Serial
@@ -43,39 +43,28 @@ extern "C" {
43
43
#define SSDP_URI_SIZE 2
44
44
#define SSDP_BUFFER_SIZE 64
45
45
46
- #define SSDP_UUID_SIZE 37
47
- #define SSDP_SCHEMA_URL_SIZE 64
48
- #define SSDP_FRIENDLY_NAME_SIZE 64
49
- #define SSDP_SERIAL_NUMBER_SIZE 32
50
- #define SSDP_PRESENTATION_URL_SIZE 128
51
- #define SSDP_MODEL_NAME_SIZE 64
52
- #define SSDP_MODEL_URL_SIZE 128
53
- #define SSDP_MODEL_VERSION_SIZE 32
54
- #define SSDP_MANUFACTURER_SIZE 64
55
- #define SSDP_MANUFACTURER_URL_SIZE 128
56
-
57
46
static const IPAddress SSDP_MULTICAST_ADDR (239 , 255 , 255 , 250 );
58
47
59
- const char * _ssdp_response_template =
48
+ static const char * _ssdp_response_template =
60
49
" HTTP/1.1 200 OK\r\n "
61
50
" EXT:\r\n "
62
51
" ST: upnp:rootdevice\r\n " ;
63
52
64
- const char * _ssdp_notify_template =
53
+ static const char * _ssdp_notify_template =
65
54
" NOTIFY * HTTP/1.1\r\n "
66
55
" HOST: 239.255.255.250:1900\r\n "
67
56
" NT: upnp:rootdevice\r\n "
68
57
" NTS: ssdp:alive\r\n " ;
69
58
70
- const char * _ssdp_packet_template =
59
+ static const char * _ssdp_packet_template =
71
60
" %s" // _ssdp_response_template / _ssdp_notify_template
72
61
" CACHE-CONTROL: max-age=%u\r\n " // SSDP_INTERVAL
73
62
" SERVER: Arduino/1.0 UPNP/1.1 %s/%s\r\n " // _modelName, _modelNumber
74
63
" USN: uuid:%s\r\n " // _uuid
75
64
" LOCATION: http://%u.%u.%u.%u:%u/%s\r\n " // WiFi.localIP(), _port, _schemaURL
76
65
" \r\n " ;
77
66
78
- const char * _ssdp_schema_template =
67
+ static const char * _ssdp_schema_template =
79
68
" HTTP/1.1 200 OK\r\n "
80
69
" Content-Type: text/xml\r\n "
81
70
" Connection: close\r\n "
@@ -120,17 +109,6 @@ const char* _ssdp_schema_template =
120
109
" \r\n " ;
121
110
122
111
SSDPClass::SSDPClass (){
123
- _uuid = (char *)os_malloc (SSDP_UUID_SIZE);
124
- _schemaURL = (char *)os_malloc (SSDP_SCHEMA_URL_SIZE);
125
- _friendlyName = (char *)os_malloc (SSDP_FRIENDLY_NAME_SIZE);
126
- _presentationURL = (char *)os_malloc (SSDP_PRESENTATION_URL_SIZE);
127
- _serialNumber = (char *)os_malloc (SSDP_SERIAL_NUMBER_SIZE);
128
- _modelName = (char *)os_malloc (SSDP_MODEL_NAME_SIZE);
129
- _modelNumber = (char *)os_malloc (SSDP_MODEL_VERSION_SIZE);
130
- _modelURL = (char *)os_malloc (SSDP_MODEL_URL_SIZE);
131
- _manufacturer = (char *)os_malloc (SSDP_MANUFACTURER_SIZE);
132
- _manufacturerURL = (char *)os_malloc (SSDP_MANUFACTURER_URL_SIZE);
133
-
134
112
_uuid[0 ] = ' \0 ' ;
135
113
_modelNumber[0 ] = ' \0 ' ;
136
114
_friendlyName[0 ] = ' \0 ' ;
@@ -146,17 +124,6 @@ SSDPClass::SSDPClass(){
146
124
}
147
125
148
126
SSDPClass::~SSDPClass (){
149
- os_free (_uuid);
150
- os_free (_schemaURL);
151
- os_free (_friendlyName);
152
- os_free (_presentationURL);
153
- os_free (_serialNumber);
154
- os_free (_modelName);
155
- os_free (_modelNumber);
156
- os_free (_modelURL);
157
- os_free (_manufacturer);
158
- os_free (_manufacturerURL);
159
- _pending = false ;
160
127
}
161
128
162
129
void SSDPClass::begin (){
@@ -207,7 +174,7 @@ void SSDPClass::_send(ssdp_method_t method){
207
174
SSDP_INTERVAL,
208
175
_modelName, _modelNumber,
209
176
_uuid,
210
- ( uint8_t )(ip & 0xFF ), ( uint8_t )((ip >> 8 ) & 0xFF ), ( uint8_t )((ip >> 16 ) & 0xFF ), ( uint8_t )((ip >> 24 ) & 0xFF ), _port, _schemaURL
177
+ IP2STR (&ip ), _port, _schemaURL
211
178
);
212
179
213
180
_server.endPacket ();
@@ -216,7 +183,7 @@ void SSDPClass::_send(ssdp_method_t method){
216
183
void SSDPClass::schema (WiFiClient client){
217
184
uint32_t ip = WiFi.localIP ();
218
185
client.printf (_ssdp_schema_template,
219
- ( uint8_t )(ip & 0xFF ), ( uint8_t )((ip >> 8 ) & 0xFF ), ( uint8_t )((ip >> 16 ) & 0xFF ), ( uint8_t )((ip >> 24 ) & 0xFF ), _port,
186
+ IP2STR (&ip ), _port,
220
187
_friendlyName,
221
188
_presentationURL,
222
189
_serialNumber,
@@ -259,14 +226,14 @@ uint8_t SSDPClass::update(){
259
226
else state = URI;
260
227
cursor = 0 ;
261
228
262
- }else if (cursor < SSDP_METHOD_SIZE - 1 ){ buffer[cursor++] = c; buffer[cursor] = ' \0 ' ; }
229
+ } else if (cursor < SSDP_METHOD_SIZE - 1 ){ buffer[cursor++] = c; buffer[cursor] = ' \0 ' ; }
263
230
break ;
264
231
case URI:
265
232
if (c == ' ' ){
266
233
if (strcmp (buffer, " *" )) state = ABORT;
267
234
else state = PROTO;
268
235
cursor = 0 ;
269
- }else if (cursor < SSDP_URI_SIZE - 1 ){ buffer[cursor++] = c; buffer[cursor] = ' \0 ' ; }
236
+ } else if (cursor < SSDP_URI_SIZE - 1 ){ buffer[cursor++] = c; buffer[cursor] = ' \0 ' ; }
270
237
break ;
271
238
case PROTO:
272
239
if (cr == 2 ){ state = KEY; cursor = 0 ; }
@@ -298,7 +265,7 @@ uint8_t SSDPClass::update(){
298
265
}
299
266
300
267
if (state != ABORT){ state = KEY; header = START; cursor = 0 ; }
301
- }else if (c != ' \r ' && c != ' \n ' ){
268
+ } else if (c != ' \r ' && c != ' \n ' ){
302
269
if (header == START){
303
270
if (strncmp (buffer, " MA" , 2 ) == 0 ) header = MAN;
304
271
else if (strcmp (buffer, " ST" ) == 0 ) header = ST;
@@ -320,50 +287,50 @@ uint8_t SSDPClass::update(){
320
287
if (_pending && (millis () - _process_time) > _delay){
321
288
_pending = false ; _delay = 0 ;
322
289
_send (NONE);
323
- }else if (_notify_time == 0 || (millis () - _notify_time) > (SSDP_INTERVAL * 1000L )){
290
+ } else if (_notify_time == 0 || (millis () - _notify_time) > (SSDP_INTERVAL * 1000L )){
324
291
_notify_time = millis ();
325
292
_send (NOTIFY);
326
293
}
327
294
}
328
295
329
- void SSDPClass::setSchemaURL (char *url){
330
- strcpy (_schemaURL, url);
296
+ void SSDPClass::setSchemaURL (const char *url){
297
+ strlcpy (_schemaURL, url, sizeof (_schemaURL) );
331
298
}
332
299
333
300
void SSDPClass::setHTTPPort (uint16_t port){
334
301
_port = port;
335
302
}
336
303
337
- void SSDPClass::setName (char *name){
338
- strcpy (_friendlyName, name);
304
+ void SSDPClass::setName (const char *name){
305
+ strlcpy (_friendlyName, name, sizeof (_friendlyName) );
339
306
}
340
307
341
- void SSDPClass::setURL (char *url){
342
- strcpy (_presentationURL, url);
308
+ void SSDPClass::setURL (const char *url){
309
+ strlcpy (_presentationURL, url, sizeof (_presentationURL) );
343
310
}
344
311
345
- void SSDPClass::setSerialNumber (char *serialNumber){
346
- strcpy (_serialNumber, serialNumber);
312
+ void SSDPClass::setSerialNumber (const char *serialNumber){
313
+ strlcpy (_serialNumber, serialNumber, sizeof (_serialNumber) );
347
314
}
348
315
349
- void SSDPClass::setModelName (char *name){
350
- strcpy (_modelName, name);
316
+ void SSDPClass::setModelName (const char *name){
317
+ strlcpy (_modelName, name, sizeof (_modelName) );
351
318
}
352
319
353
- void SSDPClass::setModelNumber (char *num){
354
- strcpy (_modelNumber, num);
320
+ void SSDPClass::setModelNumber (const char *num){
321
+ strlcpy (_modelNumber, num, sizeof (_modelNumber) );
355
322
}
356
323
357
- void SSDPClass::setModelURL (char *url){
358
- strcpy (_modelURL, url);
324
+ void SSDPClass::setModelURL (const char *url){
325
+ strlcpy (_modelURL, url, sizeof (_modelURL) );
359
326
}
360
327
361
- void SSDPClass::setManufacturer (char *name){
362
- strcpy (_manufacturer, name);
328
+ void SSDPClass::setManufacturer (const char *name){
329
+ strlcpy (_manufacturer, name, sizeof (_manufacturer) );
363
330
}
364
331
365
- void SSDPClass::setManufacturerURL (char *url){
366
- strcpy (_manufacturerURL, url);
332
+ void SSDPClass::setManufacturerURL (const char *url){
333
+ strlcpy (_manufacturerURL, url, sizeof (_manufacturerURL) );
367
334
}
368
335
369
336
SSDPClass SSDP;
0 commit comments