Ruby
3.1.0dev(2021-09-10revisionb76ad15ed0da636161de0243c547ee1e6fc95681)
ext
socket
sockssocket.c
Go to the documentation of this file.
1
/************************************************
2
3
sockssocket.c -
4
5
created at: Thu Mar 31 12:21:29 JST 1994
6
7
Copyright (C) 1993-2007 Yukihiro Matsumoto
8
9
************************************************/
10
11
#include "
rubysocket.h
"
12
13
#ifdef SOCKS
14
/*
15
* call-seq:
16
* SOCKSSocket.new(host, port) => socket
17
*
18
* Opens a SOCKS connection to +host+ via the SOCKS server.
19
*
20
* The SOCKS server configuration varies by implementation
21
*
22
* When using the Dante libsocks/libsocksd implementation it is configured as SOCKS_SERVER env var.
23
*
24
* See: https://manpages.debian.org/testing/dante-client/socksify.1.en.html for full env variable support.
25
*
26
*/
27
static
VALUE
28
socks_init(
VALUE
sock,
VALUE
host,
VALUE
port)
29
{
30
static
int
init = 0;
31
32
if
(init == 0) {
33
SOCKSinit(
"ruby"
);
34
init = 1;
35
}
36
37
return
rsock_init_inetsock
(sock, host, port,
Qnil
,
Qnil
,
INET_SOCKS
,
Qnil
,
Qnil
);
38
}
39
40
#ifdef SOCKS5
41
/*
42
* Closes the SOCKS connection.
43
*
44
*/
45
static
VALUE
46
socks_s_close(
VALUE
sock)
47
{
48
rb_io_t
*fptr;
49
50
GetOpenFile
(sock, fptr);
51
shutdown
(fptr->
fd
, 2);
52
return
rb_io_close
(sock);
53
}
54
#endif
55
#endif
56
57
void
58
rsock_init_sockssocket
(
void
)
59
{
60
#ifdef SOCKS
61
/*
62
* Document-class: SOCKSSocket < TCPSocket
63
*
64
* SOCKS is an Internet protocol that routes packets between a client and
65
* a server through a proxy server. SOCKS5, if supported, additionally
66
* provides authentication so only authorized users may access a server.
67
*/
68
rb_cSOCKSSocket =
rb_define_class
(
"SOCKSSocket"
,
rb_cTCPSocket
);
69
rb_define_method
(rb_cSOCKSSocket,
"initialize"
, socks_init, 2);
70
#ifdef SOCKS5
71
rb_define_method
(rb_cSOCKSSocket,
"close"
, socks_s_close, 0);
72
#endif
73
#endif
74
}
rb_define_class
VALUE rb_define_class(const char *name, VALUE super)
Defines a top-level class.
Definition:
class.c:759
GetOpenFile
#define GetOpenFile
Definition:
io.h:125
INET_SOCKS
#define INET_SOCKS
Definition:
rubysocket.h:255
rb_io_t::fd
int fd
Definition:
io.h:65
rb_io_close
VALUE rb_io_close(VALUE)
Definition:
io.c:5037
rsock_init_inetsock
VALUE rsock_init_inetsock(VALUE sock, VALUE remote_host, VALUE remote_serv, VALUE local_host, VALUE local_serv, int type, VALUE resolv_timeout, VALUE connect_timeout)
Definition:
ipsocket.c:171
Qnil
#define Qnil
Definition:
special_consts.h:51
VALUE
unsigned long VALUE
Definition:
value.h:38
shutdown
#define shutdown(a, b)
Definition:
io.c:727
rsock_init_sockssocket
void rsock_init_sockssocket(void)
Definition:
sockssocket.c:58
rubysocket.h
rb_define_method
#define rb_define_method(klass, mid, func, arity)
Defines klass#mid.
Definition:
cxxanyargs.hpp:655
rb_cTCPSocket
VALUE rb_cTCPSocket
Definition:
init.c:19
rb_io_t
Definition:
io.h:61
Generated by
1.8.17