improved SubmitServicesToMiniSSDPD() function fiability
This commit is contained in:
parent
ad744bd6a5
commit
9805bb6872
|
@ -1,4 +1,7 @@
|
||||||
$Id: Changelog.txt,v 1.295 2012/07/17 19:35:43 nanard Exp $
|
$Id: Changelog.txt,v 1.296 2012/08/10 12:00:08 nanard Exp $
|
||||||
|
|
||||||
|
2012/08/10:
|
||||||
|
improved SubmitServicesToMiniSSDPD() function fiability
|
||||||
|
|
||||||
2012/07/17:
|
2012/07/17:
|
||||||
Add -A command line option to add permission rules
|
Add -A command line option to add permission rules
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* $Id: minissdp.c,v 1.39 2012/06/25 23:52:23 nanard Exp $ */
|
/* $Id: minissdp.c,v 1.40 2012/08/10 12:00:09 nanard Exp $ */
|
||||||
/* MiniUPnP project
|
/* MiniUPnP project
|
||||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||||
* (c) 2006-2012 Thomas Bernard
|
* (c) 2006-2012 Thomas Bernard
|
||||||
|
@ -749,7 +749,7 @@ SubmitServicesToMiniSSDPD(const char * host, unsigned short port) {
|
||||||
unsigned char buffer[2048];
|
unsigned char buffer[2048];
|
||||||
char strbuf[256];
|
char strbuf[256];
|
||||||
unsigned char * p;
|
unsigned char * p;
|
||||||
int i, l;
|
int i, l, n;
|
||||||
|
|
||||||
s = socket(AF_UNIX, SOCK_STREAM, 0);
|
s = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if(s < 0) {
|
if(s < 0) {
|
||||||
|
@ -760,10 +760,12 @@ SubmitServicesToMiniSSDPD(const char * host, unsigned short port) {
|
||||||
strncpy(addr.sun_path, minissdpdsocketpath, sizeof(addr.sun_path));
|
strncpy(addr.sun_path, minissdpdsocketpath, sizeof(addr.sun_path));
|
||||||
if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) {
|
if(connect(s, (struct sockaddr *)&addr, sizeof(struct sockaddr_un)) < 0) {
|
||||||
syslog(LOG_ERR, "connect(\"%s\"): %m", minissdpdsocketpath);
|
syslog(LOG_ERR, "connect(\"%s\"): %m", minissdpdsocketpath);
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
for(i = 0; known_service_types[i]; i++) {
|
for(i = 0; known_service_types[i]; i++) {
|
||||||
buffer[0] = 4;
|
buffer[0] = 4; /* request type 4 : submit service */
|
||||||
|
/* 4 strings following : ST (service type), USN, Server, Location */
|
||||||
p = buffer + 1;
|
p = buffer + 1;
|
||||||
l = (int)strlen(known_service_types[i]);
|
l = (int)strlen(known_service_types[i]);
|
||||||
if(i > 0)
|
if(i > 0)
|
||||||
|
@ -787,9 +789,22 @@ SubmitServicesToMiniSSDPD(const char * host, unsigned short port) {
|
||||||
CODELENGTH(l, p);
|
CODELENGTH(l, p);
|
||||||
memcpy(p, strbuf, l);
|
memcpy(p, strbuf, l);
|
||||||
p += l;
|
p += l;
|
||||||
if(write(s, buffer, p - buffer) < 0) {
|
/* now write the encoded data */
|
||||||
|
n = p - buffer; /* bytes to send */
|
||||||
|
p = buffer; /* start */
|
||||||
|
while(n > 0) {
|
||||||
|
l = write(s, p, n);
|
||||||
|
if (l < 0) {
|
||||||
syslog(LOG_ERR, "write(): %m");
|
syslog(LOG_ERR, "write(): %m");
|
||||||
|
close(s);
|
||||||
return -1;
|
return -1;
|
||||||
|
} else if (l == 0) {
|
||||||
|
syslog(LOG_ERR, "write() returned 0");
|
||||||
|
close(s);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
p += l;
|
||||||
|
n -= l;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
close(s);
|
close(s);
|
||||||
|
|
Loading…
Reference in New Issue