Class: NSCA::Server::Connection

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/nsca/server.rb

Instance Method Summary collapse

Constructor Details

#initialize(socket, server) ⇒ Connection

Returns a new instance of Connection.



47
48
49
50
51
52
53
54
55
# File 'lib/nsca/server.rb', line 47

def initialize socket, server
	@socket, @server = socket, server
	@iv_key, @password = server.iv_key, server.password
	@packet_version = server.packet_version
	@packet_length = @packet_version::PACK_LENGTH
	@socket.write [@iv_key, Time.now.to_i].pack( 'a* L>')
	@xor_password = NSCA::Helper.xor_stream @password 
	@xor_iv_key = NSCA::Helper.xor_stream @iv_key
end

Instance Method Details

#closeObject



83
# File 'lib/nsca/server.rb', line 83

def close() @socket.close end

#each(&block) ⇒ Object



76
77
78
79
# File 'lib/nsca/server.rb', line 76

def each &block
	return Enumerator.new( self)  unless block_given?
	yield fetch  until eof?
end

#eof?Boolean

Returns:

  • (Boolean)


81
# File 'lib/nsca/server.rb', line 81

def eof?() @socket.eof? end

#fetchObject



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/nsca/server.rb', line 57

def fetch
	iv_key = NSCA::Helper.xor_stream @iv_key
	password = NSCA::Helper.xor_stream @password
	packet_version = iv_key[ password[ read PacketV3::PACKET_VERSION]]
	v = packet_version.unpack( 's>').first
	case v
	when 3
		data = packet_version + iv_key[ password[ read( PacketV3::PACK_LENGTH - PacketV3::PACKET_VERSION)]]
		begin
			return PacketV3.parse( data)
		rescue NSCA::Packet::CSC32CheckFailed
			x = read( PacketV3__2_9::PACK_LENGTH - data.length)
			raise  if x.nil?
			return PacketV3__2_9.parse( data + iv_key[ password[ x]])
		end
	else raise "Unknown Version #{v.inspect}"
	end
end

#read(len = nil) ⇒ Object



82
# File 'lib/nsca/server.rb', line 82

def read( len = nil)  @socket.read( len || @packet_length) end