- if request.post?
- req=StringIO.new(request.raw_post+0.chr)# Get POST data as request
- # (cf http://www.ruby-forum.com/topic/122163)
- req.read(2) # Skip version indicator and client ID
- results={} # Results of each body
-
- # Parse request
-
- headers=AMF.getint(req) # Read number of headers
-
- headers.times do # Read each header
- name=AMF.getstring(req) # |
- req.getc # | skip boolean
- value=AMF.getvalue(req) # |
- header["name"]=value # |
- end
-
- bodies=AMF.getint(req) # Read number of bodies
- bodies.times do # Read each body
- message=AMF.getstring(req) # | get message name
- index=AMF.getstring(req) # | get index in response sequence
- bytes=AMF.getlong(req) # | get total size in bytes
- args=AMF.getvalue(req) # | get response (probably an array)
- logger.info("Executing AMF #{message}(#{args.join(',')}):#{index}")
-
- case message
- when 'getpresets'; results[index]=AMF.putdata(index,getpresets(args[0]))
- when 'whichways'; results[index]=AMF.putdata(index,whichways(*args))
- when 'whichways_deleted'; results[index]=AMF.putdata(index,whichways_deleted(*args))
- when 'getway'; results[index]=AMF.putdata(index,getway(args[0].to_i))
- when 'getrelation'; results[index]=AMF.putdata(index,getrelation(args[0].to_i))
- when 'getway_old'; results[index]=AMF.putdata(index,getway_old(args[0].to_i,args[1]))
- when 'getway_history'; results[index]=AMF.putdata(index,getway_history(args[0].to_i))
- when 'getnode_history'; results[index]=AMF.putdata(index,getnode_history(args[0].to_i))
- when 'findgpx'; results[index]=AMF.putdata(index,findgpx(*args))
- when 'findrelations'; results[index]=AMF.putdata(index,findrelations(*args))
- when 'getpoi'; results[index]=AMF.putdata(index,getpoi(*args))
- end
+ self.status = :ok
+ self.content_type = Mime::AMF
+ self.response_body = Dispatcher.new(request.raw_post) do |message,*args|
+ logger.info("Executing AMF #{message}(#{args.join(',')})")
+
+ case message
+ when 'getpresets'; result = getpresets(*args)
+ when 'whichways'; result = whichways(*args)
+ when 'whichways_deleted'; result = whichways_deleted(*args)
+ when 'getway'; result = getway(args[0].to_i)
+ when 'getrelation'; result = getrelation(args[0].to_i)
+ when 'getway_old'; result = getway_old(args[0].to_i,args[1])
+ when 'getway_history'; result = getway_history(args[0].to_i)
+ when 'getnode_history'; result = getnode_history(args[0].to_i)
+ when 'findgpx'; result = findgpx(*args)
+ when 'findrelations'; result = findrelations(*args)
+ when 'getpoi'; result = getpoi(*args)