#!/usr/bin/ruby module FakeVioletSrv require 'webrick' include WEBrick # used to check serial SERIAL_MATCHER = /^[0-9A-F]+$/i # used to check token TOKEN_MATCHER = /^[0-9]+$/ # errors messages list ERRORS = { :WrongSerialOrToken => 'NOGOODTOKENORSERIALYour token or serial number are not correct !' } # action list ACTIONS = [ '', # array index begin to 0, but our action API begin to 1 'LINKPREVIEWXXXX', '', '', '(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London', 'XXXXX', '', 'YES', 'V1', '', 'nabmaster', '' , 'LINKPREVIEWXXXX', 'COMMANDSENDYou rabbit will change status', 'COMMANDSENDYou rabbit will change status' ] class VioletApiServelet < HTTPServlet::AbstractServlet def do_GET(req, res) res['Content-Type'] = 'text/plain' # getting options. opts = parse_opts(req) if opts[:sn] !~ SERIAL_MATCHER or opts[:token] !~ TOKEN_MATCHER rsp = ERRORS[:WrongSerialOrToken] elsif opts[:action] rsp = ACTIONS[opts[:action].to_i] elsif opts[:ears] == 'ok' rsp = 'POSITIONEAR810' end res.body = <<-EOF #{rsp} EOF end private def debug msg puts "\033[31;01mDEBUG:\033[00m #{msg}" if $DEBUG end def parse_opts(req) req.unparsed_uri.split(/&|\?/).inject(Hash.new) { |h,opt| if opt =~ /(.+)=(.+)/ then h[$1.to_sym] = $2 end; h } end end def FakeVioletSrv.start(port=3000, logfile=false) if logfile log = File.open(logfile, 'w') $stderr = log end s = HTTPServer.new( :Port => port, :charset => 'UTF-8' ) s.mount('/api.jsp', VioletApiServelet) s.mount('/api_stream.jsp', VioletApiServelet) trap('INT') { s.shutdown } s.start end end FakeVioletSrv.start if $0 == __FILE__