#!/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__