feisty meow concerns codebase 2.140
sequence_tracker.h
Go to the documentation of this file.
1#ifndef SEQUENCE_TRACKER_CLASS
2#define SEQUENCE_TRACKER_CLASS
3
4/*****************************************************************************\
5* *
6* Name : sequence_tracker *
7* Author : Chris Koeritz *
8* *
9* Purpose: *
10* *
11* Tracks sequence numbers coming from a collection of hosts. These are *
12* presumably attached to network packets. The intention is to record if *
13* we've already seen a packet or not. When hosts have not communicated for *
14* a while, they are removed from tracking. Also, when enough time has *
15* elapsed for a sequence number, we consider that we've heard everything *
16* we're going to before that sequence number; hence, any prior sequence *
17* numbers are considered already received. *
18* *
19*******************************************************************************
20* Copyright (c) 2002-$now By Author. This program is free software; you can *
21* redistribute it and/or modify it under the terms of the GNU General Public *
22* License as published by the Free Software Foundation; either version 2 of *
23* the License or (at your option) any later version. This is online at: *
24* http://www.fsf.org/copyleft/gpl.html *
25* Please send any updates to: fred@gruntose.com *
26\*****************************************************************************/
27
28#include <basis/contracts.h>
29#include <basis/mutex.h>
30#include <timely/time_stamp.h>
31
32namespace sockets {
33
34class host_history;
35class machine_uid;
36
38
39class sequence_tracker : public virtual basis::root_object
40{
41public:
42 sequence_tracker(int coalesce_time, int silence_time);
43 // tracks the sequence numbers from a set of hosts. the "coalesce_time" is
44 // the interval that we wait before considering all prior sequence numbers
45 // to have been received. the "silence_time" is the time interval a host
46 // is allowed to be silent before being eliminated. all measurements are
47 // in milliseconds.
48
50
51 DEFINE_CLASS_NAME("sequence_tracker");
52
53 void add_pair(const machine_uid &host, int sequence);
54 // adds a hostname/sequence# pair as being received "now".
55
56 bool have_seen(const machine_uid &host, int sequence);
57 // returns true if the "host" and "sequence" have already been seen in
58 // a previous transmission.
59
60 void clean_up();
61 // this must be invoked periodically to allow the clearing of outdated
62 // information. once a second seems frequent enough.
63
64 basis::astring text_form(bool verbose = false) const;
65 // provides a dump of the information held in the tracker.
66
67private:
68 int _coalesce_time; // sequences older than this get coalesced.
69 int _silence_time; // hosts silent for longer than this get canned.
70 host_history *_hosts; // the overall record of sequence activity per host.
71 basis::mutex *_lock; // protects from multi-threaded access.
72};
73
74} //namespace.
75
76#endif
77
Provides a dynamically resizable ASCII character string.
Definition astring.h:35
this will keep track of sequencing for a communication process on a per host basis.
DEFINE_CLASS_NAME("sequence_tracker")
bool have_seen(const machine_uid &host, int sequence)
void add_pair(const machine_uid &host, int sequence)
basis::astring text_form(bool verbose=false) const
bool verbose
Definition makedep.cpp:112
Provides access to the operating system's socket methods.