tABC_CC ABC_BridgeWatcherConnect(Wallet &self, tABC_Error *pError) { tABC_CC cc = ABC_CC_Ok; tABC_GeneralInfo *ppInfo = NULL; const char *szServer = FALLBACK_OBELISK; Watcher *watcher = nullptr; ABC_CHECK_NEW(watcherFind(watcher, self)); // Pick a server: if (isTestnet()) { szServer = TESTNET_OBELISK; } else if (ABC_CC_Ok == ABC_GeneralGetInfo(&ppInfo, pError) && 0 < ppInfo->countObeliskServers) { ++gLastObelisk; if (ppInfo->countObeliskServers <= gLastObelisk) gLastObelisk = 0; szServer = ppInfo->aszObeliskServers[gLastObelisk]; } // Connect: ABC_DebugLog("Wallet %s connecting to %s", self.id().c_str(), szServer); watcher->connect(szServer); exit: ABC_GeneralFreeInfo(ppInfo); return cc; }
/** * Sync the wallet's data */ tABC_CC ABC_WalletSyncData(tABC_WalletID self, int *pDirty, tABC_Error *pError) { tABC_CC cc = ABC_CC_Ok; ABC_SET_ERR_CODE(pError, ABC_CC_Ok); tABC_GeneralInfo *pInfo = NULL; char *szDirectory = NULL; char *szSyncDirectory = NULL; tWalletData *pData = NULL; bool bExists = false; bool bNew = false; // Fetch general info ABC_CHECK_RET(ABC_GeneralGetInfo(&pInfo, pError)); // create the wallet root directory if necessary ABC_CHECK_RET(ABC_WalletCreateRootDir(pError)); // create the wallet directory - <Wallet_UUID1> <- All data in this directory encrypted with MK_<Wallet_UUID1> ABC_CHECK_RET(ABC_WalletGetDirName(&szDirectory, self.szUUID, pError)); ABC_CHECK_RET(ABC_FileIOFileExists(szDirectory, &bExists, pError)); if (!bExists) { ABC_CHECK_RET(ABC_FileIOCreateDir(szDirectory, pError)); } // create the wallet sync dir under the main dir ABC_CHECK_RET(ABC_WalletGetSyncDirName(&szSyncDirectory, self.szUUID, pError)); ABC_CHECK_RET(ABC_FileIOFileExists(szSyncDirectory, &bExists, pError)); if (!bExists) { ABC_CHECK_RET(ABC_FileIOCreateDir(szSyncDirectory, pError)); // Init repo ABC_CHECK_RET(ABC_SyncMakeRepo(szSyncDirectory, pError)); bNew = true; } // load the wallet data into the cache ABC_CHECK_RET(ABC_WalletCacheData(self, &pData, pError)); ABC_CHECK_ASSERT(NULL != pData->szWalletAcctKey, ABC_CC_Error, "Expected to find RepoAcctKey in key cache"); // Sync ABC_CHECK_RET(ABC_SyncRepo(pData->szWalletSyncDir, pData->szWalletAcctKey, pDirty, pError)); if (*pDirty || bNew) { *pDirty = 1; ABC_CHECK_RET(ABC_WalletClearCache(pError)); } exit: ABC_FREE_STR(szSyncDirectory); ABC_FREE_STR(szDirectory); ABC_GeneralFreeInfo(pInfo); return cc; }