bool
QmfObject::process_event(ConsoleEvent &event)
{
	QmfAsyncRequest *ar;

	if (event.getType() == CONSOLE_METHOD_RESPONSE) {
		ar = _outstanding_calls[event.getCorrelator()];
		if (ar) {
			qpid::types::Variant::Map my_map = event.getArguments();
			if (ar->state == QmfAsyncRequest::JOB_RUNNING) {
				method_response(ar, my_map, RPC_OK);
			} else {
				qb_log(LOG_ERR, " method_response is too late! ");
			}
			_outstanding_calls.erase(event.getCorrelator());
			ar->unref();
		}
	} else if (event.getType() == CONSOLE_EXCEPTION) {
		ar = _outstanding_calls[event.getCorrelator()];
		if (ar) {
			qpid::types::Variant::Map my_map;
			string error(" unknown ");

			if (event.getDataCount() >= 1) {
				my_map = event.getData(0).getProperties();
				error = (string)event.getData(0).getProperty("error_text");
			}
			qb_log(LOG_ERR, "%s'ing: EXCEPTION %s ",
			       ar->method.c_str(), error.c_str());

			method_response(ar, my_map, RPC_EXCEPTION);
			_outstanding_calls.erase(event.getCorrelator());
			ar->unref();
		}
	} else if (event.getType() == CONSOLE_EVENT) {
		if (_event_fn != NULL) {
			_event_fn(event, _event_user_data);
		}
	}

	return true;
}
static void
method_call_tmo(void* data)
{
	QmfAsyncRequest *ar = (QmfAsyncRequest *)data;
	gdouble elapsed = 0;

	if (ar->state == QmfAsyncRequest::JOB_COMPLETED) {
		// all good - it's finished
	} else {
		// timed out :(
		qpid::types::Variant::Map empty_args;
		if (ar->state == QmfAsyncRequest::JOB_SCHEDULED) {
			ar->obj->method_response(ar, empty_args, QmfObject::RPC_NOT_CONNECTED);
		} else {
			ar->obj->method_response(ar, empty_args, QmfObject::RPC_TIMEOUT);
		}
	}
	ar->unref();
}