# File lib/rudy/aws/sdb.rb, line 204
204:       def call(method, params)
205:         params.merge!( {
206:             'Version' => '2007-11-07',
207:             'SignatureVersion' => '1',
208:             'AWSAccessKeyId' => @access_key_id,
209:             'Timestamp' => Time.now.gmtime.iso8601
210:           }
211:         )
212:         data = ''
213:         query = []
214:         
215:         params.keys.sort_by { |k| k.upcase }.each do |key|
216:           data << "#{key}#{params[key].to_s}"
217:           query << "#{key}=#{CGI::escape(params[key].to_s)}"
218:         end
219:         
220:         digest = OpenSSL::Digest::Digest.new('sha1')
221:         hmac = OpenSSL::HMAC.digest(digest, @secret_access_key, data)
222:         signature = Base64.encode64(hmac).strip
223:         query << "Signature=#{CGI::escape(signature)}"
224:         query = query.join('&')
225:         url = "#{@base_url}?#{query}"
226:         uri = URI.parse(url)
227:         
228:         #Rudy::Huxtable.ld url if Rudy.debug?
229:         
230:         response = execute_request(nil) {
231:           Net::HTTP.new(uri.host, uri.port).send_request(method, uri.request_uri)
232:         }
233:         
234:         if !response.nil?
235:         
236:           @debug.puts("#{response.code}\n#{response.body}") if @debug
237:           raise(ConnectionError.new(response)) unless (200..400).include?(
238:             response.code.to_i
239:           )
240: 
241: 
242:           doc = REXML::Document.new(response.body)
243:           error = doc.get_elements('*/Errors/Error')[0]
244:           raise(
245:             Module.class_eval(
246:               "Rudy::AWS::SDB::#{error.get_elements('Code')[0].text}Error"
247:             ).new(
248:               error.get_elements('Message')[0].text,
249:               doc.get_elements('*/RequestID')[0].text
250:             )
251:           ) unless error.nil?
252:         else
253:           doc = nil
254:         end
255:         doc
256:       end