summaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
Diffstat (limited to 'src/server')
-rw-r--r--src/server/heightScore.c139
-rw-r--r--src/server/heightScore.c~102
-rw-r--r--src/server/log.c82
-rw-r--r--src/server/log.c~67
-rw-r--r--src/server/publicServer.c446
-rw-r--r--src/server/publicServer.c~372
-rw-r--r--src/server/serverConfigFile.c135
-rw-r--r--src/server/serverConfigFile.c~108
8 files changed, 1051 insertions, 400 deletions
diff --git a/src/server/heightScore.c b/src/server/heightScore.c
index 5c42ad6..1a0026b 100644
--- a/src/server/heightScore.c
+++ b/src/server/heightScore.c
@@ -11,92 +11,85 @@
static textFile_t *textFile;
-void initHeightScore(char *file)
+void
+initHeightScore(char *file)
{
- int i;
-
- textFile = loadTextFile(file);
-
- if( textFile == NULL )
- {
- fprintf(stderr, _("I am unable to load: \"%s\" !\n"), file);
- fprintf(stderr, _("Creating: \"%s\"\n"), file);
- textFile = newTextFile(file);
- }
- else
- {
+ int i;
+
+ textFile = loadTextFile(file);
+
+ if (textFile == NULL) {
+ fprintf(stderr, _("I am unable to load: \"%s\" !\n"), file);
+ fprintf(stderr, _("Creating: \"%s\"\n"), file);
+ textFile = newTextFile(file);
+ }
+ else {
#ifdef DEBUG
- printf(_("Scorefile: \"%s\"\n"), file);
+ printf(_("Scorefile: \"%s\"\n"), file);
#endif
- return;
- }
+ return;
+ }
- if( textFile == NULL )
- {
- fprintf(stderr, _("I was unable to create: \"%s\" !\n"), file);
- return;
- }
+ if (textFile == NULL) {
+ fprintf(stderr, _("I was unable to create: \"%s\" !\n"), file);
+ return;
+ }
- for( i = 0 ; i < HEIGHTSCORE_MAX_PLAYERS ; i++ )
- {
- addList(textFile->text, strdup("no_name 0") );
- }
+ for (i = 0; i < HEIGHTSCORE_MAX_PLAYERS; i++) {
+ addList(textFile->text, strdup("no_name 0"));
+ }
- saveTextFile(textFile);
+ saveTextFile(textFile);
}
-int addPlayerInHighScore(char *name, int score)
+int
+addPlayerInHighScore(char *name, int score)
{
- int i;
-
- if( score <= 0 )
- {
- return -1; // Ha ha ha
- }
-
- for( i = 0 ; i < HEIGHTSCORE_MAX_PLAYERS ; i++ )
- {
- char *line;
- char thisName[STR_NAME_SIZE];
- int thisCore;
-
- line = (char *) textFile->text->list[i];
- sscanf(line, "%s %d", thisName, &thisCore);
-
- if( score >= thisCore )
- {
- char new[STR_SIZE];
-
- sprintf(new, "%s %d", name, score);
- insList(textFile->text, i, strdup(new) );
- delListItem(textFile->text, HEIGHTSCORE_MAX_PLAYERS, free);
- //printTextFile(textFile);
- saveTextFile(textFile);
-
- return 0;
- }
- }
-
- return -1;
+ int i;
+
+ if (score <= 0) {
+ return -1; // Ha ha ha
+ }
+
+ for (i = 0; i < HEIGHTSCORE_MAX_PLAYERS; i++) {
+ char *line;
+ char thisName[STR_NAME_SIZE];
+ int thisCore;
+
+ line = (char *) textFile->text->list[i];
+ sscanf(line, "%s %d", thisName, &thisCore);
+
+ if (score >= thisCore) {
+ char new[STR_SIZE];
+
+ sprintf(new, "%s %d", name, score);
+ insList(textFile->text, i, strdup(new));
+ delListItem(textFile->text, HEIGHTSCORE_MAX_PLAYERS, free);
+ //printTextFile(textFile);
+ saveTextFile(textFile);
+
+ return 0;
+ }
+ }
+
+ return -1;
}
-char* getTableItem(int index)
+char *
+getTableItem(int index)
{
- if( textFile != NULL &&
- index >= 0 &&
- index < textFile->text->count )
- {
- return (char *)textFile->text->list[index];
- }
-
- return NULL;
+ if (textFile != NULL && index >= 0 && index < textFile->text->count) {
+ return (char *) textFile->text->list[index];
+ }
+
+ return NULL;
}
-void quitHeightScore()
+void
+quitHeightScore()
{
- if( textFile != NULL )
- {
- saveTextFile(textFile);
- destroyTextFile(textFile);
- }
+ if (textFile != NULL) {
+ saveTextFile(textFile);
+ destroyTextFile(textFile);
+ }
}
diff --git a/src/server/heightScore.c~ b/src/server/heightScore.c~
new file mode 100644
index 0000000..5c42ad6
--- /dev/null
+++ b/src/server/heightScore.c~
@@ -0,0 +1,102 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "main.h"
+#include "list.h"
+#include "textFile.h"
+#include "heightScore.h"
+
+static textFile_t *textFile;
+
+void initHeightScore(char *file)
+{
+ int i;
+
+ textFile = loadTextFile(file);
+
+ if( textFile == NULL )
+ {
+ fprintf(stderr, _("I am unable to load: \"%s\" !\n"), file);
+ fprintf(stderr, _("Creating: \"%s\"\n"), file);
+ textFile = newTextFile(file);
+ }
+ else
+ {
+#ifdef DEBUG
+ printf(_("Scorefile: \"%s\"\n"), file);
+#endif
+ return;
+ }
+
+ if( textFile == NULL )
+ {
+ fprintf(stderr, _("I was unable to create: \"%s\" !\n"), file);
+ return;
+ }
+
+ for( i = 0 ; i < HEIGHTSCORE_MAX_PLAYERS ; i++ )
+ {
+ addList(textFile->text, strdup("no_name 0") );
+ }
+
+ saveTextFile(textFile);
+}
+
+int addPlayerInHighScore(char *name, int score)
+{
+ int i;
+
+ if( score <= 0 )
+ {
+ return -1; // Ha ha ha
+ }
+
+ for( i = 0 ; i < HEIGHTSCORE_MAX_PLAYERS ; i++ )
+ {
+ char *line;
+ char thisName[STR_NAME_SIZE];
+ int thisCore;
+
+ line = (char *) textFile->text->list[i];
+ sscanf(line, "%s %d", thisName, &thisCore);
+
+ if( score >= thisCore )
+ {
+ char new[STR_SIZE];
+
+ sprintf(new, "%s %d", name, score);
+ insList(textFile->text, i, strdup(new) );
+ delListItem(textFile->text, HEIGHTSCORE_MAX_PLAYERS, free);
+ //printTextFile(textFile);
+ saveTextFile(textFile);
+
+ return 0;
+ }
+ }
+
+ return -1;
+}
+
+char* getTableItem(int index)
+{
+ if( textFile != NULL &&
+ index >= 0 &&
+ index < textFile->text->count )
+ {
+ return (char *)textFile->text->list[index];
+ }
+
+ return NULL;
+}
+
+void quitHeightScore()
+{
+ if( textFile != NULL )
+ {
+ saveTextFile(textFile);
+ destroyTextFile(textFile);
+ }
+}
diff --git a/src/server/log.c b/src/server/log.c
index 89e4f46..9773926 100644
--- a/src/server/log.c
+++ b/src/server/log.c
@@ -11,57 +11,65 @@
static FILE *logFile;
-int initLog(char *name)
+int
+initLog(char *name)
{
- logFile = fopen(name, "a");
+ logFile = fopen(name, "a");
- if( logFile == NULL )
- {
- fprintf(stderr, _("Opening logfile \"%s\" failed!\n"), name);
- return -1;
- }
+ if (logFile == NULL) {
+ fprintf(stderr, _("Opening logfile \"%s\" failed!\n"), name);
+ return -1;
+ }
#ifdef DEBUG
- printf(_("I use logfile: \"%s\")\n"), name);
+ printf(_("I use logfile: \"%s\")\n"), name);
#endif
- addToLog(LOG_INF, "open log file");
+ addToLog(LOG_INF, "open log file");
- return 0;
+ return 0;
}
-void addToLog(int type, char *msg)
+void
+addToLog(int type, char *msg)
{
- char str[STR_LOG_SIZE];
- struct tm *tm_struct;
- time_t currentTime;
- char *str_type;
+ char str[STR_LOG_SIZE];
+ struct tm *tm_struct;
+ time_t currentTime;
+ char *str_type;
- currentTime = time(NULL);
- tm_struct = localtime(&currentTime);
+ currentTime = time(NULL);
+ tm_struct = localtime(&currentTime);
- switch( type )
- {
- case LOG_INF : str_type = "INF"; break;
- case LOG_DBG : str_type = "DBG"; break;
- case LOG_WRN : str_type = "WRN"; break;
- case LOG_ERR : str_type = "ERR"; break;
- default :
- assert( ! _("Really bad log value!") );
- break;
- }
+ switch (type) {
+ case LOG_INF:
+ str_type = "INF";
+ break;
+ case LOG_DBG:
+ str_type = "DBG";
+ break;
+ case LOG_WRN:
+ str_type = "WRN";
+ break;
+ case LOG_ERR:
+ str_type = "ERR";
+ break;
+ default:
+ assert(!_("Really bad log value!"));
+ break;
+ }
- sprintf(str, "(%02d-%02d-%02d %02d:%02d:%02d) %s %s\n",
- 1900+tm_struct->tm_year, tm_struct->tm_mon, tm_struct->tm_mday,
- tm_struct->tm_hour, tm_struct->tm_min, tm_struct->tm_sec,
- str_type, msg);
+ sprintf(str, "(%02d-%02d-%02d %02d:%02d:%02d) %s %s\n",
+ 1900 + tm_struct->tm_year, tm_struct->tm_mon, tm_struct->tm_mday,
+ tm_struct->tm_hour, tm_struct->tm_min, tm_struct->tm_sec,
+ str_type, msg);
- fprintf(logFile, str);
+ fprintf(logFile, str);
- fflush(logFile);
+ fflush(logFile);
}
-void quitLog()
+void
+quitLog()
{
- addToLog(LOG_INF, "close log file");
- fclose(logFile);
+ addToLog(LOG_INF, "close log file");
+ fclose(logFile);
}
-
diff --git a/src/server/log.c~ b/src/server/log.c~
new file mode 100644
index 0000000..89e4f46
--- /dev/null
+++ b/src/server/log.c~
@@ -0,0 +1,67 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <time.h>
+#include <assert.h>
+
+#include "log.h"
+#include "main.h"
+
+static FILE *logFile;
+
+int initLog(char *name)
+{
+ logFile = fopen(name, "a");
+
+ if( logFile == NULL )
+ {
+ fprintf(stderr, _("Opening logfile \"%s\" failed!\n"), name);
+ return -1;
+ }
+#ifdef DEBUG
+ printf(_("I use logfile: \"%s\")\n"), name);
+#endif
+ addToLog(LOG_INF, "open log file");
+
+ return 0;
+}
+
+void addToLog(int type, char *msg)
+{
+ char str[STR_LOG_SIZE];
+ struct tm *tm_struct;
+ time_t currentTime;
+ char *str_type;
+
+ currentTime = time(NULL);
+ tm_struct = localtime(&currentTime);
+
+ switch( type )
+ {
+ case LOG_INF : str_type = "INF"; break;
+ case LOG_DBG : str_type = "DBG"; break;
+ case LOG_WRN : str_type = "WRN"; break;
+ case LOG_ERR : str_type = "ERR"; break;
+ default :
+ assert( ! _("Really bad log value!") );
+ break;
+ }
+
+ sprintf(str, "(%02d-%02d-%02d %02d:%02d:%02d) %s %s\n",
+ 1900+tm_struct->tm_year, tm_struct->tm_mon, tm_struct->tm_mday,
+ tm_struct->tm_hour, tm_struct->tm_min, tm_struct->tm_sec,
+ str_type, msg);
+
+ fprintf(logFile, str);
+
+ fflush(logFile);
+}
+
+void quitLog()
+{
+ addToLog(LOG_INF, "close log file");
+ fclose(logFile);
+}
+
diff --git a/src/server/publicServer.c b/src/server/publicServer.c
index 8770300..a3c7326 100644
--- a/src/server/publicServer.c
+++ b/src/server/publicServer.c
@@ -47,326 +47,330 @@ extern int errno;
#define __PACKED__ __attribute__ ((__packed__))
-void countRoundInc()
+void
+countRoundInc()
{
}
-char *getSetting(char *env, char *param, char *default_val)
+char *
+getSetting(char *env, char *param, char *default_val)
{
- return getParamElse(param, getServerConfigFileValue(env, default_val) );
+ return getParamElse(param, getServerConfigFileValue(env, default_val));
}
-static int registerPublicServer()
+static int
+registerPublicServer()
{
#ifndef __WIN32
- int s;
+ int s;
#else
- SOCKET s;
+ SOCKET s;
#endif
- /* TODO: dodelat TCP makro */
- struct sockaddr_in server;
- char *master_server_ip;
+ /* TODO: dodelat TCP makro */
+ struct sockaddr_in server;
+ char *master_server_ip;
- master_server_ip = getIPFormDNS(NET_MASTER_SERVER_DOMAIN);
+ master_server_ip = getIPFormDNS(NET_MASTER_SERVER_DOMAIN);
- //printf("master_server_ip = %s\n", master_server_ip);
+ //printf("master_server_ip = %s\n", master_server_ip);
- if( master_server_ip == NULL ) // master server is down
- {
- return -1;
- }
+ if (master_server_ip == NULL) // master server is down
+ {
+ return -1;
+ }
- server.sin_family = AF_INET;
- server.sin_port = htons (NET_MASTER_PORT);
- server.sin_addr.s_addr = inet_addr (master_server_ip);
-
- free(master_server_ip);
+ server.sin_family = AF_INET;
+ server.sin_port = htons(NET_MASTER_PORT);
+ server.sin_addr.s_addr = inet_addr(master_server_ip);
- if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
- return 0;
- }
+ free(master_server_ip);
- /* Set to nonblocking socket mode */
+ if ((s = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
+ return 0;
+ }
+
+ /* Set to nonblocking socket mode */
#ifndef __WIN32__
- int oldFlag;
+ int oldFlag;
- oldFlag = fcntl (s, F_GETFL, 0);
+ oldFlag = fcntl(s, F_GETFL, 0);
- if( fcntl(s, F_SETFL, oldFlag | O_NONBLOCK) == -1 )
- {
- return -1;
- }
+ if (fcntl(s, F_SETFL, oldFlag | O_NONBLOCK) == -1) {
+ return -1;
+ }
#else
- unsigned long arg = 1;
- // Operation is FIONBIO. Parameter is pointer on non-zero number.
- if( ioctlsocket(s, FIONBIO, &arg) == SOCKET_ERROR )
- {
- WSACleanup();
- return -1;
- }
+ unsigned long arg = 1;
+ // Operation is FIONBIO. Parameter is pointer on non-zero number.
+ if (ioctlsocket(s, FIONBIO, &arg) == SOCKET_ERROR) {
+ WSACleanup();
+ return -1;
+ }
#endif
- if( connect (s, (struct sockaddr *) &server, sizeof (server)) == -1 ) {
+ if (connect(s, (struct sockaddr *) &server, sizeof(server)) == -1) {
#ifndef __WIN32__
- if (errno != EINPROGRESS)
- return -1;
+ if (errno != EINPROGRESS)
+ return -1;
#else
- if (WSAGetLastError() != WSAEWOULDBLOCK) {
- WSACleanup();
- return -1;
- }
+ if (WSAGetLastError() != WSAEWOULDBLOCK) {
+ WSACleanup();
+ return -1;
+ }
#endif
- }
+ }
- struct timeval tv;
+ struct timeval tv;
- fd_set myset;
+ fd_set myset;
- FD_ZERO(&myset);
- FD_SET(s, &myset);
+ FD_ZERO(&myset);
+ FD_SET(s, &myset);
- tv.tv_sec = 3;
- tv.tv_usec = 0;
+ tv.tv_sec = 3;
+ tv.tv_usec = 0;
- int ret = select (s+1, NULL, &myset, NULL, &tv);
+ int ret = select(s + 1, NULL, &myset, NULL, &tv);
- if (ret == -1)
- return -1;
+ if (ret == -1)
+ return -1;
- if (ret == 0)
- return -1;
+ if (ret == 0)
+ return -1;
- FD_ZERO(&myset);
- FD_SET(s, &myset);
+ FD_ZERO(&myset);
+ FD_SET(s, &myset);
- tv.tv_sec = 1;
- tv.tv_usec = 0;
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
- ret = select (s+1, NULL, &myset, NULL, &tv);
+ ret = select(s + 1, NULL, &myset, NULL, &tv);
- if (ret == -1)
- return -1;
+ if (ret == -1)
+ return -1;
- if (ret == 0)
- return -1;
+ if (ret == 0)
+ return -1;
- typedef struct {
- unsigned char cmd;
- unsigned port;
- unsigned ip;
- } __PACKED__ register_head;
+ typedef struct
+ {
+ unsigned char cmd;
+ unsigned port;
+ unsigned ip;
+ } __PACKED__ register_head;
- char *str = (char *) malloc (sizeof (register_head));
+ char *str = (char *) malloc(sizeof(register_head));
- register_head *head = (register_head *) str;
+ register_head *head = (register_head *) str;
- head->cmd = 'p';
- head->port = atoi( getSetting("PORT4", "--port4", "2200") );
- head->ip = 0; // TODO
+ head->cmd = 'p';
+ head->port = atoi(getSetting("PORT4", "--port4", "2200"));
+ head->ip = 0; // TODO
- /* send request for server list */
- int r = send (s, str, 9, 0);
+ /* send request for server list */
+ int r = send(s, str, 9, 0);
- free (str);
+ free(str);
- if (r == -1) {
+ if (r == -1) {
#ifndef __WIN32
- close(s);
+ close(s);
#else
- closesocket(s);
+ closesocket(s);
#endif
- return -1;
- }
+ return -1;
+ }
#ifndef __WIN32
- close(s);
+ close(s);
#else
- closesocket(s);
+ closesocket(s);
#endif
- return 0;
+ return 0;
}
-static int initPublicServerNetwork()
+static int
+initPublicServerNetwork()
{
- char ip4[STR_IP_SIZE];
- char ip6[STR_IP_SIZE];
- char *p_ip4, *p_ip6;
- int port4;
- int port6;
- int ret;
+ char ip4[STR_IP_SIZE];
+ char ip6[STR_IP_SIZE];
+ char *p_ip4, *p_ip6;
+ int port4;
+ int port6;
+ int ret;
+
+ ret = -1;
- ret = -1;
+ strcpy(ip4, getSetting("IP4", "--ip4", "none"));
+ strcpy(ip6, getSetting("IP6", "--ip6", "none"));
- strcpy(ip4, getSetting("IP4", "--ip4", "none" ) );
- strcpy(ip6, getSetting("IP6", "--ip6", "none" ) );
+ p_ip4 = ip4;
- p_ip4 = ip4;
+ if (strcmp(ip4, "none") == 0) {
+ p_ip4 = NULL;
+ }
- if( strcmp(ip4, "none") == 0 )
- {
- p_ip4 = NULL;
- }
+ p_ip6 = ip6;
- p_ip6 = ip6;
+ if (strcmp(ip6, "none") == 0) {
+ p_ip6 = NULL;
+ }
- if( strcmp(ip6, "none") == 0 )
- {
- p_ip6 = NULL;
- }
+ port4 = atoi(getSetting("PORT4", "--port4", "2200"));
+ port6 = atoi(getSetting("PORT6", "--port6", "2200"));
- port4 = atoi( getSetting("PORT4", "--port4", "2200") );
- port6 = atoi( getSetting("PORT6", "--port6", "2200") );
+ //ret = initNetMulitplayerPublicServer(p_ip4, port4, p_ip6, port6);
- //ret = initNetMulitplayerPublicServer(p_ip4, port4, p_ip6, port6);
-
- ret = initNetMuliplayerForGameServer(p_ip4, port4, p_ip6, port6);
+ ret = initNetMuliplayerForGameServer(p_ip4, port4, p_ip6, port6);
- return ret;
+ return ret;
}
-static void loadArena()
+static void
+loadArena()
{
- choice_arenaFile = getArenaFileFormNetName( getSetting("ARENA", "--arena", "FAGN") );
- arena = getArena(choice_arenaFile);
- setCurrentArena(arena);
+ choice_arenaFile =
+ getArenaFileFormNetName(getSetting("ARENA", "--arena", "FAGN"));
+ arena = getArena(choice_arenaFile);
+ setCurrentArena(arena);
}
-int initPublicServer()
+int
+initPublicServer()
{
- int ret;
- int i;
-
- initListID();
- initModule();
- initArenaFile();
- initTux();
- initItem();
- initShot();
- initServerConfigFile();
-
- ret = initLog(getSetting("LOG_FILE", "--log-file", "/tmp/tuxanci-server.log") );
-
- if( ret < 0 )
- {
- fprintf(stderr, _("I was unable to open config file!\n"));
- return -1;
- }
-
- initHeightScore( getSetting("SCORE_FILE", "--score-file", "/tmp/heightscore") );
-
- loadArena();
-
- for( i = 0 ; i < atoi(getSetting("ITEM", "--item", "10")) ; i++ )
- {
- addNewItem(arena->spaceItem, ID_UNKNOWN);
- }
-
- isSignalEnd = FALSE;
-
- ret = initPublicServerNetwork();
-
- if( ret < 0 )
- {
- printf(_("Unable to initialize network socket!\n"));
- return -1;
- }
-
- setServerMaxClients( atoi( getSetting("MAX_CLIENTS", "--max-clients", "32") ));
-
- if (registerPublicServer() < 0)
- {
- printf(_("Unable to contact MasterServer!)\n"));
- }
-
- return 0;
+ int ret;
+ int i;
+
+ initListID();
+ initModule();
+ initArenaFile();
+ initTux();
+ initItem();
+ initShot();
+ initServerConfigFile();
+
+ ret =
+ initLog(getSetting
+ ("LOG_FILE", "--log-file", "/tmp/tuxanci-server.log"));
+
+ if (ret < 0) {
+ fprintf(stderr, _("I was unable to open config file!\n"));
+ return -1;
+ }
+
+ initHeightScore(getSetting
+ ("SCORE_FILE", "--score-file", "/tmp/heightscore"));
+
+ loadArena();
+
+ for (i = 0; i < atoi(getSetting("ITEM", "--item", "10")); i++) {
+ addNewItem(arena->spaceItem, ID_UNKNOWN);
+ }
+
+ isSignalEnd = FALSE;
+
+ ret = initPublicServerNetwork();
+
+ if (ret < 0) {
+ printf(_("Unable to initialize network socket!\n"));
+ return -1;
+ }
+
+ setServerMaxClients(atoi
+ (getSetting("MAX_CLIENTS", "--max-clients", "32")));
+
+ if (registerPublicServer() < 0) {
+ printf(_("Unable to contact MasterServer!)\n"));
+ }
+
+ return 0;
}
-arenaFile_t* getChoiceArena()
+arenaFile_t *
+getChoiceArena()
{
- return choice_arenaFile;
+ return choice_arenaFile;
}
-void eventPublicServer()
+void
+eventPublicServer()
{
- static my_time_t lastActive = 0;
- my_time_t interval;
+ static my_time_t lastActive = 0;
+ my_time_t interval;
- eventNetMultiplayer();
+ eventNetMultiplayer();
- if( isSignalEnd == TRUE )
- {
- quitPublicServer();
- }
+ if (isSignalEnd == TRUE) {
+ quitPublicServer();
+ }
- if( lastActive == 0 )
- {
- lastActive = getMyTime();
- }
+ if (lastActive == 0) {
+ lastActive = getMyTime();
+ }
- interval = getMyTime() - lastActive;
+ interval = getMyTime() - lastActive;
- if( interval < 50 )
- {
- return;
- }
+ if (interval < 50) {
+ return;
+ }
- //printf("interval = %d\n", interval);
+ //printf("interval = %d\n", interval);
- lastActive = getMyTime();
+ lastActive = getMyTime();
- eventArena(arena);
+ eventArena(arena);
}
-void my_handler_quit(int n)
+void
+my_handler_quit(int n)
{
#ifdef DEBUG
- printf("my_handler_quit\n");
+ printf("my_handler_quit\n");
#endif
- isSignalEnd = TRUE;
+ isSignalEnd = TRUE;
}
-void quitPublicServer()
+void
+quitPublicServer()
{
#ifdef DEBUG
- printf(_("Quitting public server\n"));
+ printf(_("Quitting public server\n"));
#endif
- quitNetMultiplayer();
- destroyArena(arena);
-
- quitTux();
- quitItem();
- quitShot();
-
- quitArenaFile();
- quitServerConfigFile();
- quitModule();
- quitListID();
- quitHeightScore();
- quitLog();
-
- exit(0);
+ quitNetMultiplayer();
+ destroyArena(arena);
+
+ quitTux();
+ quitItem();
+ quitShot();
+
+ quitArenaFile();
+ quitServerConfigFile();
+ quitModule();
+ quitListID();
+ quitHeightScore();
+ quitLog();
+
+ exit(0);
}
-int startPublicServer()
+int
+startPublicServer()
{
#ifndef __WIN32__
- signal(SIGINT, my_handler_quit);
- signal(SIGTERM, my_handler_quit);
- signal(SIGQUIT, my_handler_quit);
+ signal(SIGINT, my_handler_quit);
+ signal(SIGTERM, my_handler_quit);
+ signal(SIGQUIT, my_handler_quit);
#endif
- if( initPublicServer() < 0 )
- {
- quitPublicServer();
- return -1;
- }
-
- while(1)
- {
- eventPublicServer();
- }
-
- return 0;
+ if (initPublicServer() < 0) {
+ quitPublicServer();
+ return -1;
+ }
+
+ while (1) {
+ eventPublicServer();
+ }
+
+ return 0;
}
diff --git a/src/server/publicServer.c~ b/src/server/publicServer.c~
new file mode 100644
index 0000000..8770300
--- /dev/null
+++ b/src/server/publicServer.c~
@@ -0,0 +1,372 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+#include <signal.h>
+#include <time.h>
+
+#ifndef __WIN32
+#include <sys/socket.h>
+#include <sys/select.h>
+#include <arpa/inet.h>
+#else
+# include <windows.h>
+# include <wininet.h>
+#endif
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "main.h"
+#include "list.h"
+#include "tux.h"
+#include "idManager.h"
+#include "myTimer.h"
+#include "arena.h"
+#include "item.h"
+#include "shot.h"
+#include "arenaFile.h"
+#include "proto.h"
+#include "modules.h"
+#include "net_multiplayer.h"
+
+#include "publicServer.h"
+#include "serverConfigFile.h"
+#include "heightScore.h"
+#include "log.h"
+
+#include "dns.h"
+
+static arena_t *arena;
+static bool_t isSignalEnd;
+static arenaFile_t *choice_arenaFile;
+
+extern int errno;
+
+#define __PACKED__ __attribute__ ((__packed__))
+
+void countRoundInc()
+{
+}
+
+char *getSetting(char *env, char *param, char *default_val)
+{
+ return getParamElse(param, getServerConfigFileValue(env, default_val) );
+}
+
+static int registerPublicServer()
+{
+#ifndef __WIN32
+ int s;
+#else
+ SOCKET s;
+#endif
+
+ /* TODO: dodelat TCP makro */
+ struct sockaddr_in server;
+ char *master_server_ip;
+
+ master_server_ip = getIPFormDNS(NET_MASTER_SERVER_DOMAIN);
+
+ //printf("master_server_ip = %s\n", master_server_ip);
+
+ if( master_server_ip == NULL ) // master server is down
+ {
+ return -1;
+ }
+
+ server.sin_family = AF_INET;
+ server.sin_port = htons (NET_MASTER_PORT);
+ server.sin_addr.s_addr = inet_addr (master_server_ip);
+
+ free(master_server_ip);
+
+ if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
+ return 0;
+ }
+
+ /* Set to nonblocking socket mode */
+#ifndef __WIN32__
+ int oldFlag;
+
+ oldFlag = fcntl (s, F_GETFL, 0);
+
+ if( fcntl(s, F_SETFL, oldFlag | O_NONBLOCK) == -1 )
+ {
+ return -1;
+ }
+#else
+ unsigned long arg = 1;
+ // Operation is FIONBIO. Parameter is pointer on non-zero number.
+ if( ioctlsocket(s, FIONBIO, &arg) == SOCKET_ERROR )
+ {
+ WSACleanup();
+ return -1;
+ }
+#endif
+
+ if( connect (s, (struct sockaddr *) &server, sizeof (server)) == -1 ) {
+#ifndef __WIN32__
+ if (errno != EINPROGRESS)
+ return -1;
+#else
+ if (WSAGetLastError() != WSAEWOULDBLOCK) {
+ WSACleanup();
+ return -1;
+ }
+#endif
+ }
+
+ struct timeval tv;
+
+ fd_set myset;
+
+ FD_ZERO(&myset);
+ FD_SET(s, &myset);
+
+ tv.tv_sec = 3;
+ tv.tv_usec = 0;
+
+ int ret = select (s+1, NULL, &myset, NULL, &tv);
+
+ if (ret == -1)
+ return -1;
+
+ if (ret == 0)
+ return -1;
+
+ FD_ZERO(&myset);
+ FD_SET(s, &myset);
+
+ tv.tv_sec = 1;
+ tv.tv_usec = 0;
+
+ ret = select (s+1, NULL, &myset, NULL, &tv);
+
+ if (ret == -1)
+ return -1;
+
+ if (ret == 0)
+ return -1;
+
+
+ typedef struct {
+ unsigned char cmd;
+ unsigned port;
+ unsigned ip;
+ } __PACKED__ register_head;
+
+ char *str = (char *) malloc (sizeof (register_head));
+
+ register_head *head = (register_head *) str;
+
+ head->cmd = 'p';
+ head->port = atoi( getSetting("PORT4", "--port4", "2200") );
+ head->ip = 0; // TODO
+
+ /* send request for server list */
+ int r = send (s, str, 9, 0);
+
+ free (str);
+
+ if (r == -1) {
+#ifndef __WIN32
+ close(s);
+#else
+ closesocket(s);
+#endif
+ return -1;
+ }
+
+#ifndef __WIN32
+ close(s);
+#else
+ closesocket(s);
+#endif
+
+ return 0;
+}
+
+static int initPublicServerNetwork()
+{
+ char ip4[STR_IP_SIZE];
+ char ip6[STR_IP_SIZE];
+ char *p_ip4, *p_ip6;
+ int port4;
+ int port6;
+ int ret;
+
+ ret = -1;
+
+ strcpy(ip4, getSetting("IP4", "--ip4", "none" ) );
+ strcpy(ip6, getSetting("IP6", "--ip6", "none" ) );
+
+ p_ip4 = ip4;
+
+ if( strcmp(ip4, "none") == 0 )
+ {
+ p_ip4 = NULL;
+ }
+
+ p_ip6 = ip6;
+
+ if( strcmp(ip6, "none") == 0 )
+ {
+ p_ip6 = NULL;
+ }
+
+ port4 = atoi( getSetting("PORT4", "--port4", "2200") );
+ port6 = atoi( getSetting("PORT6", "--port6", "2200") );
+
+ //ret = initNetMulitplayerPublicServer(p_ip4, port4, p_ip6, port6);
+
+ ret = initNetMuliplayerForGameServer(p_ip4, port4, p_ip6, port6);
+
+ return ret;
+}
+
+static void loadArena()
+{
+ choice_arenaFile = getArenaFileFormNetName( getSetting("ARENA", "--arena", "FAGN") );
+ arena = getArena(choice_arenaFile);
+ setCurrentArena(arena);
+}
+
+int initPublicServer()
+{
+ int ret;
+ int i;
+
+ initListID();
+ initModule();
+ initArenaFile();
+ initTux();
+ initItem();
+ initShot();
+ initServerConfigFile();
+
+ ret = initLog(getSetting("LOG_FILE", "--log-file", "/tmp/tuxanci-server.log") );
+
+ if( ret < 0 )
+ {
+ fprintf(stderr, _("I was unable to open config file!\n"));
+ return -1;
+ }
+
+ initHeightScore( getSetting("SCORE_FILE", "--score-file", "/tmp/heightscore") );
+
+ loadArena();
+
+ for( i = 0 ; i < atoi(getSetting("ITEM", "--item", "10")) ; i++ )
+ {
+ addNewItem(arena->spaceItem, ID_UNKNOWN);
+ }
+
+ isSignalEnd = FALSE;
+
+ ret = initPublicServerNetwork();
+
+ if( ret < 0 )
+ {
+ printf(_("Unable to initialize network socket!\n"));
+ return -1;
+ }
+
+ setServerMaxClients( atoi( getSetting("MAX_CLIENTS", "--max-clients", "32") ));
+
+ if (registerPublicServer() < 0)
+ {
+ printf(_("Unable to contact MasterServer!)\n"));
+ }
+
+ return 0;
+}
+
+arenaFile_t* getChoiceArena()
+{
+ return choice_arenaFile;
+}
+
+void eventPublicServer()
+{
+ static my_time_t lastActive = 0;
+ my_time_t interval;
+
+ eventNetMultiplayer();
+
+ if( isSignalEnd == TRUE )
+ {
+ quitPublicServer();
+ }
+
+ if( lastActive == 0 )
+ {
+ lastActive = getMyTime();
+ }
+
+ interval = getMyTime() - lastActive;
+
+ if( interval < 50 )
+ {
+ return;
+ }
+
+ //printf("interval = %d\n", interval);
+
+ lastActive = getMyTime();
+
+ eventArena(arena);
+}
+
+void my_handler_quit(int n)
+{
+#ifdef DEBUG
+ printf("my_handler_quit\n");
+#endif
+ isSignalEnd = TRUE;
+}
+
+void quitPublicServer()
+{
+#ifdef DEBUG
+ printf(_("Quitting public server\n"));
+#endif
+ quitNetMultiplayer();
+ destroyArena(arena);
+
+ quitTux();
+ quitItem();
+ quitShot();
+
+ quitArenaFile();
+ quitServerConfigFile();
+ quitModule();
+ quitListID();
+ quitHeightScore();
+ quitLog();
+
+ exit(0);
+}
+
+int startPublicServer()
+{
+#ifndef __WIN32__
+ signal(SIGINT, my_handler_quit);
+ signal(SIGTERM, my_handler_quit);
+ signal(SIGQUIT, my_handler_quit);
+#endif
+ if( initPublicServer() < 0 )
+ {
+ quitPublicServer();
+ return -1;
+ }
+
+ while(1)
+ {
+ eventPublicServer();
+ }
+
+ return 0;
+}
diff --git a/src/server/serverConfigFile.c b/src/server/serverConfigFile.c
index 487ec13..7e843eb 100644
--- a/src/server/serverConfigFile.c
+++ b/src/server/serverConfigFile.c
@@ -11,98 +11,95 @@
static textFile_t *serverTextFile;
-static void prepareConfigFile(textFile_t *ts)
+static void
+prepareConfigFile(textFile_t * ts)
{
- int i;
- int j;
-
- for( i = 0 ; i < serverTextFile->text->count ; i++ )
- {
- char *line;
- int len;
-
- line = (char *)(serverTextFile->text->list[i]);
- len = strlen(line);
-
- for( j = 0 ; j < len ; j++ )
- {
- if( line[j] == ' ' ) // [TAB]
- {
- line[j] = ' ';
- }
- }
- }
+ int i;
+ int j;
+
+ for (i = 0; i < serverTextFile->text->count; i++) {
+ char *line;
+ int len;
+
+ line = (char *) (serverTextFile->text->list[i]);
+ len = strlen(line);
+
+ for (j = 0; j < len; j++) {
+ if (line[j] == ' ') // [TAB]
+ {
+ line[j] = ' ';
+ }
+ }
+ }
}
-void initServerConfigFile()
+void
+initServerConfigFile()
{
- char *configFile;
+ char *configFile;
- configFile = getParamElse("--config-file", SERVER_CONFIG);
- printf(_("Loading configuration from: \"%s\"\n"), getParamElse("--config-file", SERVER_CONFIG) );
+ configFile = getParamElse("--config-file", SERVER_CONFIG);
+ printf(_("Loading configuration from: \"%s\"\n"),
+ getParamElse("--config-file", SERVER_CONFIG));
- serverTextFile = loadTextFile(configFile);
+ serverTextFile = loadTextFile(configFile);
- if( serverTextFile == NULL )
- {
- fprintf(stderr, _("I was unable to load config file. Falling back to defaults!\n"));
- return;
- }
-
- prepareConfigFile(serverTextFile);
+ if (serverTextFile == NULL) {
+ fprintf(stderr,
+ _
+ ("I was unable to load config file. Falling back to defaults!\n"));
+ return;
+ }
+
+ prepareConfigFile(serverTextFile);
}
-static char *findValue(char *s)
+static char *
+findValue(char *s)
{
- int len;
- int i;
+ int len;
+ int i;
- len = strlen(s);
+ len = strlen(s);
- for( i = 0 ; i < len-1 ; i++)
- {
- if( s[i] == ' ' && s[i+1] != ' ' )
- {
- return s+i+1;
- }
- }
+ for (i = 0; i < len - 1; i++) {
+ if (s[i] == ' ' && s[i + 1] != ' ') {
+ return s + i + 1;
+ }
+ }
- return NULL;
+ return NULL;
}
-char* getServerConfigFileValue(char *env, char *s)
+char *
+getServerConfigFileValue(char *env, char *s)
{
- int i;
- int len;
+ int i;
+ int len;
- if( serverTextFile == NULL )
- {
- return s;
- }
+ if (serverTextFile == NULL) {
+ return s;
+ }
- len = strlen(env);
+ len = strlen(env);
- for( i = 0 ; i < serverTextFile->text->count ; i++ )
- {
- char *line;
+ for (i = 0; i < serverTextFile->text->count; i++) {
+ char *line;
- line = (char *)(serverTextFile->text->list[i]);
+ line = (char *) (serverTextFile->text->list[i]);
- if( strncmp(line, env, len) == 0 )
- {
- return findValue(line);
- }
- }
+ if (strncmp(line, env, len) == 0) {
+ return findValue(line);
+ }
+ }
- return s;
+ return s;
}
-void quitServerConfigFile()
+void
+quitServerConfigFile()
{
- if( serverTextFile != NULL )
- {
- destroyTextFile(serverTextFile);
- }
+ if (serverTextFile != NULL) {
+ destroyTextFile(serverTextFile);
+ }
}
-
-
diff --git a/src/server/serverConfigFile.c~ b/src/server/serverConfigFile.c~
new file mode 100644
index 0000000..487ec13
--- /dev/null
+++ b/src/server/serverConfigFile.c~
@@ -0,0 +1,108 @@
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#include "main.h"
+#include "list.h"
+#include "textFile.h"
+#include "serverConfigFile.h"
+
+static textFile_t *serverTextFile;
+
+static void prepareConfigFile(textFile_t *ts)
+{
+ int i;
+ int j;
+
+ for( i = 0 ; i < serverTextFile->text->count ; i++ )
+ {
+ char *line;
+ int len;
+
+ line = (char *)(serverTextFile->text->list[i]);
+ len = strlen(line);
+
+ for( j = 0 ; j < len ; j++ )
+ {
+ if( line[j] == ' ' ) // [TAB]
+ {
+ line[j] = ' ';
+ }
+ }
+ }
+}
+
+void initServerConfigFile()
+{
+ char *configFile;
+
+ configFile = getParamElse("--config-file", SERVER_CONFIG);
+ printf(_("Loading configuration from: \"%s\"\n"), getParamElse("--config-file", SERVER_CONFIG) );
+
+ serverTextFile = loadTextFile(configFile);
+
+ if( serverTextFile == NULL )
+ {
+ fprintf(stderr, _("I was unable to load config file. Falling back to defaults!\n"));
+ return;
+ }
+
+ prepareConfigFile(serverTextFile);
+}
+
+static char *findValue(char *s)
+{
+ int len;
+ int i;
+
+ len = strlen(s);
+
+ for( i = 0 ; i < len-1 ; i++)
+ {
+ if( s[i] == ' ' && s[i+1] != ' ' )
+ {
+ return s+i+1;
+ }
+ }
+
+ return NULL;
+}
+
+char* getServerConfigFileValue(char *env, char *s)
+{
+ int i;
+ int len;
+
+ if( serverTextFile == NULL )
+ {
+ return s;
+ }
+
+ len = strlen(env);
+
+ for( i = 0 ; i < serverTextFile->text->count ; i++ )
+ {
+ char *line;
+
+ line = (char *)(serverTextFile->text->list[i]);
+
+ if( strncmp(line, env, len) == 0 )
+ {
+ return findValue(line);
+ }
+ }
+
+ return s;
+}
+
+void quitServerConfigFile()
+{
+ if( serverTextFile != NULL )
+ {
+ destroyTextFile(serverTextFile);
+ }
+}
+
+