//---------------------------------------------------------------
// MsgSendUtil::send
// @see header file
//--------------------------------------------------------------
int MsgSendUtil::send(ConvergedMessage& msg)
{
    QDEBUG_WRITE("START MsgSendUtil::send");
    int retValue = KErrGeneral;
    bool emailOverSmsSupported = false;
    long int id = saveToDrafts(msg);
    if(id != -1)
    {
        checkEmailOverSms(msg, emailOverSmsSupported);
        UniEditorPluginInterface* pluginInterface =
            mPluginLoader->getUniEditorPlugin(msg.messageType());
        if( validateService(pluginInterface, emailOverSmsSupported) )
        {
            pluginInterface->send(id);
            retValue = KErrNone;
        }
        else
        {
            //Delete the entry created in drafts as we are switching to settings
            pluginInterface->deleteDraftsEntry(id);
            retValue = KErrNotFound;
        }
    }

    QDEBUG_WRITE("END MsgSendUtil::send");
    return retValue;
}
	integer ServiceApp::startCommand(ConstStrA command, const Args & args, SeqFileOutput &serr) {
		if (command == ConstStrA(startCmd)) {
			integer x = validateService(args,serr);
			if (x) return x;
			createInstanceFile();
			x = onMessage(command,args,serr);
			if (x) return x;
			x = initService(args,serr);
			if (x) return x;
			serr = nil;
			instance->enterDaemonMode(restartDelaySec);
			return startService();
		} else if (command == ConstStrA(startForeCmd)) {
			integer x = validateService(args,serr);
			if (x) return x;
			createInstanceFile();
			x = onMessage(command,args,serr);
			if (x) return x;
			x = initService(args,serr);
			if (x) return x;
			return startService();
		} else if (command == ConstStrA(restartCmd)){
			integer x = validateService(args,serr);
			if (x) return x;
			try {
				instance->open();
				postMessage(stopCmd,Args(), serr);
				instance->waitForTerminate(timeout);
			} catch (ProgInstance::NotRunningException &) {
			} catch (ProgInstance::TimeoutException &) {
				instance->terminate();
				instance->waitForTerminate(timeout);
			}
			createInstanceFile();
			x = onMessage(command,args,serr);
			if (x) return x;
			x = initService(args,serr);
			if (x) return x;
			serr = nil;
			instance->enterDaemonMode(restartDelaySec);
			return startService();
		} else if (command == ConstStrA(stopCmd)) {
			try {
				instance->open();
				integer res = postMessage(command,args, serr);
				if (res == 0) instance->waitForTerminate(timeout);
				return res;
			} catch (ProgInstance::TimeoutException &) {
				instance->terminate();
				return 0;
			}
		} else if (command == ConstStrA(waitCmd)) {
			natural timeout = naturalNull;
			if (!args.empty()) {
				TextParser<wchar_t> parser;
				if (parser(L" %u1 ",args[0])) timeout = parser[1];
			}
			instance->open();
			instance->waitForTerminate(timeout);
		}
		else if (command == ConstStrA(testCmd)) {
			integer x = validateService(args, serr);
			return x;
		} else if (command == ConstStrA(runTestsCmd)) {
			if (args.empty())
				return Singleton<TestCollector>::getInstance().runTests(ConstStrA(), serr);
			else if (args[0] == ConstStrW(L"list")) {
				SeqTextOutA out(serr);
				TextOut<SeqTextOutA> print(out);
				print("%1\n")<<(Singleton<TestCollector>::getInstance().listTests());
				return 0;
			}
			else
				return Singleton<TestCollector>::getInstance().runTests(args[1], serr);
		
		} else {
			instance->open();
			return postMessage(command,args, serr);
		}
		return 0;
	}