Codebase list dbeacon / 41955848-d7fa-4ba5-8b97-279e67d8b41c/main dbeacon.h
41955848-d7fa-4ba5-8b97-279e67d8b41c/main

Tree @41955848-d7fa-4ba5-8b97-279e67d8b41c/main (Download .tar.gz)

dbeacon.h @41955848-d7fa-4ba5-8b97-279e67d8b41c/mainraw · history · blame

/*
 * Copyright 2005-2010, Hugo Santos <hugo@fivebits.net>
 * Distributed under the terms of the MIT License.
 */

#ifndef _dbeacon_h_
#define _dbeacon_h_

#if __FreeBSD_version <= 500042
#include <inttypes.h>
#else
#include <stdint.h>
#endif

#include <string>
#include <map>

#include "address.h"

struct Stats {
	Stats();

	uint64_t timestamp, lastupdate;
	float avgdelay, avgjitter, avgloss, avgdup, avgooo;
	bool valid;
	uint8_t rttl;

	void check_validity(uint64_t);
};

struct beaconExternalStats {
	beaconExternalStats();

	uint64_t lastupdate;
	uint32_t age;

	Stats ASM, SSM;

	bool identified;
	std::string name, contact;
};

struct beaconMcastState {
	beaconMcastState();

	uint32_t lastseq;

	uint32_t packetcount, packetcountreal;
	uint32_t pointer;

	int lastdelay, lastjitter, lastloss, lastdup, lastooo;

	Stats s;

#define PACKETS_PERIOD		40
#define PACKETS_VERY_OLD	150

	uint32_t cacheseqnum[PACKETS_PERIOD+1];

	void refresh(uint32_t, uint64_t);
	void update(uint8_t, uint32_t, uint64_t, uint64_t, uint64_t);
};

typedef std::map<int, std::string> WebSites;

struct beaconSource {
	beaconSource();

	address addr;

	uint64_t creation;

	int sttl;

	uint64_t lastevent;
	uint64_t lastlocalevent;

	beaconMcastState ASM, SSM;

	void setName(const std::string &);
	void update(uint8_t, uint32_t, uint64_t, uint64_t, uint64_t, bool);

	beaconExternalStats &getExternal(const address &, uint64_t now, uint64_t ts);

	bool rxlocal(uint64_t now) const;

	std::string name;
	std::string adminContact;
	std::string CC;

	uint32_t Flags;

	typedef std::map<address, beaconExternalStats> ExternalSources;
	ExternalSources externalSources;

	WebSites webSites;

	bool identified;
};

typedef std::map<address, beaconSource> Sources;

beaconSource &getSource(const address &, const char *name, uint64_t now, uint64_t recvts, bool rxlocal);
void removeSource(const address &, bool);

uint64_t get_timestamp();
uint64_t get_time_of_day();

int SetupSSMPing();

extern const char * const defaultPort;
extern const int defaultTTL;

extern int forceFamily;
extern int mcastInterface;

struct beaconExternalStats;

extern uint32_t flags;

extern std::string beaconName, adminContact, twoLetterCC;
extern Sources sources;
extern WebSites webSites;
extern address beaconUnicastAddr;

extern int verbose;

void info(const char *format, ...);
void fatal(const char *format, ...);

address get_local_address_for(const address &);

void d_log(int level, const char *format, ...);
int dbeacon_daemonize(const char *pidfile);

struct Message {
	address from, to;
	uint64_t timestamp;
	int ttl;
	uint8_t *buffer;
	size_t len;
};

typedef void (*SocketHandler)(int socket, const Message &);
void ListenTo(int sock, SocketHandler);

#endif