class NSCA::Server::Connection

Public Class Methods

new(socket, server) click to toggle source
# 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

Public Instance Methods

close() click to toggle source
# File lib/nsca/server.rb, line 83
def close() @socket.close end
each() { |fetch until eof?| ... } click to toggle source
# File lib/nsca/server.rb, line 76
def each &block
        return Enumerator.new( self)  unless block_given?
        yield fetch  until eof?
end
eof?() click to toggle source
# File lib/nsca/server.rb, line 81
def eof?() @socket.eof? end
fetch() click to toggle source
# 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) click to toggle source
# File lib/nsca/server.rb, line 82
def read( len = nil)  @socket.read( len || @packet_length) end