ddnet/src/versionsrv/versionsrv.cpp

61 lines
1.2 KiB
C++
Raw Normal View History

/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
#include <string.h>
#include <base/system.h>
extern "C" {
#include <engine/e_network.h>
}
#include "versionsrv.h"
static net_client net_op; // main
void send_ver(NETADDR *addr)
{
NETCHUNK p;
unsigned char data[sizeof(VERSIONSRV_VERSION) + sizeof(VERSION_DATA)];
memcpy(data, VERSIONSRV_VERSION, sizeof(VERSIONSRV_VERSION));
memcpy(data + sizeof(VERSIONSRV_VERSION), VERSION_DATA, sizeof(VERSION_DATA));
p.client_id = -1;
p.address = *addr;
p.flags = NETSENDFLAG_CONNLESS;
p.data = data;
p.data_size = sizeof(data);
net_op.send(&p);
}
int main(int argc, char **argv)
{
NETADDR bindaddr;
mem_zero(&bindaddr, sizeof(bindaddr));
bindaddr.port = VERSIONSRV_PORT;
net_op.open(bindaddr, 0);
dbg_msg("versionsrv", "started");
while(1)
{
net_op.update();
// process packets
NETCHUNK packet;
while(net_op.recv(&packet))
{
if(packet.data_size == sizeof(VERSIONSRV_GETVERSION) &&
memcmp(packet.data, VERSIONSRV_GETVERSION, sizeof(VERSIONSRV_GETVERSION)) == 0)
{
send_ver(&packet.address);
}
}
// be nice to the CPU
thread_sleep(1);
}
return 0;
}