Подписанная PGP ключом ДС Created сделка сначала должна отправляться по bitmessage, затем должна быть отдана МС.
This commit is contained in:
@@ -55,8 +55,6 @@ namespace Apostol {
|
||||
m_Status = psStopped;
|
||||
|
||||
CWebService::InitMethods();
|
||||
|
||||
InitServerList();
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
@@ -39,6 +39,9 @@ Author:
|
||||
#define CONFIG_SECTION_NAME "module"
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#define NOT_FOUND_ACTIVE_CONNECTION "Not found active connection. Try again later."
|
||||
//----------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
extern "C++" {
|
||||
|
||||
namespace Apostol {
|
||||
@@ -490,6 +493,57 @@ namespace Apostol {
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
CWebSocketClient *CWebSocketModule::GetConnectedClient(const CClientContext &Context) {
|
||||
for (int i = 0; i < Context.ClientManager().Count(); i++) {
|
||||
auto pClient = Context.ClientManager()[i];
|
||||
if (pClient->Connected())
|
||||
return pClient;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
int CWebSocketModule::CurrentContextIndex(const CString &Params) {
|
||||
|
||||
int index = 0;
|
||||
while (index < m_Servers.Count()) {
|
||||
const auto &caContext = m_Servers[index].Value();
|
||||
if (caContext.Status() == Context::csRunning) {
|
||||
if (Params.IsEmpty() || Params == caContext.URL().Origin()) {
|
||||
auto pClient = GetConnectedClient(caContext);
|
||||
if (pClient != nullptr)
|
||||
return index;
|
||||
}
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
CWebSocketClient *CWebSocketModule::GetConnectedClient(const CString &Params) {
|
||||
|
||||
int index = 0;
|
||||
while (index < m_Servers.Count()) {
|
||||
const auto &caContext = m_Servers[index].Value();
|
||||
if (caContext.Status() == Context::csRunning) {
|
||||
if (Params.IsEmpty() || Params == caContext.URL().Origin()) {
|
||||
auto pClient = GetConnectedClient(caContext);
|
||||
if (pClient != nullptr)
|
||||
return pClient;
|
||||
}
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
|
||||
void CWebSocketModule::DoClientConnected(CObject *Sender) {
|
||||
auto pConnection = dynamic_cast<CWebSocketClientConnection *>(Sender);
|
||||
if (pConnection != nullptr) {
|
||||
@@ -835,27 +889,12 @@ namespace Apostol {
|
||||
if (!sPayload.IsEmpty())
|
||||
Json.Object().AddPair("payload", base64_encode(sPayload));
|
||||
|
||||
int index = 0;
|
||||
while (index < m_Servers.Count()) {
|
||||
const auto &Context = m_Servers[index].Value();
|
||||
if (Context.Status() == Context::csRunning) {
|
||||
if (caServerParam.IsEmpty()) {
|
||||
break;
|
||||
} else {
|
||||
if (Context.URL().Origin() == caServerParam)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
auto pClient = GetConnectedClient(caServerParam);
|
||||
|
||||
if (index == m_Servers.Count()) {
|
||||
throw Delphi::Exception::Exception("Not found active connection.");
|
||||
if (pClient == nullptr) {
|
||||
throw Delphi::Exception::Exception(NOT_FOUND_ACTIVE_CONNECTION);
|
||||
}
|
||||
|
||||
const auto &caContext = m_Servers[index].Value();
|
||||
|
||||
auto pClient = caContext.ClientManager().First();
|
||||
|
||||
pClient->Send(URI, Json, OnRequest);
|
||||
}
|
||||
//--------------------------------------------------------------------------------------------------------------
|
||||
@@ -885,25 +924,19 @@ namespace Apostol {
|
||||
|
||||
const auto &caHost = pServerRequest->Headers["host"];
|
||||
const auto &caOrigin = pServerRequest->Headers["origin"];
|
||||
const auto& caUserAddress = pServerRequest->Params["address"];
|
||||
|
||||
const auto &address = pServerRequest->Params["address"];
|
||||
const auto &code = pServerRequest->Params["code"];
|
||||
|
||||
const auto &caUserAddress = address.length() == 40 ? CString() : address;
|
||||
const auto &caDealCode = !code.empty() ? code : address.length() == 40 ? address : CString();
|
||||
|
||||
const auto &pgpValue = pServerRequest->Params["pgp"];
|
||||
const auto &caServerParam = pServerRequest->Params["server"];
|
||||
|
||||
int index = 0;
|
||||
while (index < m_Servers.Count()) {
|
||||
const auto &Context = m_Servers[index].Value();
|
||||
if (Context.Status() == Context::csRunning) {
|
||||
if (caServerParam.IsEmpty()) {
|
||||
break;
|
||||
} else {
|
||||
if (Context.URL().Origin() == caServerParam)
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (index == m_Servers.Count()) {
|
||||
throw Delphi::Exception::Exception("Not found active connection.");
|
||||
const auto index = CurrentContextIndex(caServerParam);
|
||||
if (index == -1) {
|
||||
throw Delphi::Exception::Exception(NOT_FOUND_ACTIVE_CONNECTION);
|
||||
}
|
||||
|
||||
const auto &caContext = m_Servers[index].Value();
|
||||
@@ -1251,10 +1284,20 @@ namespace Apostol {
|
||||
Json.Object().AddPair("module", Module);
|
||||
Json.Object().AddPair("address", caUserAddress.IsEmpty() ? caModuleAddress : caUserAddress);
|
||||
|
||||
if (!caDealCode.IsEmpty()) {
|
||||
CJSONValue Deal(jvtObject);
|
||||
Deal.Object().AddPair("code", caDealCode);
|
||||
Json.Object().AddPair("deal", Deal);
|
||||
}
|
||||
|
||||
if (!sPayload.IsEmpty())
|
||||
Json.Object().AddPair("payload", base64_encode(sPayload));
|
||||
|
||||
auto pClient = caContext.ClientManager().First();
|
||||
auto pClient = GetConnectedClient(caContext);
|
||||
|
||||
if (pClient == nullptr) {
|
||||
throw Delphi::Exception::Exception(NOT_FOUND_ACTIVE_CONNECTION);
|
||||
}
|
||||
|
||||
pClient->Send(URI, Json, OnRequest);
|
||||
}
|
||||
|
||||
@@ -96,6 +96,11 @@ namespace Apostol {
|
||||
|
||||
void FetchOAuth2(CContext &Context);
|
||||
|
||||
static CWebSocketClient *GetConnectedClient(const CClientContext &Context);
|
||||
|
||||
int CurrentContextIndex(const CString &Params);
|
||||
CWebSocketClient *GetConnectedClient(const CString &Params);
|
||||
|
||||
protected:
|
||||
|
||||
void Heartbeat(CDateTime Now) override;
|
||||
|
||||
Reference in New Issue
Block a user