/* flaneth - flash and ethernet - dartboard mod
* version 0.1 date 2008-11-09
* Copyright (C) 2007-2008 Stefan Schuermans <stefan@schuermans.info>
* Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
* a BlinkenArea project - http://www.blinkenarea.org/
*/
#include "config.h"
#include "checksum.h"
#include "dart.h"
#include "debug.h"
#include "dhcp.h"
#include "ethernet.h"
#include "ip.h"
#include "macros.h"
#include "nethelp.h"
#include "udp.h"
// some kind of "token bucket" for UDP echo
#define UdpEchoTicks 10 // allowed rate of UDP echo replies (in 200ms steps)
unsigned char UdpEchoTickCnt = 0; // tick counter
#define UdpEchoReliesMax 3 // maximum value for UdpEchoReplies
unsigned char UdpEchoReplies = 0; // number of UDP echo replies that may be sent at the moment
// tick procedure - call every 200ms
void UdpTick200( void ) // (extern)
{
// count ticks
UdpEchoTickCnt++;
// time to allow one reply more
if( UdpEchoTickCnt >= UdpEchoTicks )
{
UdpEchoTickCnt = 0;
// increase reply count if not at maximum
if( UdpEchoReplies < UdpEchoReliesMax )
UdpEchoReplies++;
}
}
// process a received UDP echo packet
static void UdpEchoRecv( unsigned char * pData, unsigned short Length )
{
struct UdpPacket * pUdpPack;
// convert pointer to UDP packet
// (this saves us from always casting pData)
pUdpPack = (struct UdpPacket *)pData;
// source port is UDP echo port
if( pUdpPack->UdpHdr.SrcPort == htons( 7 ) )