# 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