blob: cde1db841cf5a95a4437d7b837666f203a177569 [file] [log] [blame]
/*
*
* Copyright (c) 2014-2017 Nest Labs, Inc.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MOCKTIMESYNCCLIENT_H_
#define MOCKTIMESYNCCLIENT_H_
#if WEAVE_CONFIG_TIME_ENABLE_CLIENT
#include <Weave/Profiles/time/WeaveTime.h>
using namespace nl::Weave;
class MockTimeSyncClient
{
public:
MockTimeSyncClient();
WEAVE_ERROR Init(
nl::Weave::WeaveExchangeManager *exchangeMgr,
OperatingMode mode,
uint64_t serviceNodeId = kAnyNodeId,
const char * serviceNodeAddr = NULL,
const uint8_t encryptionType = nl::Weave::kWeaveEncryptionType_None,
const uint16_t keyId = nl::Weave::WeaveKeyId::kNone);
WEAVE_ERROR Shutdown(void);
private:
nl::Weave::Profiles::Time::TimeSyncNode mClient;
OperatingMode mOperatingMode;
nl::Weave::Profiles::Time::ServingNode mContacts[7];
void SetupContacts(void);
nl::Weave::Profiles::Time::ServingNode mServiceContact;
void SetupServiceContact(uint64_t serviceNodeId, const char * serviceNodeAddr);
static void HandleSyncTimer(nl::Weave::System::Layer* aSystemLayer, void* aAppState, nl::Weave::System::Error aError);
static void OnResponseReadyForCalculation(void * const aApp,
nl::Weave::Profiles::Time::Contact aContact[], const int aSize);
static void OnTimeChangeNotificationReceived(void * const aApp, const uint64_t aNodeId,
const nl::Inet::IPAddress & aNodeAddr);
static bool OnSyncSucceeded(void * const aApp, const nl::Weave::Profiles::Time::timesync_t aOffsetUsec,
const bool aIsReliable, const bool aIsServer, const uint8_t aNumContributor);
static void OnSyncFailed(void * const aApp, const WEAVE_ERROR aErrorCode);
#if WEAVE_CONFIG_TIME_CLIENT_CONNECTION_FOR_SERVICE
nl::Weave::WeaveConnection * mConnectionToService;
void SetupConnectionToService(void);
void CloseConnectionToService(void);
static void HandleConnectionComplete(nl::Weave::WeaveConnection *con, WEAVE_ERROR conErr);
static void HandleConnectionClosed(nl::Weave::WeaveConnection *con, WEAVE_ERROR conErr);
#endif // WEAVE_CONFIG_TIME_CLIENT_CONNECTION_FOR_SERVICE
};
class MockSingleSourceTimeSyncClient
{
public:
MockSingleSourceTimeSyncClient();
WEAVE_ERROR Init(nl::Weave::WeaveExchangeManager * const aExchangeMgr, const uint64_t aPublisherNodeId, const uint16_t aSubnetId);
WEAVE_ERROR Shutdown(void);
private:
nl::Weave::Profiles::Time::SingleSourceTimeSyncClient mClient;
nl::Weave::Binding * mBinding;
nl::Weave::WeaveExchangeManager * mExchangeMgr;
static void BindingEventCallback (void * const apAppState,
const nl::Weave::Binding::EventType aEvent,
const nl::Weave::Binding::InEventParam & aInParam,
nl::Weave::Binding::OutEventParam & aOutParam);
static void HandleSyncTimer(nl::Weave::System::Layer* aSystemLayer, void* aAppState, nl::Weave::System::Error aError);
static void HandleTimeChangeNotificationReceived(void * const aApp, nl::Weave::ExchangeContext * aEC);
static void HandleSyncCompleted(void * const aApp, const WEAVE_ERROR aErrorCode, const nl::Weave::Profiles::Time::timesync_t aCorrectedSystemTime);
};
#endif // WEAVE_CONFIG_TIME_ENABLE_CLIENT
#endif /* MOCKTIMESYNCCLIENT_H_ */