Class: SocksHandler::UDPSocket

Inherits:
UDPSocket
  • Object
show all
Includes:
SocksHandler
Defined in:
lib/socks_handler/udpsocket.rb

Constant Summary collapse

MAX_REPLY_SIZE =

Returns:

  • (Integer)
262

Constants included from SocksHandler

PROTOCOL_VERSION, VERSION

Instance Method Summary collapse

Instance Method Details

#connect(host, port) ⇒ Integer

Parameters:

  • host (String)
  • port (Integer)

Returns:

  • (Integer)

See Also:



24
25
26
27
28
# File 'lib/socks_handler/udpsocket.rb', line 24

def connect(host, port)
  @host = host
  @port = port
  0
end

#connect_socks_server(host, port) ⇒ Integer

Parameters:

  • host (String)
  • port (Integer)

Returns:

  • (Integer)


17
# File 'lib/socks_handler/udpsocket.rb', line 17

alias_method :connect_socks_server, :connect

#recv(maxlen, flags = 0) ⇒ String

Parameters:

  • maxlen (Integer)
  • flags (Integer) (defaults to: 0)

Returns:

  • (String)

See Also:



34
35
36
37
# File 'lib/socks_handler/udpsocket.rb', line 34

def recv(maxlen, flags = 0)
  resp, _ = recvfrom(maxlen, flags)
  resp
end

#recvfrom(maxlen, flags = 0) ⇒ Array(String, Array(String, Integer, String, String))

Parameters:

  • maxlen (Integer)
  • flags (Integer) (defaults to: 0)

Returns:

  • (Array(String, Array(String, Integer, String, String)))

See Also:

  • UDPSocket#recvfrom)


50
51
52
# File 'lib/socks_handler/udpsocket.rb', line 50

def recvfrom(maxlen, flags = 0)
  recvfrom_via(method(:recvfrom_socks_server), maxlen + MAX_REPLY_SIZE, flags)
end

#recvfrom_nonblock(maxlen, flags = 0) ⇒ Array(String, Array(String, Integer, String, String))

Parameters:

  • maxlen (Integer)
  • flags (Integer) (defaults to: 0)

Returns:

  • (Array(String, Array(String, Integer, String, String)))

See Also:



64
65
66
# File 'lib/socks_handler/udpsocket.rb', line 64

def recvfrom_nonblock( maxlen, flags = 0)
  recvfrom_via(method(:recvfrom_socks_server_nonblock), maxlen + MAX_REPLY_SIZE, flags)
end

#recvfrom_socks_server(maxlen, flags = 0) ⇒ Array(String, Array(String, Integer, String, String))

Parameters:

  • maxlen (Integer)
  • maxlen (Integer)
  • flags (Integer) (defaults to: 0)

Returns:

  • (Array(String, Array(String, Integer, String, String)))


44
# File 'lib/socks_handler/udpsocket.rb', line 44

alias_method :recvfrom_socks_server, :recvfrom

#recvfrom_socks_server_nonblock(maxlen, flags = 0) ⇒ Array(String, Array(String, Integer, String, String))

Parameters:

  • maxlen (Integer)
  • flags (Integer) (defaults to: 0)

Returns:

  • (Array(String, Array(String, Integer, String, String)))


58
# File 'lib/socks_handler/udpsocket.rb', line 58

alias_method :recvfrom_socks_server_nonblock, :recvfrom_nonblock

#send(mesg, flags, host = nil, port = nil) ⇒ Integer

Parameters:

  • mesg (String)
  • flags (Integer)
  • host (String) (defaults to: nil)
  • port (Integer, String) (defaults to: nil)

Returns:

  • (Integer)

See Also:



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/socks_handler/udpsocket.rb', line 74

def send(mesg, flags, host = nil, port = nil)
  if @host &&  @port && (host || port)
    raise Errno::EISCONN, "Socket is already connected"
  end

  host ||= @host
  port ||= @port
  if port.nil?
    if host.nil?
      raise Errno::EDESTADDRREQ, "Destination address required"
    else
      host, port = (host.is_a?(String) ? Addrinfo.new(host) : host).getnameinfo
    end
  end

  request = [0x00, 0x00, 0x00].pack("C*") # Currently, the fragment number is fixed to 0
  request << build_destination_packets(host, port)
  request << [mesg].pack("a*")
  super(request, flags)
end