/* * Copyright (c)2013-2021 ZeroTier, Inc. * * Use of this software is governed by the Business Source License included * in the LICENSE.TXT file in the project's root directory. * * Change Date: 2026-01-01 * * On the date above, in accordance with the Business Source License, use * of this software will be governed by version 2.0 of the Apache License. */ /****/ #ifndef ZT_CALLCONTEXT_HPP #define ZT_CALLCONTEXT_HPP #include "Constants.hpp" namespace ZeroTier { /** * A per-API-call equivalent to the runtime * * This captures several things that are passed into API calls and follow * the call chain. Some such as tPtr may be supplied to callbacks. */ class CallContext { public: ZT_INLINE CallContext(const int64_t c, const int64_t t, void *const p) : clock(c), ticks(t), tPtr(p) {} /** * Real world time in milliseconds since Unix epoch or -1 if unknown. * * This is used for things like checking certificate expiration. If it's * not known then the value may be inferred from peers/roots or some * features may be disabled. */ const int64_t clock; /** * Monotonic process or system clock in milliseconds since an arbitrary point. * * This is never -1 or undefined and is used for most timings. */ const int64_t ticks; /** * An arbitrary pointer users pass into calls that follows the call chain * * By passing this back to callbacks state can be kept by the caller using * a mechanism that is faster (on most platforms) than thread-local storage. */ void *const tPtr; }; } // namespace ZeroTier #endif