Пример #1
0
void Start(MockBusClient& busClient, MojRefCountedPtr<ActivitySet>& actSet)
{
	MockDoneSlot startSlot;
	actSet->StartActivities(startSlot.GetSlot());
	busClient.ProcessRequests();

	ASSERT_TRUE( startSlot.Called() );
}
Пример #2
0
MojErr MojDbQuotaEngine::initUsage(MojDbKind* kind, MojDbReq& req)
{
	MojAssert(kind);

	MojRefCountedPtr<MojDbStorageItem> item;
	MojErr err = m_usageDb->get(kind->id(), req.txn(), false, item);
	MojErrCheck(err);
	if (!item.get()) {
		MojObject stats;
		MojSize usage = 0;
		err = kind->stats(stats, usage, req, false);
		MojErrCheck(err);
		err = insertUsage(kind->id(), (MojInt64) usage, req.txn());
		MojErrCheck(err);
	}
	return MojErrNone;
}
Пример #3
0
	MojErr sendEcho(const MojChar* json, const MojObject& expectedResponse, const MojChar* method)
	{
		MojRefCountedPtr<EchoResponseHdlr> handler(new EchoResponseHdlr(expectedResponse, ++m_pendingResponseCount));
		MojAllocCheck(handler.get());

		MojRefCountedPtr<MojServiceRequest> req;
		MojErr err = m_service.createRequest(req);
		MojTestErrCheck(err);

		MojObject payload;
		err = payload.fromJson(json);
		MojTestErrCheck(err);
		err = req->send(handler->m_slot, ServiceName, method, payload);
		MojTestErrCheck(err);

		return MojErrNone;
	}
