summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-07-26 20:45:57 +0000
committerultramage <ultramage@54d463be-8e91-2dee-dedb-b68131a5f0ec>2008-07-26 20:45:57 +0000
commit1624d1d57db3cfde3b4f42a55580f5a1e742f28e (patch)
treeaedd8d2afa77616e61bf8f50249575294b06a528 /src/common
parente3879120d578c07cc6ca2dfeeec577e8461a6c52 (diff)
downloadhercules-1624d1d57db3cfde3b4f42a55580f5a1e742f28e.tar.gz
hercules-1624d1d57db3cfde3b4f42a55580f5a1e742f28e.tar.bz2
hercules-1624d1d57db3cfde3b4f42a55580f5a1e742f28e.tar.xz
hercules-1624d1d57db3cfde3b4f42a55580f5a1e742f28e.zip
Merged the /loginmerge branch (topic:192754)
* the login server storage, ipban and logging systems have been abstracted and now provide a common interface; the rest has been merged into a single login server core (no more login/login_sql duplicity) * storage systems are now added via compiler options (WITH_SQL / WITH_TXT) * multiple storage engines can be compiled in at the same time, and the config option account.engine defines which one will be used. * due to MySQL autoincrement limitations, accounts with id '0' will not be supported; account IDs from this point on should start from '1'. * login_log() functions now again record IP addresses in dotted format, not as 4-byte integers (undo from r6868). * removed config options that defined column names in the login table * removed `memo` and `error message` columns from login db/savefile * moved `loginlog` table to the logs database * added sql files upgrade_svn12975.sql and upgrade_svn12975_log.sql * due to changes to the login table layout, I added an !optional! sql file (upgrade_svn12975_view.sql) that will provide a certain degree of backwards compatibility with existing software; read the instructions inside carefully! * moved third-party includes/libs to a separate directory * updated project files / makefiles Changed the way GM levels are handled * removed conf/gm_account.txt * added the gm level column to the txt savefile (after 'email' column) * gm level information is now transferred along with account data For open problems see bugreport:1889. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@13000 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src/common')
-rw-r--r--src/common/mmo.h6
-rw-r--r--src/common/plugins.c2
-rw-r--r--src/common/plugins.h2
-rw-r--r--src/common/sql.c51
-rw-r--r--src/common/utils.c6
5 files changed, 57 insertions, 10 deletions
diff --git a/src/common/mmo.h b/src/common/mmo.h
index 2e96e8910..9e419c65b 100644
--- a/src/common/mmo.h
+++ b/src/common/mmo.h
@@ -90,6 +90,7 @@
//Limits to avoid ID collision with other game objects
#define START_ACCOUNT_NUM 2000000
#define END_ACCOUNT_NUM 100000000
+#define START_CHAR_NUM 150000
//Base Homun skill.
#define HM_SKILLBASE 8001
@@ -344,11 +345,6 @@ struct registry {
struct global_reg account2[ACCOUNT_REG2_NUM];
};
-struct gm_account {
- int account_id;
- int level;
-};
-
struct party_member {
int account_id;
int char_id;
diff --git a/src/common/plugins.c b/src/common/plugins.c
index 01a6194cd..c6c362de5 100644
--- a/src/common/plugins.c
+++ b/src/common/plugins.c
@@ -287,7 +287,7 @@ char *DLL_ERROR(void)
{
static char dllbuf[80];
DWORD dw = GetLastError();
- FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, 0, dllbuf, 80, NULL);
+ FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, dw, 0, dllbuf, 80, NULL);
return dllbuf;
}
#endif
diff --git a/src/common/plugins.h b/src/common/plugins.h
index 9d93bcaa6..e71a4e8c5 100644
--- a/src/common/plugins.h
+++ b/src/common/plugins.h
@@ -16,7 +16,7 @@
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
- #define DLL_OPEN(x) LoadLibrary(x)
+ #define DLL_OPEN(x) LoadLibraryA(x)
#define DLL_SYM(x,y) GetProcAddress(x,y)
#define DLL_CLOSE(x) FreeLibrary(x)
char *DLL_ERROR(void);
diff --git a/src/common/sql.c b/src/common/sql.c
index 567fbb703..47ff320ea 100644
--- a/src/common/sql.c
+++ b/src/common/sql.c
@@ -5,6 +5,7 @@
#include "../common/malloc.h"
#include "../common/showmsg.h"
#include "../common/strlib.h"
+#include "../common/timer.h"
#include "sql.h"
#ifdef WIN32
@@ -24,6 +25,7 @@ struct Sql
MYSQL_RES* result;
MYSQL_ROW row;
unsigned long* lengths;
+ int keepalive;
};
@@ -73,6 +75,8 @@ Sql* Sql_Malloc(void)
+static int Sql_P_Keepalive(Sql* self);
+
/// Establishes a connection.
int Sql_Connect(Sql* self, const char* user, const char* passwd, const char* host, uint16 port, const char* db)
{
@@ -85,6 +89,14 @@ int Sql_Connect(Sql* self, const char* user, const char* passwd, const char* hos
ShowSQL("%s\n", mysql_error(&self->handle));
return SQL_ERROR;
}
+
+ self->keepalive = Sql_P_Keepalive(self);
+ if( self->keepalive == INVALID_TIMER )
+ {
+ ShowSQL("Failed to establish keepalive for DB connection!\n");
+ return SQL_ERROR;
+ }
+
return SQL_SUCCESS;
}
@@ -162,6 +174,44 @@ int Sql_Ping(Sql* self)
+/// Wrapper function for Sql_Ping.
+///
+/// @private
+static int Sql_P_KeepaliveTimer(int tid, unsigned int tick, int id, intptr data)
+{
+ Sql* self = (Sql*)data;
+ ShowInfo("Pinging SQL server to keep connection alive...\n");
+ Sql_Ping(self);
+ return 0;
+}
+
+
+
+/// Establishes keepalive (periodic ping) on the connection.
+///
+/// @return the keepalive timer id, or INVALID_TIMER
+/// @private
+static int Sql_P_Keepalive(Sql* self)
+{
+ uint32 timeout, ping_interval;
+
+ // set a default value first
+ timeout = 28800; // 8 hours
+
+ // request the timeout value from the mysql server
+ Sql_GetTimeout(self, &timeout);
+
+ if( timeout < 60 )
+ timeout = 60;
+
+ // establish keepalive
+ ping_interval = timeout - 30; // 30-second reserve
+ //add_timer_func_list(Sql_P_KeepaliveTimer, "Sql_P_KeepaliveTimer");
+ return add_timer_interval(gettick() + ping_interval*1000, Sql_P_KeepaliveTimer, 0, (int)self, ping_interval*1000);
+}
+
+
+
/// Escapes a string.
size_t Sql_EscapeString(Sql* self, char *out_to, const char *from)
{
@@ -356,6 +406,7 @@ void Sql_Free(Sql* self)
{
Sql_FreeResult(self);
StringBuf_Destroy(&self->buf);
+ delete_timer(self->keepalive, Sql_P_KeepaliveTimer);
aFree(self);
}
}
diff --git a/src/common/utils.c b/src/common/utils.c
index ce9ea56f2..c1128edb4 100644
--- a/src/common/utils.c
+++ b/src/common/utils.c
@@ -77,7 +77,7 @@ static char* checkpath(char *path, const char *srcpath)
void findfile(const char *p, const char *pat, void (func)(const char*))
{
- WIN32_FIND_DATA FindFileData;
+ WIN32_FIND_DATAA FindFileData;
HANDLE hFind;
char tmppath[MAX_PATH+1];
@@ -90,7 +90,7 @@ void findfile(const char *p, const char *pat, void (func)(const char*))
else
strcat(tmppath, "*");
- hFind = FindFirstFile(tmppath, &FindFileData);
+ hFind = FindFirstFileA(tmppath, &FindFileData);
if (hFind != INVALID_HANDLE_VALUE)
{
do
@@ -111,7 +111,7 @@ void findfile(const char *p, const char *pat, void (func)(const char*))
{
findfile(tmppath, pat, func);
}
- }while (FindNextFile(hFind, &FindFileData) != 0);
+ }while (FindNextFileA(hFind, &FindFileData) != 0);
FindClose(hFind);
}
return;