Select Git revision
requesterimpl.cpp
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
requesterimpl.cpp 4.46 KiB
/**
* Copyright (C) 2004-2005 Savoir-Faire Linux inc.
* Author: Jean-Philippe Barrette-LaPierre
* <jean-philippe.barrette-lapierre@savoirfairelinux.com>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdexcept>
#include <sstream>
#include "requesterimpl.h"
#include "sessionio.h"
#include "answerreceiver.h"
RequesterImpl::RequesterImpl()
: mCallIdCount(0)
, mSessionIdCount(0)
, mSequenceIdCount(0)
{
registerObject< AccountRequest >(std::string("register"));
}
SessionIO *
RequesterImpl::getSessionIO(const std::string &sessionId)
{
std::map< std::string, SessionIO * >::iterator pos = mSessions.find(sessionId);
if(pos == mSessions.end()) {
throw std::runtime_error("The session is not valid.");
}
return (*pos).second;
}
std::string
RequesterImpl::send(const std::string &sessionId,
const std::string &command,
const std::list< std::string > &args)
{
// We retreive the internal of a session.
SessionIO *session = getSessionIO(sessionId);
// We ask the factory to create the request.
std::string sequenceId = generateSequenceId();
Request *request = mRequestFactory.create(command, sequenceId, args);
registerRequest(sessionId, sequenceId, request);
session->send(request->toString());
return sequenceId;
}
void
RequesterImpl::registerRequest(const std::string &sessionId,
const std::string &sequenceId,
Request *request)
{
if(mRequests.find(sequenceId) != mRequests.end()) {