Module: ShadowsocksRuby::Protocols

Defined in:
lib/shadowsocks_ruby/protocols/protocol.rb,
lib/shadowsocks_ruby/protocols/packet/plain.rb,
lib/shadowsocks_ruby/protocols/packet/socks5.rb,
lib/shadowsocks_ruby/protocols/protocol_stack.rb,
lib/shadowsocks_ruby/protocols/obfs/tls_ticket.rb,
lib/shadowsocks_ruby/protocols/cipher/iv_cipher.rb,
lib/shadowsocks_ruby/protocols/obfs/http_simple.rb,
lib/shadowsocks_ruby/protocols/cipher/verify_sha1.rb,
lib/shadowsocks_ruby/protocols/packet/shadowsocks.rb,
lib/shadowsocks_ruby/protocols/cipher/no_iv_cipher.rb

Overview

Protocols are layered. Each layer know nothing about other layers. (data) | TOP: HTTP, FTP, STMP ... ^ (data) Pack | layer 3 protocol packet | Unpack Encrypt | layer 2 protocol cipher | Decrypt Obfuscate | layer 1 protocol obfuscate | DeObfuscate (opaque) V Bottom: TCP/UDP | (opaque)

Protocols

There are 16 hooks can be called on protocols, which are:

  • tcp_receive_from_client
  • tcp_send_to_client
  • tcp_receive_from_remoteserver
  • tcp_send_to_remoteserver
  • tcp_receive_from_localbackend
  • tcp_send_to_localbackend
  • tcp_receive_from_destination
  • tcp_send_to_destination
  • udp_receive_from_client
  • udp_send_to_client
  • udp_receive_from_remoteserver
  • udp_send_to_remoteserver
  • udp_receive_from_localbackend
  • udp_send_to_localbackend
  • udp_receive_from_destination
  • udp_send_to_destination

Each receive_from hook's job is to return data of exact length required by upper level protocol.

Each send_to hook's job is to get the send work done, with the data it received from the upper level protocol.

Each hook can call next layer protocols's corresponding receive_from and send_to hook,

The bottom layer calls +Connection+'s corresponding receive_from and send_to hook.

The Connection then map corresponding receive_from and send_to hook to real data transfer methods async_recv and send_data.

Defined Under Namespace

Modules: BufferHelper, DummyHelper Classes: HttpSimpleProtocol, IvCipherProtocol, NoIvCipherProtocol, PlainProtocol, ProtocolStack, ShadowsocksProtocol, Socks5Protocol, TlsTicketProtocol, VerifySha1Protocol