# 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