/* Copyright (c) 2001 Matej Pfajfar. * Copyright (c) 2001-2004, Roger Dingledine. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. * Copyright (c) 2007-2019, The Tor Project, Inc. */ /* See LICENSE for licensing information */ /** * \file or_state_t * * \brief The or_state_t structure, which represents Tor's state file. */ #ifndef TOR_OR_STATE_ST_H #define TOR_OR_STATE_ST_H #include "lib/cc/torint.h" struct smartlist_t; /** Persistent state for an onion router, as saved to disk. */ struct or_state_t { uint32_t magic_; /** The time at which we next plan to write the state to the disk. Equal to * TIME_MAX if there are no savable changes, 0 if there are changes that * should be saved right away. */ time_t next_write; /** When was the state last written to disk? */ time_t LastWritten; /** Fields for accounting bandwidth use. */ time_t AccountingIntervalStart; uint64_t AccountingBytesReadInInterval; uint64_t AccountingBytesWrittenInInterval; int AccountingSecondsActive; int AccountingSecondsToReachSoftLimit; time_t AccountingSoftLimitHitAt; uint64_t AccountingBytesAtSoftLimit; uint64_t AccountingExpectedUsage; /** A list of Entry Guard-related configuration lines. (pre-prop271) */ struct config_line_t *EntryGuards; /** A list of guard-related configuration lines. (post-prop271) */ struct config_line_t *Guard; struct config_line_t *TransportProxies; /** Cached revision counters for active hidden services on this host */ struct config_line_t *HidServRevCounter; /** These fields hold information on the history of bandwidth usage for * servers. The "Ends" fields hold the time when we last updated the * bandwidth usage. The "Interval" fields hold the granularity, in seconds, * of the entries of Values. The "Values" lists hold decimal string * representations of the number of bytes read or written in each * interval. The "Maxima" list holds decimal strings describing the highest * rate achieved during the interval. */ time_t BWHistoryReadEnds; int BWHistoryReadInterval; struct smartlist_t *BWHistoryReadValues; struct smartlist_t *BWHistoryReadMaxima; time_t BWHistoryWriteEnds; int BWHistoryWriteInterval; struct smartlist_t *BWHistoryWriteValues; struct smartlist_t *BWHistoryWriteMaxima; time_t BWHistoryDirReadEnds; int BWHistoryDirReadInterval; struct smartlist_t *BWHistoryDirReadValues; struct smartlist_t *BWHistoryDirReadMaxima; time_t BWHistoryDirWriteEnds; int BWHistoryDirWriteInterval; struct smartlist_t *BWHistoryDirWriteValues; struct smartlist_t *BWHistoryDirWriteMaxima; /** Build time histogram */ struct config_line_t * BuildtimeHistogram; int TotalBuildTimes; int CircuitBuildAbandonedCount; /** What version of Tor wrote this state file? */ char *TorVersion; /** Holds any unrecognized values we found in the state file, in the order * in which we found them. */ struct config_line_t *ExtraLines; /** When did we last rotate our onion key? "0" for 'no idea'. */ time_t LastRotatedOnionKey; /** Number of minutes since the last user-initiated request (as defined by * the dormant net-status system.) Set to zero if we are dormant. */ int MinutesSinceUserActivity; /** True if we were dormant when we last wrote the file; false if we * weren't. "auto" on initial startup. */ int Dormant; }; #endif