mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27018 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			58 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
	
		
			1.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/************************************************
 | 
						|
 | 
						|
  sockssocket.c -
 | 
						|
 | 
						|
  created at: Thu Mar 31 12:21:29 JST 1994
 | 
						|
 | 
						|
  Copyright (C) 1993-2007 Yukihiro Matsumoto
 | 
						|
 | 
						|
************************************************/
 | 
						|
 | 
						|
#include "rubysocket.h"
 | 
						|
 | 
						|
#ifdef SOCKS
 | 
						|
static VALUE
 | 
						|
socks_init(VALUE sock, VALUE host, VALUE serv)
 | 
						|
{
 | 
						|
    static int init = 0;
 | 
						|
 | 
						|
    if (init == 0) {
 | 
						|
	SOCKSinit("ruby");
 | 
						|
	init = 1;
 | 
						|
    }
 | 
						|
 | 
						|
    return rsock_init_inetsock(sock, host, serv, Qnil, Qnil, INET_SOCKS);
 | 
						|
}
 | 
						|
 | 
						|
#ifdef SOCKS5
 | 
						|
static VALUE
 | 
						|
socks_s_close(VALUE sock)
 | 
						|
{
 | 
						|
    rb_io_t *fptr;
 | 
						|
 | 
						|
    if (rb_safe_level() >= 4 && !OBJ_TAINTED(sock)) {
 | 
						|
	rb_raise(rb_eSecurityError, "Insecure: can't close socket");
 | 
						|
    }
 | 
						|
    GetOpenFile(sock, fptr);
 | 
						|
    shutdown(fptr->fd, 2);
 | 
						|
    return rb_io_close(sock);
 | 
						|
}
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
 | 
						|
/*
 | 
						|
 * Document-class: ::SOCKSSocket < TCPSocket
 | 
						|
 *
 | 
						|
 * SOCKSSocket class
 | 
						|
 */
 | 
						|
void
 | 
						|
rsock_init_sockssocket(void)
 | 
						|
{
 | 
						|
#ifdef SOCKS
 | 
						|
    rb_cSOCKSSocket = rb_define_class("SOCKSSocket", rb_cTCPSocket);
 | 
						|
    rb_define_method(rb_cSOCKSSocket, "initialize", socks_init, 2);
 | 
						|
#ifdef SOCKS5
 | 
						|
    rb_define_method(rb_cSOCKSSocket, "close", socks_s_close, 0);
 | 
						|
#endif
 | 
						|
#endif
 | 
						|
}
 |