]> git.openstreetmap.org Git - rails.git/blobdiff - app/controllers/amf_controller.rb
Fixed error handling in the name search and tidied things up a bit.
[rails.git] / app / controllers / amf_controller.rb
index e0086b51da766377c639195d06d9f3e4abbd13dc..18a1c63469b6ce91c1a04c31b370552af1e9cb3c 100644 (file)
@@ -34,24 +34,26 @@ class AmfController < ApplicationController
       args=getvalue(req)                               #  | get response (probably an array)
 
       case message
-      when 'getpresets';       results[index]=putdata(index,getpresets)
-      when 'whichways';                results[index]=putdata(index,whichways(args))
-      when 'getway';           results[index]=putdata(index,getway(args))
-      when 'putway';           results[index]=putdata(index,putway(args))
-      when 'deleteway';                results[index]=putdata(index,deleteway(args))
+                 when 'getpresets';    results[index]=putdata(index,getpresets)
+                 when 'whichways';             results[index]=putdata(index,whichways(args))
+                 when 'getway';                results[index]=putdata(index,getway(args))
+                 when 'putway';                results[index]=putdata(index,putway(args))
+                 when 'deleteway';             results[index]=putdata(index,deleteway(args))
       end
     end
 
     # ------------------
     # Write out response
 
-    response.headers["Content-Type"]="application/x-amf"
+    RAILS_DEFAULT_LOGGER.info("  Response: start")
     a,b=results.length.divmod(256)
-    ans=0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
-    results.each do |k,v|
-      ans+=v
-    end
-    render :text => ans
+       render :content_type => "application/x-amf", :text => proc { |response, output| 
+        output.write 0.chr+0.chr+0.chr+0.chr+a.chr+b.chr
+               results.each do |k,v|
+                 output.write(v)
+               end
+       }
+    RAILS_DEFAULT_LOGGER.info("  Response: end")
 
   end
 
@@ -70,7 +72,7 @@ class AmfController < ApplicationController
     presettype=''
     presetcategory=''
 
-    ActiveRecord::Base.logger.info("  Message: getpresets")
+    RAILS_DEFAULT_LOGGER.info("  Message: getpresets")
 
     #          File.open("config/potlatch/presets.txt") do |file|
 
@@ -175,7 +177,7 @@ EOF
     xmax = args[2].to_f+0.01
     ymax = args[3].to_f+0.01
 
-    ActiveRecord::Base.logger.info("  Message: whichways, bbox=#{xmin},#{ymin},#{xmax},#{ymax}")
+    RAILS_DEFAULT_LOGGER.info("  Message: whichways, bbox=#{xmin},#{ymin},#{xmax},#{ymax}")
 
     waylist=WaySegment.find_by_sql("SELECT DISTINCT current_way_segments.id AS wayid"+
        "  FROM current_way_segments,current_segments,current_nodes,current_ways "+
@@ -215,7 +217,7 @@ EOF
     xmin = ymin = 999999
     xmax = ymax = -999999
 
-    ActiveRecord::Base.logger.info("  Message: getway, id=#{wayid}")
+    RAILS_DEFAULT_LOGGER.info("  Message: getway, id=#{wayid}")
 
     readwayquery(wayid).each {|row|
       xs1=long2coord(row['long1'].to_f,baselong,masterscale); ys1=lat2coord(row['lat1'].to_f,basey,masterscale)
@@ -251,7 +253,7 @@ EOF
     ActiveRecord::Base.connection.execute("SET #{db_now}=NOW()")
     originalway=originalway.to_i
 
-    ActiveRecord::Base.logger.info("  Message: putway, id=#{way}")
+    RAILS_DEFAULT_LOGGER.info("  Message: putway, id=#{originalway}")
 
     # -- 3.    read original way into memory
 
@@ -286,6 +288,7 @@ EOF
       ymin=[ys,ymin].min; ymax=[ys,ymax].max
       node=points[i][2].to_i
       tagstr=array2tag(points[i][4])
+         tagstr=tagstr.gsub(/[\000-\037]/,"")
       tagsql="'"+sqlescape(tagstr)+"'"
 
       # compare node
@@ -398,10 +401,12 @@ EOF
     insertsql =''
     currentsql=''
     attributes.each do |k,v|
-      if v=='' then next end
+      if v=='' or v.nil? then next end
       if v[0,6]=='(type ' then next end
       if insertsql !='' then insertsql +=',' end
       if currentsql!='' then currentsql+=',' end
+         k=k.gsub(/[\000-\037]/,"")
+         v=v.gsub(/[\000-\037]/,"")
       insertsql +="(#{way},'"+sqlescape(k)+"','"+sqlescape(v)+"',#{version})"
       currentsql+="(#{way},'"+sqlescape(k)+"','"+sqlescape(v)+"')"
     end
@@ -419,7 +424,7 @@ EOF
   def deleteway(args)
     usertoken,way=args
 
-    ActiveRecord::Base.logger.info("  Message: deleteway, id=#{way}")
+    RAILS_DEFAULT_LOGGER.info("  Message: deleteway, id=#{way}")
 
     uid=getuserid(usertoken); if !uid then return end
        way=way.to_i