class Thrift::SaslClientTransport
Constants
- AUTH_MECHANISM
- NEGOTIATION_STATUS
- PAYLOAD_LENGTH_BYTES
- STATUS_BYTES
Attributes
challenge[R]
Public Class Methods
new(transport, sasl_params={})
click to toggle source
Calls superclass method
# File lib/thrift/sasl_client_transport.rb, line 16 def initialize(transport, sasl_params={}) super(transport) @challenge = nil @sasl_username = sasl_params.fetch(:username, 'anonymous') @sasl_password = sasl_params.fetch(:password, 'anonymous') end
Public Instance Methods
read(sz)
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 23 def read(sz) len, = @transport.read(PAYLOAD_LENGTH_BYTES).unpack('l>') if @rbuf.nil? sz = len if len && sz > len @index += sz ret = @rbuf.slice(@index - sz, sz) || Bytes.empty_byte_buffer if ret.length == 0 @rbuf = @transport.read(len) rescue Bytes.empty_byte_buffer @index = sz ret = @rbuf.slice(0, sz) || Bytes.empty_byte_buffer end ret end
read_byte()
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 36 def read_byte reset_buffer! if @index >= @rbuf.size @index += 1 Bytes.get_string_byte(@rbuf, @index - 1) end
read_into_buffer(buffer, size)
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 42 def read_into_buffer(buffer, size) i = 0 while i < size reset_buffer! if @index >= @rbuf.size byte = Bytes.get_string_byte(@rbuf, @index) Bytes.set_string_byte(buffer, i, byte) @index += 1 i += 1 end i end
write(buf)
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 54 def write(buf) initiate_hand_shake if @challenge.nil? header = [buf.length].pack('l>') @wbuf << (header + Bytes.force_binary_encoding(buf)) end
Protected Instance Methods
initiate_hand_shake()
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 62 def initiate_hand_shake header = [NEGOTIATION_STATUS[:START], AUTH_MECHANISM.length].pack('cl>') @transport.write header + AUTH_MECHANISM message = "[#{AUTH_MECHANISM}]\u0000#{@sasl_username}\u0000#{@sasl_password}" header = [NEGOTIATION_STATUS[:OK], message.length].pack('cl>') @transport.write header + message status, len = @transport.read(STATUS_BYTES + PAYLOAD_LENGTH_BYTES).unpack('cl>') case status when NEGOTIATION_STATUS[:BAD], NEGOTIATION_STATUS[:ERROR] raise @transport.to_io.read(len) when NEGOTIATION_STATUS[:COMPLETE] @challenge = @transport.to_io.read len when NEGOTIATION_STATUS[:OK] raise "Failed to complete challenge exchange: only NONE supported currently" end end
Private Instance Methods
reset_buffer!()
click to toggle source
# File lib/thrift/sasl_client_transport.rb, line 81 def reset_buffer! len, = @transport.read(PAYLOAD_LENGTH_BYTES).unpack('l>') @rbuf = @transport.read(len) while @rbuf.size < len @rbuf << @transport.read(len - @rbuf.size) end @index = 0 end