class Swiftcore::AnaloggerProtocol

Constants

Ci
LoggerClass
MaxMessageLength
Rcolon

Public Instance Methods

post_init() click to toggle source
# File src/swiftcore/Analogger.rb, line 237
def post_init
        setup
end
receive_data(data) click to toggle source
# File src/swiftcore/Analogger.rb, line 247
def receive_data data
        @logchunk << data
        decompose = true
        while decompose
                unless @length
                        if @logchunk.length > 7
                                l = @logchunk[0..3].unpack(Ci).first
                                ck = @logchunk[4..7].unpack(Ci).first
                                if l == ck and l < MaxMessageLength
                                        @length = l + 7
                                else
                                        decompose = false
                                        peer = get_peername
                                        peer = peer ? ::Socket.unpack_sockaddr_in(peer)[1] : 'UNK'
                                        if l == ck
                                                LoggerClass.add_log([:default,:error,"Max Length Exceeded from #{peer} -- #{l}/#{MaxMessageLength}"])
                                                close_connection
                                        else
                                                LoggerClass.add_log([:default,:error,"checksum failed from #{peer} -- #{l}/#{ck}"])
                                                close_connection
                                        end
                                end
                        end
                end

                if @length and @logchunk.length > @length
                        msg = @logchunk.slice!(0..@length).split(Rcolon,4)
                        unless @authenticated
                                if msg.last == LoggerClass.key
                                        @authenticated = true
                                else
                                        close_connection
                                end
                        else
                                msg[0] = nil
                                msg.shift
                                LoggerClass.add_log(msg)
                        end
                        @length = nil
                else
                        decompose = false
                end
        end
end
setup() click to toggle source
# File src/swiftcore/Analogger.rb, line 241
def setup
        @length = nil
        @logchunk = ''
        @authenticated = nil
end