# File syndicator/syndicator.rb, line 68 def serviceRequest(xml) requestId = nil subscriber_id = nil subscription_id = nil action = nil errorCode = nil parser = NQXML::Dispatcher.new(xml) parser.handle(start_element:start_element, )ice-payload ice-header ice-sender)) { | entity | subscriber_id = entity.attrs['sender-id'] } parser.handle(start_element:start_element, )ice-payload ice-request)) { | entity | requestId = entity.attrs['request-id'] } parser.handle(start_element:start_element, )ice-payload ice-request ice-get-package)) { | entity | subscription_id = entity.attrs['subscription-id'] action = returnSubscription:returnSubscription } parser.handle(start_element:start_element, )ice-payload ice-response ice-code)) { | entity | errorCode = entity.attrs['numeric'].to_i action = surprise:surprise } parser.handle(start_element:start_element, )ice-payload ice-request ice-nop)) { | entity | action = ping:ping } begin parser.start() rescue NQXML::ParserError => ex str = "XML error, line #{ex.line} column #{ex.column}: #{$!}" Log::log(Log::INFO, 'syn', "#{str}; XML = #{xml}") return error(302, requestId || 'UNKNOWN', str) rescue Log::log(Log::INFO, 'syn', "error 500; XML = #{xml}") return error(500, requestId || 'UNKNOWN', $!) end subscriber = nil if requestId.nil? || requestId.empty? return error(401, 'UNKNOWN', "Request ID is missing in xml #{xml}") elsif subscriber_id.nil? || subscriber_id.empty? return error(405, requestId, "Sender ID is missing in xml #{xml}") elsif (subscriber = SubscriberStore.fetchSubscriber(subscriber_id)).nil? # Reject unknown subscriber ids # non-DEBUG (original) return error(405, requestId, "Unknown subscriber ID #{subscriber_id}") # DEBUG # Log::log(Log::DEBUG, 'syn', "unknown: " + @subscribers.inspect) # return error(405, requestId, # "Unknown subscriber ID #{subscriber_id}; these are" + # " the subscribers I know:" + # @subscribers.inspect) end case action when surprise:surprise # FIX: handle confirmation messages and other surprises Log::log(Log::DEBUG, 'syn', "surprise") when returnSubscription:returnSubscription Log::log(Log::DEBUG, 'syn', "return subscription") if subscription_id.nil? || subscription_id.empty? return error(406, requestId, "Subscription ID is missing in xml #{xml}") else # All is well return response(requestId, subscriber, subscription_id) end when ping:ping Log::log(Log::DEBUG, 'syn', "ping") return pingResponse(requestId) else Log::log(Log::WARNING, 'syn', "unknown action") return error(407, requestId, "Request is not one of (" + " subscription request, ping, surprise)") end end