Module: PryRemoteEm::Proto
- Included in:
- Broker, Client::Generic, Server
- Defined in:
- lib/pry-remote-em/proto.rb
Constant Summary collapse
- PREAMBLE =
'PRYEM'
- SEPERATOR =
' '
- PREAMBLE_LEN =
PREAMBLE.bytesize
- SEPERATOR_LEN =
SEPERATOR.bytesize
Instance Method Summary collapse
- #receive_auth(a, b = nil) ⇒ Object
- #receive_banner(name, version, scheme) ⇒ Object
- #receive_completion(c) ⇒ Object
-
#receive_data(d) ⇒ Object
Each frame is a string consisting of 4 parts 1.
- #receive_json(j) ⇒ Object
- #receive_msg(m) ⇒ Object
- #receive_msg_bcast(mb) ⇒ Object
- #receive_prompt(p) ⇒ Object
- #receive_proxy_connection(url) ⇒ Object
- #receive_raw(r) ⇒ Object
- #receive_register_server(url, name) ⇒ Object
- #receive_server_list(list = nil) ⇒ Object
- #receive_shell_cmd(c) ⇒ Object
- #receive_shell_data(d) ⇒ Object
- #receive_shell_result(c) ⇒ Object
- #receive_shell_sig(sym) ⇒ Object
- #receive_start_tls ⇒ Object
- #receive_unknown(j) ⇒ Object
- #receive_unregister_server(url) ⇒ Object
- #send_auth(a) ⇒ Object
- #send_banner(g) ⇒ Object
- #send_completion(word) ⇒ Object
- #send_data(data) ⇒ Object
- #send_heatbeat(url) ⇒ Object
- #send_json(d) ⇒ Object
- #send_msg(m) ⇒ Object
- #send_msg_bcast(m) ⇒ Object
- #send_prompt(p) ⇒ Object
- #send_proxy_connection(url) ⇒ Object
- #send_raw(l) ⇒ Object
- #send_register_server(url, name) ⇒ Object
- #send_server_list(list = nil) ⇒ Object
- #send_shell_cmd(c) ⇒ Object
- #send_shell_result(r) ⇒ Object
- #send_start_tls ⇒ Object
- #send_unregister_server(url) ⇒ Object
Instance Method Details
#receive_auth(a, b = nil) ⇒ Object
99 |
# File 'lib/pry-remote-em/proto.rb', line 99 def receive_auth(a, b = nil); end |
#receive_banner(name, version, scheme) ⇒ Object
98 |
# File 'lib/pry-remote-em/proto.rb', line 98 def (name, version, scheme); end |
#receive_completion(c) ⇒ Object
104 |
# File 'lib/pry-remote-em/proto.rb', line 104 def receive_completion(c); end |
#receive_data(d) ⇒ Object
Each frame is a string consisting of 4 parts
1. preamble (PRYEM)
2. length in characters of crc, a seperator, and body
3. CRC
4. JSON encoded body
It is possible and likely that receive_data will be given more than one frame at a time, or an incomplete frame.
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pry-remote-em/proto.rb', line 29 def receive_data(d) return unless d && d.bytesize > 0 @buffer ||= "" # inlieu of a post_init @buffer << d while @buffer && !@buffer.empty? return unless @buffer.bytesize >= PREAMBLE_LEN && (len_ends = @buffer.index(SEPERATOR)) && (crc_ends = @buffer.index(SEPERATOR, len_ends)) if (preamble = @buffer[0...PREAMBLE_LEN]) != PREAMBLE raise "message is not in proper format; expected #{PREAMBLE.inspect} not #{preamble.inspect}" end length = @buffer[PREAMBLE_LEN ... len_ends].to_i return if len_ends + length > @buffer.bytesize crc_start = len_ends + SEPERATOR_LEN crc, data = @buffer[crc_start ... crc_start + length].split(SEPERATOR, 2) crc = crc.to_i @buffer = @buffer[crc_start + length .. -1] if (dcrc = Zlib::crc32(data)) == crc receive_json(JSON.load(data)) else warn("data crc #{dcrc} doesn't match crc #{crc.inspect}; discarding #{data.inspect}") end end @buffer end |
#receive_json(j) ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/pry-remote-em/proto.rb', line 55 def receive_json(j) if j['p'] receive_prompt(j['p']) elsif j['d'] receive_raw(j['d']) elsif j['m'] receive_msg(j['m']) elsif j['mb'] receive_msg_bcast(j['mb']) elsif j['s'] receive_shell_cmd(j['s']) elsif j.include?('sc') receive_shell_result(j['sc']) elsif j['g'] (*j['g'].split(" ", 3)) elsif j['c'] receive_completion(j['c']) elsif j.include?('a') receive_auth(*Array(j['a'])) elsif j['sd'] receive_shell_data(j['sd']) elsif j['ssc'] receive_shell_sig(:term) elsif j['hb'] receive_heartbeat(j['hb']) elsif j['rs'] receive_register_server(*Array(j['rs'])) elsif j['urs'] receive_unregister_server(j['urs']) elsif j.include?('sl') j['sl'] ? receive_server_list(j['sl']) : receive_server_list elsif j['tls'] receive_start_tls elsif j['pc'] receive_proxy_connection(j['pc']) else receive_unknown(j) end j end |
#receive_msg(m) ⇒ Object
100 |
# File 'lib/pry-remote-em/proto.rb', line 100 def receive_msg(m); end |
#receive_msg_bcast(mb) ⇒ Object
101 |
# File 'lib/pry-remote-em/proto.rb', line 101 def receive_msg_bcast(mb); end |
#receive_prompt(p) ⇒ Object
97 |
# File 'lib/pry-remote-em/proto.rb', line 97 def receive_prompt(p); end |
#receive_proxy_connection(url) ⇒ Object
116 |
# File 'lib/pry-remote-em/proto.rb', line 116 def receive_proxy_connection(url); end |
#receive_raw(r) ⇒ Object
105 |
# File 'lib/pry-remote-em/proto.rb', line 105 def receive_raw(r); end |
#receive_register_server(url, name) ⇒ Object
112 |
# File 'lib/pry-remote-em/proto.rb', line 112 def receive_register_server(url, name); end |
#receive_server_list(list = nil) ⇒ Object
114 |
# File 'lib/pry-remote-em/proto.rb', line 114 def receive_server_list(list = nil); end |
#receive_shell_cmd(c) ⇒ Object
102 |
# File 'lib/pry-remote-em/proto.rb', line 102 def receive_shell_cmd(c); end |
#receive_shell_data(d) ⇒ Object
107 |
# File 'lib/pry-remote-em/proto.rb', line 107 def receive_shell_data(d); end |
#receive_shell_result(c) ⇒ Object
103 |
# File 'lib/pry-remote-em/proto.rb', line 103 def receive_shell_result(c); end |
#receive_shell_sig(sym) ⇒ Object
106 |
# File 'lib/pry-remote-em/proto.rb', line 106 def receive_shell_sig(sym); end |
#receive_start_tls ⇒ Object
110 |
# File 'lib/pry-remote-em/proto.rb', line 110 def receive_start_tls; end |
#receive_unknown(j) ⇒ Object
108 |
# File 'lib/pry-remote-em/proto.rb', line 108 def receive_unknown(j); end |
#receive_unregister_server(url) ⇒ Object
113 |
# File 'lib/pry-remote-em/proto.rb', line 113 def receive_unregister_server(url); end |
#send_auth(a) ⇒ Object
121 122 123 |
# File 'lib/pry-remote-em/proto.rb', line 121 def send_auth(a) send_json({:a => a}) end |
#send_banner(g) ⇒ Object
118 119 120 |
# File 'lib/pry-remote-em/proto.rb', line 118 def (g) send_json({:g => g}) end |
#send_completion(word) ⇒ Object
139 140 141 |
# File 'lib/pry-remote-em/proto.rb', line 139 def send_completion(word) send_json({:c => word}) end |
#send_data(data) ⇒ Object
15 16 17 18 19 |
# File 'lib/pry-remote-em/proto.rb', line 15 def send_data(data) crc = Zlib::crc32(data).to_s msg = PREAMBLE + (data.bytesize + crc.bytesize + SEPERATOR_LEN).to_s + SEPERATOR + crc + SEPERATOR + data super(msg) end |
#send_heatbeat(url) ⇒ Object
156 157 158 |
# File 'lib/pry-remote-em/proto.rb', line 156 def send_heatbeat(url) send_json({:hb => url}) end |
#send_json(d) ⇒ Object
11 12 13 |
# File 'lib/pry-remote-em/proto.rb', line 11 def send_json(d) send_data(JSON.dump(d.is_a?(String) ? {:d => d} : d)) end |
#send_msg(m) ⇒ Object
130 131 132 |
# File 'lib/pry-remote-em/proto.rb', line 130 def send_msg(m) send_json({:m => m}) end |
#send_msg_bcast(m) ⇒ Object
127 128 129 |
# File 'lib/pry-remote-em/proto.rb', line 127 def send_msg_bcast(m) send_json({:mb => m}) end |
#send_prompt(p) ⇒ Object
124 125 126 |
# File 'lib/pry-remote-em/proto.rb', line 124 def send_prompt(p) send_json({:p => p}) end |
#send_proxy_connection(url) ⇒ Object
163 164 165 |
# File 'lib/pry-remote-em/proto.rb', line 163 def send_proxy_connection(url) send_json({:pc => url}) end |
#send_raw(l) ⇒ Object
142 143 144 |
# File 'lib/pry-remote-em/proto.rb', line 142 def send_raw(l) send_json(l) end |
#send_register_server(url, name) ⇒ Object
150 151 152 |
# File 'lib/pry-remote-em/proto.rb', line 150 def send_register_server(url, name) send_json({:rs => [url, name]}) end |
#send_server_list(list = nil) ⇒ Object
159 160 161 |
# File 'lib/pry-remote-em/proto.rb', line 159 def send_server_list(list = nil) send_json({:sl => list}) end |
#send_shell_cmd(c) ⇒ Object
133 134 135 |
# File 'lib/pry-remote-em/proto.rb', line 133 def send_shell_cmd(c) send_json({:s => c}) end |
#send_shell_result(r) ⇒ Object
136 137 138 |
# File 'lib/pry-remote-em/proto.rb', line 136 def send_shell_result(r) send_json({:sc => r}) end |
#send_start_tls ⇒ Object
146 147 148 |
# File 'lib/pry-remote-em/proto.rb', line 146 def send_start_tls send_json({:tls => true}) end |
#send_unregister_server(url) ⇒ Object
153 154 155 |
# File 'lib/pry-remote-em/proto.rb', line 153 def send_unregister_server(url) send_json({:urs => url}) end |