void UMasterServerFunctions::UnregisterServer() { if (!CurrentRegisteredServer.IsEmpty()) { // Clear the timer on checking in as we don't need to check in anymore GameInstance->GetWorld()->GetTimerManager().ClearTimer(CheckIn_Handle); FHttpRequest* RequestData = new FHttpRequest; RequestData->SetRequestType(EHttpRequestType::HRT_UnregisterServer); RequestData->SetData(ServerToJSON(CurrentRegisteredServer, *RequestData)); // No server currently registered anymore, if the request fails, at least check in won't happen and the server will be purged automatically after a short period of time. CurrentRegisteredServer = CurrentRegisteredServer = *(new FServerInformation); TransmitRequest(*RequestData); } else { // No server registered, broadcast failure ServerUnregisteredEvent.Broadcast(EHttpResponse::HR_NoSend); } }
uint32_t JoinFlowHandler::WriteKeyNickSession(NE::Model::Capabilities& capabilities, Address32 address32, WHartUniqueID uniqueID, Address32 parentAddress32, const NE::Model::SecurityKey& networkKey, const NE::Model::SecurityKey& key) { C963_WriteSession_Req writeSessionLocal; { // write the session locally writeSessionLocal.m_ulPeerNonceCounterValue = 0; writeSessionLocal.m_unPeerNickname = (address32 & 0xFFFF); memcpy(writeSessionLocal.m_aPeerUniqueID, uniqueID.bytes, 5); //TODO check if it is ok memcpy(writeSessionLocal.m_aKeyValue, key.value, key.LENGTH); writeSessionLocal.m_eSessionType = WHartSessionKey::sessionKeyed; writeSessionLocal.m_ucReserved = 0; memset(writeSessionLocal.m_tExecutionTime, 0, 5); } C2009_NM_WriteUniqueIdNickname_Req localAddressNick; { localAddressNick.nickname = (uint16_t) address32 & 0xFFFF; localAddressNick.uniqueId = uniqueID; localAddressNick.isTR = device.isBackbone; } WHartCommand arrayLocal[] = { { CMDID_C963_WriteSession, 0, &writeSessionLocal }, { CMDID_C2009_NM_WriteUniqueIdNickname, 0, &localAddressNick } }; WHartCommandList listReqLocal = { sizeof(arrayLocal) / sizeof(arrayLocal[0]), arrayLocal }; //COULD trigger TransmitConfirm if there is a package in the stack for the peer address. TransmitRequest(NetworkManager_Nickname(), listReqLocal, WHartSessionKey::joinKeyed); try { keyNickSessionOperations.reset(new NE::Model::Operations::EngineOperations()); commonData.networkEngine.initJoinDevice(*keyNickSessionOperations, capabilities, address32, uniqueID, parentAddress32, networkKey, key); std::ostringstream stream; stream << "Write session " << ToStr(address32) << ", parent=" << ToStr(parentAddress32); keyNickSessionOperations->reasonOfOperations = stream.str(); SMState::SMStateLog::logOperations(keyNickSessionOperations->reasonOfOperations, *keyNickSessionOperations); SendOperations(keyNickSessionOperations, keyNickSessionHandle, true); } catch (std::exception& ex) { LOG_ERROR("Error:" << ex.what()); } return keyNickSessionHandle; }
void UMasterServerFunctions::CheckInServer() { if (!CurrentRegisteredServer.IsEmpty()) { FHttpRequest* RequestData = new FHttpRequest; RequestData->SetRequestType(EHttpRequestType::HRT_CheckIn); RequestData->SetData(ServerToJSON(CurrentRegisteredServer, *RequestData)); TransmitRequest(*RequestData); } else { ServerCheckInEvent.Broadcast(EHttpResponse::HR_NoSend); } }
void GatewayStack::SendJoinRequest() { // complete c000 response C000_ReadUniqueIdentifier_Resp c000; FillGwIdentityResponse (&c000, config); CHartCmdWrapper::Ptr pCmd000(new CHartCmdWrapper); pCmd000->LoadParsed(CMDID_C000_ReadUniqueIdentifier, sizeof(C000_ReadUniqueIdentifier_Resp), &c000, RCS_N00_Success); // complete c020 response C020_ReadLongTag_Resp c020; memcpy(c020.longTag, config.m_szLongTag, sizeof(c020.longTag)); CHartCmdWrapper::Ptr pCmd020(new CHartCmdWrapper); pCmd020->LoadParsed(CMDID_C020_ReadLongTag, sizeof(C020_ReadLongTag_Resp),&c020, RCS_N00_Success); C787_ReportNeighborSignalLevels_Resp c787; memset(&c787, 0, sizeof(c787)); c787.m_ucNeighborTableIndex = 0; c787.m_ucNoOfNeighborEntriesRead = 1; c787.m_ucTotalNoOfNeighbors = 1; c787.m_aNeighbors[0].RSLindB = 123; c787.m_aNeighbors[0].nickname = NetworkManager_Nickname(); CHartCmdWrapper::Ptr pCmd787(new CHartCmdWrapper); pCmd787->LoadParsed(CMDID_C787_ReportNeighborSignalLevels, sizeof(C787_ReportNeighborSignalLevels_Resp),&c787, RCS_N00_Success); CHartCmdWrapperList oJoinList; oJoinList.push_back(pCmd000); oJoinList.push_back(pCmd020); oJoinList.push_back(pCmd787); WHartAddress nm(NetworkManager_UniqueID()); m_nCurrentJoinReqHandle = TransmitRequest(nm, whartpEvent, wharttPublishNotify, 0, oJoinList, WHartSessionKey::joinKeyed); joinTimer = timerFactory->CreateDeadlineTimer(REJOIN_TIMER); joinTimer->Elapsed = boost::bind(&GatewayStack::ProcessJoinStatus, this); }
void UMasterServerFunctions::RegisterServer(FServerInformation Server) { if (!Server.IsEmpty()) { ServerRegisteredEvent.RemoveDynamic(this, &UMasterServerFunctions::OnRegisteredServer); ServerRegisteredEvent.AddDynamic(this, &UMasterServerFunctions::OnRegisteredServer); FHttpRequest* RequestData = new FHttpRequest; RequestData->SetRequestType(EHttpRequestType::HRT_RegisterServer); RequestData->SetData(ServerToJSON(Server, *RequestData)); CurrentRegisteredServer = Server; TransmitRequest(*RequestData); } else { ServerRegisteredEvent.Broadcast(EHttpResponse::HR_NoSend, 0); } }
void UMasterServerFunctions::RequestServerList() { FHttpRequest* RequestData = new FHttpRequest; RequestData->SetRequestType(EHttpRequestType::HRT_ReceiveServerList); TransmitRequest(*RequestData); }