bool CESPServerLoggingAgent::getTransactionSeed(IEspGetTransactionSeedRequest& req, IEspGetTransactionSeedResponse& resp) { bool bRet = false; StringBuffer soapreq( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"" " xmlns:SOAP-ENC=\"http://schemas.xmlsoap.org/soap/encoding/\">" " <soap:Body>"); soapreq.append("<GetTransactionSeedRequest/>"); soapreq.append("</soap:Body></soap:Envelope>"); unsigned retry = 1; while (1) { try { int statusCode = 0; StringBuffer statusMessage, transactionSeed; if (!getTransactionSeed(soapreq, statusCode, statusMessage, transactionSeed)) throw MakeStringException(EspLoggingErrors::GetTransactionSeedFailed,"Failed to get TransactionSeed"); resp.setSeedId(transactionSeed.str()); resp.setStatusCode(statusCode); if (statusMessage.length()) resp.setStatusMessage(statusMessage.str()); bRet = true; break; } catch (IException* e) { StringBuffer errorStr, errorMessage; errorMessage.append("Failed to get TransactionSeed: error code ").append(e->errorCode()).append(", error message ").append(e->errorMessage(errorStr)); ERRLOG("%s -- try %d", errorMessage.str(), retry); e->Release(); if (retry < maxGTSRetries) { Sleep(retry*3000); retry++; } else { resp.setStatusCode(-1); resp.setStatusMessage(errorMessage.str()); break; } } } return bRet; }
bool CLoggingManager::getTransactionSeed(StringBuffer& transactionSeed, StringBuffer& status) { if (!initialized) throw MakeStringException(-1,"LoggingManager not initialized"); bool bRet = false; try { Owned<IEspGetTransactionSeedRequest> req = createGetTransactionSeedRequest(); Owned<IEspGetTransactionSeedResponse> resp = createGetTransactionSeedResponse(); transactionSeed.set("Seed"); bRet = getTransactionSeed(*req, *resp); if (bRet && !resp->getStatusCode()) { const char* seed = resp->getSeedId(); if (!seed || !*seed) status.set("Failed to get Transaction Seed"); else { transactionSeed.set(seed); status.set("Transaction Seed returned."); bRet = true; } } else { const char* statusMsg = resp->getStatusMessage(); if (statusMsg && *statusMsg) status.setf("Failed to get Transaction Seed: %s", statusMsg); else status.set("Failed to get Transaction Seed"); } } catch (IException* e) { e->errorMessage(status); status.insert(0, "Failed to get Transaction Seed: "); ERRLOG("%s",status.str()); e->Release(); } return bRet; }