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() 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); GameParser parser(conf, scanner, modList);
HlswServer server(conf, parser); HlswServer server(conf, parser);
modList.reg(new ModHalfLife()); // modList.reg(new ModHalfLife());
modList.reg(new ModQ3Engine()); // modList.reg(new ModQ3Engine());
modList.reg(new ModD3Engine()); // modList.reg(new ModD3Engine());
modList.reg(new ModGameSpy1()); // modList.reg(new ModGameSpy1());
modList.reg(new ModGameSpy2()); // modList.reg(new ModGameSpy2());
server.start(); server.start();
parser.start(); parser.start();

View File

@ -9,9 +9,43 @@
#include "logging.h" #include "logging.h"
#include "hlswserver.h" #include "hlswserver.h"
#define HLSW_HEADER "\xFF\xFF\xFF\xFFHLSWLANSEARCH\x00"
#define HLSW_HEADER_LEN 0x12
#define HLSW_MASTER_PORT 7140 #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) HlswServer::HlswServer(Config& conf, GameList& slist)
{ {
@ -35,12 +69,13 @@ HlswServer::HlswServer(Config& conf, GameList& slist)
return; return;
} }
out = new HlswPacket(); pktlist = new HlswPacket(NULL);
} }
HlswServer::~HlswServer() HlswServer::~HlswServer()
{ {
close(sock); close(sock);
delete pktlist;
} }
int HlswServer::execute(void* arg) int HlswServer::execute(void* arg)
@ -54,25 +89,40 @@ int HlswServer::execute(void* arg)
/* auf clientanfrage warten */ /* auf clientanfrage warten */
len = sizeof(src); len = sizeof(src);
ret = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr *)&src, &len); 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"); LogSystem::log(LOG_NOTICE, "HlswServer: invalid packet");
continue; continue;
} }
/* testen ob es sich um ein HLSW anforderung handelt */ /* 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"); LogSystem::log(LOG_NOTICE, "HlswServer: not a hlsw packet");
continue; continue;
} }
if (out != NULL && out->count > 0) { mutex.lock();
HlswPacket* pkt; pktlist->send(sock, &src);
for (pkt = out; pkt != NULL; pkt = pkt->next) { mutex.unlock();
sendto(sock, pkt->data, pkt->getSize(), 0,
(struct sockaddr *)&src, sizeof(src));
}
}
} }
return 0; 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 "thread.h"
#include "config.h" #include "config.h"
#include "gamelist.h" #include "gamelist.h"
#include "mutex.h"
class HlswServer : public Thread { class HlswServer : public Thread {
public: public:
@ -22,24 +22,20 @@ protected:
private: private:
class HlswPacket { class HlswPacket {
public: public:
HlswPacket() : next(0), count(0) HlswPacket(HlswPacket* next);
{ ~HlswPacket();
memset(data, 0, sizeof(data));
}
int getSize() bool addGame(void* ptr);
{ void send(int socket, struct sockaddr_in* dst);
return 12 + count * 10;
}
void addGame(void* ptr) {}
private:
HlswPacket* next; HlswPacket* next;
int count; int count;
char data[1412]; char data[1418];
}; };
HlswPacket* out; HlswPacket* pktlist;
Mutex mutex;
int sock; int sock;
}; };