mirror of
https://github.com/zeromq/libzmq.git
synced 2025-10-30 05:29:43 +01:00
Add support for SOCKS proxies
This is still raw and experimental.
To connect through a SOCKS proxy, set ZMQ_SOCKS_PROXY socket option on
socket before issuing a connect call, e.g.:
zmq_setsockopt (s, ZMQ_SOCKS_PROXY,
"127.0.0.1:22222", strlen ("127.0.0.1:22222"));
zmq_connect (s, "tcp://127.0.0.1:5555");
Known limitations:
- only SOCKS version 5 supported
- authentication not supported
- new option is still undocumented
This commit is contained in:
@@ -206,6 +206,19 @@ int zmq::options_t::setsockopt (int option_, const void *optval_,
|
||||
}
|
||||
break;
|
||||
|
||||
case ZMQ_SOCKS_PROXY:
|
||||
if (optval_ == NULL && optvallen_ == 0) {
|
||||
socks_proxy_address.clear ();
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
if (optval_ != NULL && optvallen_ > 0 ) {
|
||||
socks_proxy_address =
|
||||
std::string ((const char *) optval_, optvallen_);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case ZMQ_TCP_KEEPALIVE:
|
||||
if (is_int && (value == -1 || value == 0 || value == 1)) {
|
||||
tcp_keepalive = value;
|
||||
@@ -618,6 +631,14 @@ int zmq::options_t::getsockopt (int option_, void *optval_, size_t *optvallen_)
|
||||
}
|
||||
break;
|
||||
|
||||
case ZMQ_SOCKS_PROXY:
|
||||
if (*optvallen_ >= socks_proxy_address.size () + 1) {
|
||||
memcpy (optval_, socks_proxy_address.c_str (), socks_proxy_address.size () + 1);
|
||||
*optvallen_ = socks_proxy_address.size () + 1;
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
|
||||
case ZMQ_TCP_KEEPALIVE:
|
||||
if (is_int) {
|
||||
*value = tcp_keepalive;
|
||||
|
||||
Reference in New Issue
Block a user