Пример #4
0
void End(MockBusClient& busClient, MojRefCountedPtr<ActivitySet>& actSet)
{
	MockDoneSlot endSlot;
	actSet->EndActivities(endSlot.GetSlot());
	busClient.ProcessRequests();

	ASSERT_TRUE( endSlot.Called() );
}
Пример #5
0
MojErr MojDbKindState::writeTokens(const MojObject& tokensObj)
{
	MojAssert(m_kindEngine);
	MojAssertMutexLocked(m_lock);

	MojDbStorageDatabase* db = m_kindEngine->kindDb();
	MojRefCountedPtr<MojDbStorageTxn> txn;
	MojErr err = db->beginTxn(txn);
	MojErrCheck(err);
	MojAssert(txn.get());
	err = writeObj(TokensKey, tokensObj, db, txn.get(), m_oldTokensItem);
	MojErrCheck(err);
	err = txn->commit();
	MojErrCheck(err);

	return MojErrNone;
}
Пример #6
0
MojErr MojDbKindState::readObj(const MojChar* key, MojObject& val, MojDbStorageDatabase* db,
		MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageItem>& oldItem)
{
	MojAssert(key && db);

	MojErr err = db->get(m_kindId, txn, false, oldItem);
	MojErrCheck(err);
	if (oldItem.get()) {
		// get objects
		MojObject obj;

		// TODO: this bugging ( on calling getObj)
		err = oldItem->toObject(obj, *m_kindEngine, false);
		MojErrCheck(err);
		obj.get(key, val);
	}
	return MojErrNone;
}
Пример #7
0
MojErr MojDb::getImpl(const MojObject& id, MojObjectVisitor& visitor, MojDbOp op, MojDbReq& req)
{
	MojRefCountedPtr<MojDbStorageItem> item;
	MojErr err = m_objDb->get(id, req.txn(), false, item);
	MojErrCheck(err);
	if (item.get()) {
		MojString kindId;
		err = item->kindId(kindId, m_kindEngine);
		MojErrCheck(err);
		err = m_kindEngine.checkPermission(kindId, op, req);
		MojErrCheck(err);
		err = item->visit(visitor, m_kindEngine);
		MojErrCheck(err);
		err = item->close();
		MojErrCheck(err);
	}
	return MojErrNone;
}
Пример #8
0
MojErr MojDbTestStorageEngine::openSequence(const MojChar* name, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageSeq>& seqOut)
{
	MojErr err = checkErrMap(_T("engine.openSequence"));
	MojErrCheck(err);

	MojAssert(name && !seqOut.get());
	//open the actual storage sequence
	MojAssert(m_engine.get());
	MojRefCountedPtr<MojDbStorageSeq> realSeq;
	err = m_engine->openSequence(name, MojTestTxn(txn), realSeq);
	MojErrCheck(err);

	//create the test storage seq as a wrapper
	MojRefCountedPtr<MojDbTestStorageSeq> seq(new MojDbTestStorageSeq(realSeq.get(), this));
	MojAllocCheck(seq.get());
	seqOut = seq;

	return MojErrNone;
}
Пример #9
0
MojErr MojDbSandwichEngine::beginTxn(MojRefCountedPtr<MojDbStorageTxn>& txnOut)
{
    MojAssert(!txnOut.get());

    MojRefCountedPtr<MojDbSandwichEnvTxn> txn(new MojDbSandwichEnvTxn(m_db));
    MojAllocCheck(txn.get());
    txnOut = txn;

    return MojErrNone;
}
Пример #10
0
MojErr MojDbTestStorageIndex::find(MojAutoPtr<MojDbQueryPlan> plan, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageQuery>& queryOut)
{
	MojErr err = m_testEngine->checkErrMap(_T("index.find"));
	MojErrCheck(err);

	MojAssert(m_idx.get());
	MojAssert(plan.get());

	//create the real query
	MojRefCountedPtr<MojDbStorageQuery> realQuery;
	err = m_idx->find(plan, MojTestTxn(txn), realQuery);
	MojErrCheck(err);

	MojRefCountedPtr<MojDbTestStorageQuery> storageQuery(new MojDbTestStorageQuery(realQuery.get(), m_testEngine));
	MojAllocCheck(storageQuery.get());
	queryOut = storageQuery;

	return MojErrNone;
}
Пример #11
0
MojErr MojDbTestStorageIndex::beginTxn(MojRefCountedPtr<MojDbStorageTxn>& txnOut)
{
	MojErr err = m_testEngine->checkErrMap(_T("index.beginTxn"));
	MojErrCheck(err);

	MojAssert(m_idx.get());

	//create the real transaction
	MojRefCountedPtr<MojDbStorageTxn> realTxn;
	err = m_idx->beginTxn(realTxn);
	MojErrCheck(err);

	//create a test txn wrapper around the real txn
	MojRefCountedPtr<MojDbTestStorageTxn> txn(new MojDbTestStorageTxn(realTxn.get(), m_testEngine));
	MojAllocCheck(txn.get());
	txnOut = txn;

	return MojErrNone;
}
Пример #12
0
MojErr MojDbTestStorageEngine::openDatabase(const MojChar* name, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageDatabase>& dbOut)
{
	MojErr err = checkErrMap(_T("engine.openDatabase"));
	MojErrCheck(err);

	MojAssert(name && !dbOut.get());
	//open the actual storage database
	MojAssert(m_engine.get());
	MojRefCountedPtr<MojDbStorageDatabase> realDb;
	err = m_engine->openDatabase(name, MojTestTxn(txn), realDb);
	MojErrCheck(err);

	//create the test storage db as a wrapper
	MojRefCountedPtr<MojDbTestStorageDatabase> db(new MojDbTestStorageDatabase(realDb.get(), this));
	MojAllocCheck(db.get());
	dbOut = db;

	return MojErrNone;
}
Пример #13
0
void ImapSession::Connected(const MojRefCountedPtr<SocketConnection>& connection)
{
	m_connection = connection;
	
	if(connection.get()) {
		m_inputStream = connection->GetInputStream();
		m_outputStream = connection->GetOutputStream();

		m_closedSlot.cancel(); // make sure it's not connected to a slot
		m_connection->WatchClosed(m_closedSlot);

		if(NeedLoginCapabilities()) {
			CheckLoginCapabilities();
		} else {
			LoginCapabilityComplete();
		}
	} else {
		CheckQueue();
	}
}
Пример #14
0
MojErr MojDbSandwichEngine::beginTxn(MojRefCountedPtr<MojDbStorageTxn>& txnOut)
{
    LOG_TRACE("Entering function %s", __FUNCTION__);
    MojAssert(!txnOut.get());

    MojRefCountedPtr<MojDbSandwichEnvTxn> txn(new MojDbSandwichEnvTxn(m_db));
    MojAllocCheck(txn.get());
    txnOut = txn;

    return MojErrNone;
}
Пример #15
0
MojErr MojDbTestStorageDatabase::openIndex(const MojObject& id, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageIndex>& indexOut)
{
	MojErr err = m_testEngine->checkErrMap(_T("db.openIndex"));
	MojErrCheck(err);

	MojAssert(m_db.get());
	MojAssert(!indexOut.get());

	//open the actual storage index
	MojRefCountedPtr<MojDbStorageIndex> realIdx;
	err = m_db->openIndex(id, MojTestTxn(txn), realIdx);
	MojErrCheck(err);

	//create the test storage index as a wrapper
	MojRefCountedPtr<MojDbTestStorageIndex> index(new MojDbTestStorageIndex(realIdx.get(), m_testEngine));
	MojAllocCheck(index.get());
	indexOut = index;

	return MojErrNone;
}
Пример #16
0
MojErr MojDbTestStorageEngine::beginTxn(MojRefCountedPtr<MojDbStorageTxn>& txnOut)
{
	MojErr err = checkErrMap(_T("engine.beginTxn"));
	MojErrCheck(err);

	MojAssert(m_engine.get());
	MojAssert(!txnOut.get());

	//create the real transaction
	MojRefCountedPtr<MojDbStorageTxn> realTxn;
	err = m_engine->beginTxn(realTxn);
	MojErrCheck(err);

	//create a test txn wrapper around the real txn
	MojRefCountedPtr<MojDbTestStorageTxn> txn(new MojDbTestStorageTxn(realTxn.get(), this));
	MojAllocCheck(txn.get());
	txnOut = txn;

	return MojErrNone;
}
Пример #17
0
MojErr MojDb::delImpl(const MojObject& id, bool& foundOut, MojObject& foundObjOut, MojDbReq& req, MojUInt32 flags)
{
	MojLogTrace(s_log);

	foundObjOut.clear();
	// get object, so we can find the type
	MojRefCountedPtr<MojDbStorageItem> item;
	MojErr err = m_objDb->get(id, req.txn(), true, item);
	MojErrCheck(err);
	if (item.get()) {
		// and delete it
		MojObject obj;
		err = item->toObject(obj, m_kindEngine);
		MojErrCheck(err);
		err = delObj(id, obj, item.get(), foundObjOut, req, flags);
		MojErrCheck(err);
		foundOut = true;
	}
	return MojErrNone;
}
Пример #18
0
void ImapSession::DownloadPart(const MojObject& folderId, const MojObject& emailId, const MojObject& partId, const MojRefCountedPtr<DownloadListener>& listener, Command::Priority priority)
{
	MojRefCountedPtr<FetchPartCommand> command(new FetchPartCommand(*this, folderId, emailId, partId, priority));

	// Look for an active command
	MojRefCountedPtr<ImapCommand> activeCommand = FindActiveCommand(command);
	if(activeCommand.get()) {
		MojLogDebug(m_log, "attaching download request to existing active command");

		if(listener.get())
			static_cast<FetchPartCommand*>(activeCommand.get())->AddDownloadListener(listener);

		return;
	}

	// Look for a pending command with equal or higher priority
	// TODO: requeue if a higher priority is needed
	MojRefCountedPtr<ImapCommand> pendingCommand = FindPendingCommand(command);
	if(pendingCommand.get() && pendingCommand->GetPriority() >= priority) {
		MojLogDebug(m_log, "attaching download request to existing pending command");

		if(listener.get())
			static_cast<FetchPartCommand*>(pendingCommand.get())->AddDownloadListener(listener);

		// Poke the queue in case it's not already running
		CheckQueue();
		return;
	}

	// Otherwise, use the new command
	if(listener.get())
		command->AddDownloadListener(listener);

	// If this is a high priority request, set m_recentUserInteraction to true
	if (priority >= Command::HighPriority) {
		m_recentUserInteraction = true;
	}

	m_commandManager->QueueCommand(command, false);
	CheckQueue();
}
Пример #19
0
MojErr MojDbLunaServiceDb::openDb(MojDbEnv* env, const MojChar* dir, const MojObject& conf)
{
    LOG_TRACE("Entering function %s", __FUNCTION__);
    MojAssert(env && dir);

    MojErr err;
    //  MojRefCountedPtr<MojDbBerkeleyEngine> engine(new MojDbBerkeleyEngine);
    MojRefCountedPtr<MojDbStorageEngine> engine;
    MojDbStorageEngine::engineFactory()->create(engine);
    MojAllocCheck(engine.get());
    err = engine->configure(conf);
    MojErrCheck(err);
    err = engine->open(dir, env);
    MojErrCheck(err);

    // open db
    err = m_db.open(dir, engine.get());
    MojErrCheck(err);

    return MojErrNone;
}
MojErr DbPermissionsConfigurator::ProcessConfig(const string& filePath, MojObject& permissions)
{
	LOG_TRACE("Entering function %s", __FUNCTION__);

	std::string owner;
	MojObject perms;

	owner = ParentId(filePath);
    MojErr err = perms.put("permissions", permissions);
    MojErrCheck(err);

	// for third-party packages, we set the appid on the service request
	// so that mojodb does things correctly.  root config files aren't split up
	// in a per-service/app directory way (though they should be like activitymanager)
	MojRefCountedPtr<MojServiceRequest> request;
	if (!owner.empty())
		request = m_busClient.CreateRequest(owner.c_str());
	else
		request = m_busClient.CreateRequest();
	return request->send(CreateCallback(filePath)->m_slot, ServiceName(), MOJODB_PUTPERMISSIONS_METHOD, perms);
}
Пример #21
0
// Cleanup sync sessions and activities
// Part of State_Cleanup
void ImapSession::CleanupAfterDisconnect()
{
	if(m_client.get() && !m_client->DisableAccountInProgress()) {
		MojRefCountedPtr<SyncSession> syncSession = m_client->GetSyncSession(m_folderId);

		if(syncSession.get()) {
			MojLogInfo(m_log, "stopping sync session after disconnect");
			// Indicate that the sync session may need to schedule a retry.
			// This will probably get ignored if the sync session is already ending (successful or not).
			syncSession->SetQueueStopped();

			// Stop the sync session
			syncSession->RequestStop(m_syncSessionDoneSlot);
		} else {
			// Schedule push, if necessary
			SchedulePush();
		}
	} else {
		EndActivities();
	}
}
Пример #22
0
MojErr MojDbBerkeleyEngine::beginTxn(MojRefCountedPtr<MojDbStorageTxn>& txnOut)
{
	MojAssert(!txnOut.get());
	MojLogTrace(MojDbBerkeleyEngine::s_log);

	MojRefCountedPtr<MojDbBerkeleyTxn> txn(new MojDbBerkeleyTxn());
	MojAllocCheck(txn.get());
	MojErr err = txn->begin(this);
	MojErrCheck(err);
	txnOut = txn;

	return MojErrNone;
}
Пример #23
0
MojErr MojDbIndex::createExtractor(const MojObject& propObj, MojRefCountedPtr<MojDbExtractor>& extractorOut)
{
    LOG_TRACE("Entering function %s", __FUNCTION__);
	MojAssert(!isOpen());

	// type
	MojString type;
	bool found = false;
	MojErr err = propObj.get(TypeKey, type, found);
	MojErrCheck(err);
	if (found && type == MultiKey) {
		extractorOut.reset(new MojDbMultiExtractor);
		MojAllocCheck(extractorOut.get());
	} else {
		extractorOut.reset(new MojDbPropExtractor);
		MojAllocCheck(extractorOut.get());
	}
	err = extractorOut->fromObject(propObj, m_locale);
	MojErrCheck(err);

	return MojErrNone;
}
Пример #24
0
MojErr MojDbTestStorageEnv::openStorage(MojRefCountedPtr< MojDbStorageEngine >& storage)
{
	MojErr err;

	MojRefCountedPtr<MojDbStorageEngine> parentEngine;
	err = m_env->openStorage(parentEngine);
	MojErrCheck(err);

	MojRefCountedPtr<MojDbTestStorageEnv> thiz(this);
	storage.reset(new MojDbTestStorageEngine(thiz, parentEngine));

	return MojErrNone;
}
Пример #25
0
/*
 * 1. get account details from accountservices or db?
 */
