diff options
Diffstat (limited to 'src/nat/miniupnp/minissdpc.c')
-rw-r--r-- | src/nat/miniupnp/minissdpc.c | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/src/nat/miniupnp/minissdpc.c b/src/nat/miniupnp/minissdpc.c deleted file mode 100644 index 3fe89ef94..000000000 --- a/src/nat/miniupnp/minissdpc.c +++ /dev/null | |||
@@ -1,111 +0,0 @@ | |||
1 | /* $Id: minissdpc.c,v 1.7 2008/12/18 17:45:48 nanard Exp $ */ | ||
2 | /* Project : miniupnp | ||
3 | * Author : Thomas BERNARD | ||
4 | * copyright (c) 2005-2008 Thomas Bernard | ||
5 | * This software is subjet to the conditions detailed in the | ||
6 | * provided LICENCE file. */ | ||
7 | /*#include <syslog.h>*/ | ||
8 | #include <stdio.h> | ||
9 | #include <string.h> | ||
10 | #include <stdlib.h> | ||
11 | #include <unistd.h> | ||
12 | #include <sys/types.h> | ||
13 | #ifdef WIN32 | ||
14 | #include <winsock2.h> | ||
15 | #include <Ws2tcpip.h> | ||
16 | #include <io.h> | ||
17 | #else | ||
18 | #include <sys/socket.h> | ||
19 | #include <sys/un.h> | ||
20 | #endif | ||
21 | |||
22 | #include "minissdpc.h" | ||
23 | #include "miniupnpc.h" | ||
24 | |||
25 | #include "codelength.h" | ||
26 | |||
27 | struct UPNPDev * | ||
28 | getDevicesFromMiniSSDPD (const char *devtype, const char *socketpath) | ||
29 | { | ||
30 | struct UPNPDev *tmp; | ||
31 | struct UPNPDev *devlist = NULL; | ||
32 | unsigned char buffer[2048]; | ||
33 | ssize_t n; | ||
34 | unsigned char *p; | ||
35 | unsigned char *url; | ||
36 | unsigned int i; | ||
37 | unsigned int urlsize, stsize, usnsize, l; | ||
38 | int s; | ||
39 | struct sockaddr_un addr; | ||
40 | |||
41 | s = socket (AF_UNIX, SOCK_STREAM, 0); | ||
42 | if (s < 0) | ||
43 | { | ||
44 | /*syslog(LOG_ERR, "socket(unix): %m"); */ | ||
45 | perror ("socket(unix)"); | ||
46 | return NULL; | ||
47 | } | ||
48 | addr.sun_family = AF_UNIX; | ||
49 | strncpy (addr.sun_path, socketpath, sizeof (addr.sun_path)); | ||
50 | if (connect (s, (struct sockaddr *) &addr, sizeof (struct sockaddr_un)) < 0) | ||
51 | { | ||
52 | /*syslog(LOG_WARNING, "connect(\"%s\"): %m", socketpath); */ | ||
53 | close (s); | ||
54 | return NULL; | ||
55 | } | ||
56 | stsize = strlen (devtype); | ||
57 | buffer[0] = 1; /* request type 1 : request devices/services by type */ | ||
58 | p = buffer + 1; | ||
59 | l = stsize; | ||
60 | CODELENGTH (l, p); | ||
61 | memcpy (p, devtype, stsize); | ||
62 | p += stsize; | ||
63 | if (write (s, buffer, p - buffer) < 0) | ||
64 | { | ||
65 | /*syslog(LOG_ERR, "write(): %m"); */ | ||
66 | perror ("minissdpc.c: write()"); | ||
67 | close (s); | ||
68 | return NULL; | ||
69 | } | ||
70 | n = read (s, buffer, sizeof (buffer)); | ||
71 | if (n <= 0) | ||
72 | { | ||
73 | perror ("minissdpc.c: read()"); | ||
74 | close (s); | ||
75 | return NULL; | ||
76 | } | ||
77 | p = buffer + 1; | ||
78 | for (i = 0; i < buffer[0]; i++) | ||
79 | { | ||
80 | if (p + 2 >= buffer + sizeof (buffer)) | ||
81 | break; | ||
82 | DECODELENGTH (urlsize, p); | ||
83 | if (p + urlsize + 2 >= buffer + sizeof (buffer)) | ||
84 | break; | ||
85 | url = p; | ||
86 | p += urlsize; | ||
87 | DECODELENGTH (stsize, p); | ||
88 | if (p + stsize + 2 >= buffer + sizeof (buffer)) | ||
89 | break; | ||
90 | tmp = | ||
91 | (struct UPNPDev *) malloc (sizeof (struct UPNPDev) + urlsize + | ||
92 | stsize); | ||
93 | tmp->pNext = devlist; | ||
94 | tmp->descURL = tmp->buffer; | ||
95 | tmp->st = tmp->buffer + 1 + urlsize; | ||
96 | memcpy (tmp->buffer, url, urlsize); | ||
97 | tmp->buffer[urlsize] = '\0'; | ||
98 | memcpy (tmp->buffer + urlsize + 1, p, stsize); | ||
99 | p += stsize; | ||
100 | tmp->buffer[urlsize + 1 + stsize] = '\0'; | ||
101 | devlist = tmp; | ||
102 | /* added for compatibility with recent versions of MiniSSDPd | ||
103 | * >= 2007/12/19 */ | ||
104 | DECODELENGTH (usnsize, p); | ||
105 | p += usnsize; | ||
106 | if (p > buffer + sizeof (buffer)) | ||
107 | break; | ||
108 | } | ||
109 | close (s); | ||
110 | return devlist; | ||
111 | } | ||