class Swiftcore::AnaloggerProtocol

Constants

LoggerClass
MaxLengthBytes
MaxMessageLength
Rcolon

Public Instance Methods

post_init() click to toggle source
# File lib/swiftcore/Analogger.rb, line 299
def post_init
  setup
end
receive_data(data) click to toggle source
# File lib/swiftcore/Analogger/AnaloggerProtocol.rb, line 18
def receive_data data
  @logchunk << data
  decompose = true
  while decompose
    unless @length
      if @logchunk.length - @pos > 7
        l = @logchunk[@pos + 0..@pos + 3].to_i
        ck = @logchunk[@pos + 4..@pos + 7].to_i
        if l == ck and l < MaxMessageLength
          @length = l
        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}"])
            send_data(-"error: max length exceeded\n")
            close_connection_after_writing
          else
            LoggerClass.add_log([:default, :error, "checksum failed from #{peer} -- #{l}/#{ck}"])
            send_data(-"error: checksum failed\n")
            close_connection_after_writing
          end
        end
      end
    end

    if @length && @length < 8
      decompose = false
    end

    if @length and @length > 0 and @logchunk.length - @pos >= @length
      msg = nil
      msg = @logchunk[@pos..@length + @pos - 1].split(Rcolon, 4)
      @pos += @length
      unless @authenticated
        if msg.last == LoggerClass.key
          @authenticated = true
          send_data(-"accepted\n")
        else
          send_data(-"denied\n")
          close_connection_after_writing
        end
      else
        msg[0] = nil
        msg.shift
        LoggerClass.add_log(msg)
      end
      @length = nil
    else
      decompose = false
    end
  end
  if @pos >= @logchunk.length
    @logchunk.clear
    @pos = 0
  end
end
send_data(data) click to toggle source
Calls superclass method
# File lib/swiftcore/Analogger/AnaloggerProtocol.rb, line 14
def send_data data
  super data
end
setup() click to toggle source
# File lib/swiftcore/Analogger/AnaloggerProtocol.rb, line 7
def setup
  @length = nil
  @pos = 0
  @logchunk = ''
  @authenticated = nil
end