MojErr OnEnabledHandler::start(const MojObject& payload)
{

	IMServiceHandler::logMojObjectJsonString(_T("OnEnabledHandler payload: %s"), payload);

	MojString accountId;
	MojErr err = payload.getRequired(_T("accountId"), accountId);
	if (err != MojErrNone) {
		MojLogError(IMServiceApp::s_log, _T("OnEnabledHandler accountId missing so bailing. error %d"), err);
		return err;
	}

	err = payload.getRequired(_T("enabled"), m_enable);
	if (err != MojErrNone) {
		MojLogError(IMServiceApp::s_log, _T("OnEnabledHandler enabled missing, assuming 'false'"));
		m_enable = false;
	}
	
	err = payload.getRequired(_T("capabilityProviderId"), m_capabilityProviderId);
	if (err != MojErrNone) {
		MojLogError(IMServiceApp::s_log, _T("OnEnabledHandler capabilityProviderId missing so bailing. error %d"), err);
		return err;
	}

	MojRefCountedPtr<MojServiceRequest> req;
	err = m_service->createRequest(req);
	if (err != MojErrNone) {
		MojLogError(IMServiceApp::s_log, _T("OnEnabledHandler::start createRequest failed. error %d"), err);
	} else {
		MojObject params;
		params.put(_T("accountId"), accountId);
		err = req->send(m_getAccountInfoSlot, "com.palm.service.accounts", "getAccountInfo", params, 1);
		if (err) {
			MojLogError(IMServiceApp::s_log, _T("OnEnabledHandler::start: getAccountInfo id %s failed. error %d"), accountId.data(), err);
		}
	}

	return MojErrNone;
}
Пример #26
0
MojErr MojDbLevelDatabase::openIndex(const MojObject& id, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageIndex>& indexOut)
{
    LOG_TRACE("Entering function %s", __FUNCTION__);
    MojAssert(!indexOut.get());

    MojRefCountedPtr<MojDbLevelIndex> index(new MojDbLevelIndex());
    MojAllocCheck(index.get());
    MojErr err = index->open(id, this, txn);
    MojErrCheck(err);
    indexOut = index;

    return MojErrNone;
}
Пример #27
0
MojErr MojDbBerkeleyEngine::openSequence(const MojChar* name, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageSeq>& seqOut)
{
	MojAssert(name && !seqOut.get());
	MojLogTrace(MojDbBerkeleyEngine::s_log);

	MojRefCountedPtr<MojDbBerkeleySeq> seq(new MojDbBerkeleySeq());
	MojAllocCheck(seq.get());
	MojErr err = seq->open(name, m_seqDb.get());
	MojErrCheck(err);
	seqOut = seq;

	return MojErrNone;
}
ConnectionState::ConnectionStateHandler::ConnectionStateHandler(MojService* service, ConnectionState* connState)
: m_connMgrSubscriptionSlot(this, &ConnectionState::ConnectionStateHandler::connectionManagerResult),
  m_service(service),
  m_connState(connState),
  m_receivedResponse(false)
{
	MojLogInfo(IMServiceApp::s_log, "ConnectionStateHandler constructor");

	MojRefCountedPtr<MojServiceRequest> req;
	MojErr err = m_service->createRequest(req);
	if (err)
	{
		MojLogError(IMServiceApp::s_log, _T("ConnectionStateHandler: create request failed"));
	}
	else
	{
		MojObject params;
		params.put("subscribe", true);
		params.put("start", true);
		params.put("detailedEvents", true); // This tells activitymanager to send us updates whenever the trigger changes

		const char* activityJson =
				"{\"name\":\"Libpurple connection watch\","
				"\"description\":\"Libpurple connection watch\","
				// Need immediate:true to prevent blocking other low priority activities from running
				"\"type\": {\"immediate\": true, \"priority\": \"low\"},"
				"\"requirements\":{\"internet\":true}"
				"}";
		MojObject activity;
		activity.fromJson(activityJson);
		params.put("activity", activity);

		err = req->send(m_connMgrSubscriptionSlot, "com.palm.activitymanager","create", params, MojServiceRequest::Unlimited);
		if (err)
		{
			MojLogError(IMServiceApp::s_log, _T("ConnectionStateHandler send request failed"));
		}
	}
}
Пример #29
0
MojErr MojDbBerkeleyEngine::openDatabase(const MojChar* name, MojDbStorageTxn* txn, MojRefCountedPtr<MojDbStorageDatabase>& dbOut)
{
	MojAssert(name && !dbOut.get());
	MojLogTrace(MojDbBerkeleyEngine::s_log);

	MojRefCountedPtr<MojDbBerkeleyDatabase> db(new MojDbBerkeleyDatabase());
	MojAllocCheck(db.get());
	bool created = false;
	MojErr err = db->open(name, this, created, txn);
	MojErrCheck(err);
	dbOut = db;

	return MojErrNone;
}
void SmtpSyncOutboxCommand::AttachAdoptedActivity(MojRefCountedPtr<Activity> activity, const MojString& activityId, const MojString& activityName)
{
	MojLogInfo(m_log, "Attaching adopted activity, incoming activityId=%s, name=%s. WatchActivityName=%s"
		, activityId.data(), activityName.data(), m_outboxWatchActivityName.data());

	if (activityName == m_outboxWatchActivityName) {
		if(m_outboxWatchActivity.get() && activity.get()) {
			MojLogWarning(m_log, "%s: outbox activity already attached; replacing activity %s with %s", __PRETTY_FUNCTION__, AsJsonString(m_outboxWatchActivity->GetActivityId()).c_str(), AsJsonString(activity->GetActivityId()).c_str());
		}

		m_outboxWatchActivity = activity;
	} else if (activityName == m_accountWatchActivityName) {
		if(m_accountWatchActivity.get() && activity.get()) {
			MojLogWarning(m_log, "%s: account watch activity already attached; replacing activity %s with %s", __PRETTY_FUNCTION__, AsJsonString(m_accountWatchActivity->GetActivityId()).c_str(), AsJsonString(activity->GetActivityId()).c_str());
		}

		m_accountWatchActivity = activity;
	} else {
		m_manualActivities.push_back( activity );
	}
	
	m_networkStatus->ParseActivity(activity);
}