daily work

This commit is contained in:
Olaf Rempel 2006-02-06 20:58:32 +01:00 committed by
parent 6383cfaf67
commit 3593290f71
4 changed files with 78 additions and 32 deletions

View File

@ -39,5 +39,5 @@ int GameParser::execute(void* arg)
void GameParser::cleanup()
{
LogSystem::log(LOG_DEBUG, "GameParser::cleanup()");
// LogSystem::log(LOG_DEBUG, "GameParser::cleanup()");
}

View File

@ -86,11 +86,11 @@ int main(int argc, char *argv[])
GameParser parser(conf, scanner, modList);
HlswServer server(conf, parser);
modList.reg(new ModHalfLife());
modList.reg(new ModQ3Engine());
modList.reg(new ModD3Engine());
modList.reg(new ModGameSpy1());
modList.reg(new ModGameSpy2());
// modList.reg(new ModHalfLife());
// modList.reg(new ModQ3Engine());
// modList.reg(new ModD3Engine());
// modList.reg(new ModGameSpy1());
// modList.reg(new ModGameSpy2());
server.start();
parser.start();

View File

@ -9,9 +9,43 @@
#include "logging.h"
#include "hlswserver.h"
#define HLSW_HEADER "\xFF\xFF\xFF\xFFHLSWLANSEARCH\x00"
#define HLSW_HEADER_LEN 0x12
#define HLSW_MASTER_PORT 7140
static const char hlsw_header[] = "\xFF\xFF\xFF\xFFHLSWLANSEARCH";
HlswServer::HlswPacket::HlswPacket(HlswPacket* next)
: next(next), count(0)
{
memcpy(data, hlsw_header, sizeof(hlsw_header));
memset(data + sizeof(hlsw_header), 0, sizeof(data) - sizeof(hlsw_header));
}
HlswServer::HlswPacket::~HlswPacket()
{
if (next)
delete next;
}
bool HlswServer::HlswPacket::addGame(void* ptr)
{
if (count < 140) {
count++;
return true;
} else {
return false;
}
}
void HlswServer::HlswPacket::send(int socket, struct sockaddr_in* dst)
{
if (next)
next->send(socket, dst);
if (sendto(socket, data, sizeof(hlsw_header) + count * 10, 0,
(struct sockaddr *)dst, sizeof(*dst)) < 0) {
LogSystem::log(LOG_WARN, "HlswPacket::send()");
}
}
HlswServer::HlswServer(Config& conf, GameList& slist)
{
@ -35,12 +69,13 @@ HlswServer::HlswServer(Config& conf, GameList& slist)
return;
}
out = new HlswPacket();
pktlist = new HlswPacket(NULL);
}
HlswServer::~HlswServer()
{
close(sock);
delete pktlist;
}
int HlswServer::execute(void* arg)
@ -54,25 +89,40 @@ int HlswServer::execute(void* arg)
/* auf clientanfrage warten */
len = sizeof(src);
ret = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&src, &len);
if (ret != HLSW_HEADER_LEN) {
if (ret != sizeof(hlsw_header)) {
LogSystem::log(LOG_NOTICE, "HlswServer: invalid packet");
continue;
}
/* testen ob es sich um ein HLSW anforderung handelt */
if (memcmp(buf, HLSW_HEADER, HLSW_HEADER_LEN)) {
if (memcmp(buf, hlsw_header, sizeof(hlsw_header))) {
LogSystem::log(LOG_NOTICE, "HlswServer: not a hlsw packet");
continue;
}
if (out != NULL && out->count > 0) {
HlswPacket* pkt;
for (pkt = out; pkt != NULL; pkt = pkt->next) {
sendto(sock, pkt->data, pkt->getSize(), 0,
(struct sockaddr *)&src, sizeof(src));
}
}
mutex.lock();
pktlist->send(sock, &src);
mutex.unlock();
}
return 0;
}
/*
HlswPacket* newlist;
while (it->hasNext()) {
Data* d = it->next();
if (!newlist || !newlist->add(d))
newlist = new HlswPacket(newlist);
newlist->add(d);
}
}
mutex.lock();
HlswPacket* oldlist = pktlist;
pktlist = newlist;
mutex.unlock();
delete oldlist;
*/

View File

@ -6,7 +6,7 @@
#include "thread.h"
#include "config.h"
#include "gamelist.h"
#include "mutex.h"
class HlswServer : public Thread {
public:
@ -22,24 +22,20 @@ protected:
private:
class HlswPacket {
public:
HlswPacket() : next(0), count(0)
{
memset(data, 0, sizeof(data));
}
HlswPacket(HlswPacket* next);
~HlswPacket();
int getSize()
{
return 12 + count * 10;
}
void addGame(void* ptr) {}
bool addGame(void* ptr);
void send(int socket, struct sockaddr_in* dst);
private:
HlswPacket* next;
int count;
char data[1412];
char data[1418];
};
HlswPacket* out;
HlswPacket* pktlist;
Mutex mutex;
int sock;
};