mirror of
https://github.com/obgm/libcoap.git
synced 2026-11-01 23:45:48 +03:00
explicit port not supported in proxy option - ID: 3526542 (patch provided by John Sucaet)
do not include Uri-Host when Proxy-Uri is present
This commit is contained in:
1 parent
1c9bd4ca4e
commit
aebd41b54a
1 file changed
+31
-4
+31
-4
@@ -32,6 +32,7 @@ static coap_list_t *optlist = NULL;
|
||||
* TODO: associate the resources with transaction id and make it expireable */
|
||||
static coap_uri_t uri;
|
||||
static str proxy = { 0, NULL };
|
||||
static unsigned short proxy_port = COAP_DEFAULT_PORT;
|
||||
|
||||
/* reading is done when this flag is set */
|
||||
static int ready = 0;
|
||||
@@ -726,15 +727,37 @@ cmdline_subscribe(char *arg) {
|
||||
order_opts);
|
||||
}
|
||||
|
||||
void
|
||||
int
|
||||
cmdline_proxy(char *arg) {
|
||||
char *proxy_port_str = strrchr((const char *)arg, ':'); /* explicit port ? */
|
||||
if (proxy_port_str) {
|
||||
char *ipv6_delimiter = strrchr((const char *)arg, ']');
|
||||
if (!ipv6_delimiter) {
|
||||
if (proxy_port_str == strchr((const char *)arg, ':')) {
|
||||
/* host:port format - host not in ipv6 hexadecimal string format */
|
||||
*proxy_port_str++ = '\0'; /* split */
|
||||
proxy_port = atoi(proxy_port_str);
|
||||
}
|
||||
} else {
|
||||
arg = strchr((const char *)arg, '[');
|
||||
if (!arg) return 0;
|
||||
arg++;
|
||||
*ipv6_delimiter = '\0'; /* split */
|
||||
if (ipv6_delimiter + 1 == proxy_port_str++) {
|
||||
/* [ipv6 address]:port */
|
||||
proxy_port = atoi(proxy_port_str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
proxy.length = strlen(arg);
|
||||
if ( (proxy.s = coap_malloc(proxy.length + 1)) == NULL) {
|
||||
proxy.length = 0;
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
memcpy(proxy.s, arg, proxy.length+1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -965,7 +988,10 @@ main(int argc, char **argv) {
|
||||
cmdline_option(optarg);
|
||||
break;
|
||||
case 'P' :
|
||||
cmdline_proxy(optarg);
|
||||
if (!cmdline_proxy(optarg)) {
|
||||
fprintf(stderr, "error specifying proxy address\n");
|
||||
exit(-1);
|
||||
}
|
||||
break;
|
||||
case 'T' :
|
||||
cmdline_token(optarg);
|
||||
@@ -990,6 +1016,7 @@ main(int argc, char **argv) {
|
||||
|
||||
if (proxy.length) {
|
||||
server = proxy;
|
||||
port = proxy_port;
|
||||
} else {
|
||||
server = uri.host;
|
||||
port = uri.port;
|
||||
@@ -1039,7 +1066,7 @@ main(int argc, char **argv) {
|
||||
|
||||
/* construct CoAP message */
|
||||
|
||||
if (addrptr
|
||||
if (!proxy.length && addrptr
|
||||
&& (inet_ntop(dst.addr.sa.sa_family, addrptr, addr, sizeof(addr)) != 0)
|
||||
&& (strlen(addr) != uri.host.length
|
||||
|| memcmp(addr, uri.host.s, uri.host.length) != 0)) {
|
||||
|
||||
Reference in new issue
Block a user