# File subscriber/subscriber.rb, line 87 def retrieveContentFrom(reply, requestId) content = '' grabText = false @confirmationRequested = false err = errPhrase = nil errMessage = '' Log::log(Log::DEBUG, 'sub', "reply XML = #{reply}") parser = NQXML::Dispatcher.new(reply) # ice-package: check for confirmation request parser.handle(start_element:start_element, )ice-payload ice-response ice-package)) { | entity | @confirmationRequested = (entity.attrs['confirmation'] == 'true') } # ice-code parser.handle(start_element:start_element, )ice-payload ice-response ice-code)) { | entity | # Check for proper request id in reply (else it's not for us # right now). if entity.attrs['message-id'] != requestId.to_s # This isn't a standard ICE error. return "REPLY ID #{entity.attrs['message-id']}" + " DOES NOT MATCH REQUEST ID #{requestId}" end err = entity.attrs['numeric'].to_i Log::log(Log::DEBUG, 'sub', "payload response code = #{err}") case err when 200, # all is well 201, # confirmed 202 # package seq state already current err = nil else errPhrase = entity.attrs['phrase'] end } # ice-code text (error message) parser.handle(text:text, )ice-payload ice-response ice-code)) { | entity | errMessage = entity.text } # ice-item-ref parser.handle(start_element:start_element, )ice-payload ice-response ice-package ice-item-ref)) { | entity | url = URL.parse(entity.attrs['url']) Log::log(Log::DEBUG, 'sub', "ice-item-ref url seen = #{url}") # Append contents of this URL to content already collected. content << url.fetch() Log::log(Log::DEBUG, 'sub', "ice-item-ref content seen = #{content}") } # Text inside ice-item parser.handle(text:text, )ice-payload ice-response ice-package ice-item)) { | entity | # Append contents of this text block to content already collected. content << entity.text Log::log(Log::DEBUG, 'sub', "ice-item content seen = #{content}") } begin parser.start() rescue NQXML::ParserError => ex str = "XML error, line #{ex.line} column #{ex.column}: #{$!}" Log::log(Log::INFO, 'sub', "#{str}; XML = #{xml}") return error(302, requestId || 'UNKNOWN', str) rescue Log::log(Log::INFO, 'sub', "error 500; XML = #{xml}") return error(500, requestId || 'UNKNOWN', $!) end if err str = "Error [#{err} (#{errPhrase})]: #{errMessage} #{reply}" Log::log(Log::DEBUG, 'sub', str) return str else Log::log(Log::DEBUG, 'sub', "returning content #{content}") return content end end