summaryrefslogtreecommitdiff
path: root/src/char_sql/inter.c
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2009-12-25 05:00:31 -0500
committerJared Adams <jaxad0127@gmail.com>2009-12-26 00:40:11 -0700
commit634aeeb9d58b01f9de6632a014a063ef0c4cf31e (patch)
tree70023dd2bcc12a3f96ec6f118d80e27411920531 /src/char_sql/inter.c
parent113fcc4f0a7a0921e94bc415515dd4b393a29d60 (diff)
downloadtmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.gz
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.bz2
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.tar.xz
tmwa-634aeeb9d58b01f9de6632a014a063ef0c4cf31e.zip
Used the "indent" C formatting program from GNU to do some clean ups
The command options used was: -nbad -bap -sc -bl -blf -bli0 -cli4 -cbi0 -di5 -nbc -bls -ip2 -nut -ts4 -bap -i4 -sob -npsl
Diffstat (limited to 'src/char_sql/inter.c')
-rw-r--r--src/char_sql/inter.c971
1 files changed, 530 insertions, 441 deletions
diff --git a/src/char_sql/inter.c b/src/char_sql/inter.c
index d1ee194..048d466 100644
--- a/src/char_sql/inter.c
+++ b/src/char_sql/inter.c
@@ -15,559 +15,648 @@
#include "int_pet.h"
#include "lock.h"
-#define WISDATA_TTL (60*1000) // Wisデータの生存時間(60秒)
-#define WISDELLIST_MAX 256 // Wisデータ削除リストの要素数
+#define WISDATA_TTL (60*1000) // Wisデータの生存時間(60秒)
+#define WISDELLIST_MAX 256 // Wisデータ削除リストの要素数
-
-struct accreg {
- int account_id,reg_num;
- struct global_reg reg[ACCOUNT_REG_NUM];
+struct accreg
+{
+ int account_id, reg_num;
+ struct global_reg reg[ACCOUNT_REG_NUM];
};
static struct accreg *accreg_pt;
-
-int party_share_level = 10;
+int party_share_level = 10;
MYSQL mysql_handle;
-MYSQL_RES* sql_res ;
-MYSQL_ROW sql_row ;
-int sql_fields, sql_cnt;
+MYSQL_RES *sql_res;
+MYSQL_ROW sql_row;
+int sql_fields, sql_cnt;
char tmp_sql[65535];
MYSQL lmysql_handle;
char tmp_lsql[65535];
-MYSQL_RES* lsql_res ;
-MYSQL_ROW lsql_row ;
+MYSQL_RES *lsql_res;
+MYSQL_ROW lsql_row;
-int char_server_port = 3306;
+int char_server_port = 3306;
char char_server_ip[32] = "127.0.0.1";
char char_server_id[32] = "ragnarok";
char char_server_pw[32] = "ragnarok";
char char_server_db[32] = "ragnarok";
-int login_server_port = 3306;
+int login_server_port = 3306;
char login_server_ip[32] = "127.0.0.1";
char login_server_id[32] = "ragnarok";
char login_server_pw[32] = "ragnarok";
char login_server_db[32] = "ragnarok";
// sending packet list
-int inter_send_packet_length[]={
- -1,-1,27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- -1, 7, 0, 0, 0, 0, 0, 0, -1,11, 0, 0, 0, 0, 0, 0,
- 35,-1,11,15, 34,29, 7,-1, 0, 0, 0, 0, 0, 0, 0, 0,
- 10,-1,15, 0, 79,19, 7,-1, 0,-1,-1,-1, 14,67,186,-1,
- 9, 9,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 11,-1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+int inter_send_packet_length[] = {
+ -1, -1, 27, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ -1, 7, 0, 0, 0, 0, 0, 0, -1, 11, 0, 0, 0, 0, 0, 0,
+ 35, -1, 11, 15, 34, 29, 7, -1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 10, -1, 15, 0, 79, 19, 7, -1, 0, -1, -1, -1, 14, 67, 186, -1,
+ 9, 9, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 11, -1, 7, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
+
// recv. packet list
-int inter_recv_packet_length[]={
- -1,-1, 7, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6,-1, 0, 0, 0, 0, 0, 0, 10,-1, 0, 0, 0, 0, 0, 0,
- 72, 6,52,14, 10,29, 6,-1, 34, 0, 0, 0, 0, 0, 0, 0,
- -1, 6,-1, 0, 55,19, 6,-1, 14,-1,-1,-1, 14,19,186,-1,
- 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 48,14,-1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+int inter_recv_packet_length[] = {
+ -1, -1, 7, 0, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 6, -1, 0, 0, 0, 0, 0, 0, 10, -1, 0, 0, 0, 0, 0, 0,
+ 72, 6, 52, 14, 10, 29, 6, -1, 34, 0, 0, 0, 0, 0, 0, 0,
+ -1, 6, -1, 0, 55, 19, 6, -1, 14, -1, -1, -1, 14, 19, 186, -1,
+ 5, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 48, 14, -1, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
-struct WisData {
- int id,fd,count,len;
- unsigned long tick;
- unsigned char src[24],dst[24],msg[512];
+struct WisData
+{
+ int id, fd, count, len;
+ unsigned long tick;
+ unsigned char src[24], dst[24], msg[512];
};
-static struct dbt * wis_db = NULL;
+static struct dbt *wis_db = NULL;
static int wis_dellist[WISDELLIST_MAX], wis_delnum;
//--------------------------------------------------------
// Save account_reg to sql (type=2)
-int inter_accreg_tosql(int account_id,struct accreg *reg){
-
- int j;
- char temp_str[32];
- if (account_id<=0) return 0;
- reg->account_id=account_id;
-
- //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
- sprintf(tmp_sql,"DELETE FROM `%s` WHERE `type`=2 AND `account_id`='%d'",reg_db, account_id);
- if(mysql_query(&mysql_handle, tmp_sql) ) {
- printf("DB server Error (delete `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
- }
-
- if (reg->reg_num<=0) return 0;
-
- for(j=0;j<reg->reg_num;j++){
- if(reg->reg[j].str != NULL){
- sprintf(tmp_sql,"INSERT INTO `%s` (`type`, `account_id`, `str`, `value`) VALUES (2,'%d', '%s','%d')",
- reg_db, reg->account_id, jstrescapecpy(temp_str,reg->reg[j].str), reg->reg[j].value);
- if(mysql_query(&mysql_handle, tmp_sql) ) {
- printf("DB server Error (insert `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
- }
- }
- }
- return 0;
+int inter_accreg_tosql (int account_id, struct accreg *reg)
+{
+
+ int j;
+ char temp_str[32];
+ if (account_id <= 0)
+ return 0;
+ reg->account_id = account_id;
+
+ //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
+ sprintf (tmp_sql, "DELETE FROM `%s` WHERE `type`=2 AND `account_id`='%d'",
+ reg_db, account_id);
+ if (mysql_query (&mysql_handle, tmp_sql))
+ {
+ printf ("DB server Error (delete `global_reg_value`)- %s\n",
+ mysql_error (&mysql_handle));
+ }
+
+ if (reg->reg_num <= 0)
+ return 0;
+
+ for (j = 0; j < reg->reg_num; j++)
+ {
+ if (reg->reg[j].str != NULL)
+ {
+ sprintf (tmp_sql,
+ "INSERT INTO `%s` (`type`, `account_id`, `str`, `value`) VALUES (2,'%d', '%s','%d')",
+ reg_db, reg->account_id, jstrescapecpy (temp_str,
+ reg->reg[j].str),
+ reg->reg[j].value);
+ if (mysql_query (&mysql_handle, tmp_sql))
+ {
+ printf ("DB server Error (insert `global_reg_value`)- %s\n",
+ mysql_error (&mysql_handle));
+ }
+ }
+ }
+ return 0;
}
// Load account_reg from sql (type=2)
-int inter_accreg_fromsql(int account_id,struct accreg *reg)
+int inter_accreg_fromsql (int account_id, struct accreg *reg)
{
- int j=0;
- if (reg==NULL) return 0;
- memset(reg, 0, sizeof(struct accreg));
- reg->account_id=account_id;
-
- //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
- sprintf (tmp_sql, "SELECT `str`, `value` FROM `%s` WHERE `type`=2 AND `account_id`='%d'",reg_db, reg->account_id);
- if(mysql_query(&mysql_handle, tmp_sql) ) {
- printf("DB server Error (select `global_reg_value`)- %s\n", mysql_error(&mysql_handle) );
- }
- sql_res = mysql_store_result(&mysql_handle);
-
- if (sql_res) {
- for(j=0;(sql_row = mysql_fetch_row(sql_res));j++){
- memcpy(reg->reg[j].str, sql_row[0],32);
- reg->reg[j].value = atoi(sql_row[1]);
- }
- mysql_free_result(sql_res);
- }
- reg->reg_num=j;
- return 0;
+ int j = 0;
+ if (reg == NULL)
+ return 0;
+ memset (reg, 0, sizeof (struct accreg));
+ reg->account_id = account_id;
+
+ //`global_reg_value` (`type`, `account_id`, `char_id`, `str`, `value`)
+ sprintf (tmp_sql,
+ "SELECT `str`, `value` FROM `%s` WHERE `type`=2 AND `account_id`='%d'",
+ reg_db, reg->account_id);
+ if (mysql_query (&mysql_handle, tmp_sql))
+ {
+ printf ("DB server Error (select `global_reg_value`)- %s\n",
+ mysql_error (&mysql_handle));
+ }
+ sql_res = mysql_store_result (&mysql_handle);
+
+ if (sql_res)
+ {
+ for (j = 0; (sql_row = mysql_fetch_row (sql_res)); j++)
+ {
+ memcpy (reg->reg[j].str, sql_row[0], 32);
+ reg->reg[j].value = atoi (sql_row[1]);
+ }
+ mysql_free_result (sql_res);
+ }
+ reg->reg_num = j;
+ return 0;
}
// Initialize
-int inter_accreg_sql_init()
+int inter_accreg_sql_init ()
{
- CREATE(accreg_pt, struct accreg, 1);
- return 0;
-
+ CREATE (accreg_pt, struct accreg, 1);
+ return 0;
+
}
/*==========================================
* read config file
*------------------------------------------
*/
-int inter_config_read(const char *cfgName) {
- printf ("start reading interserver configuration: %s\n",cfgName);
- int i;
- char line[1024], w1[1024], w2[1024];
- FILE *fp;
-
- fp=fopen_(cfgName,"r");
- if(fp==NULL){
- printf("file not found: %s\n", cfgName);
- return 1;
- }
- while(fgets(line, 1020, fp)){
- i=sscanf(line,"%[^:]: %[^\r\n]",w1,w2);
- if(i!=2)
- continue;
-
- if(strcmpi(w1,"char_server_ip")==0){
- strcpy(char_server_ip, w2);
- printf ("set char_server_ip : %s\n",w2);
- }
- else if(strcmpi(w1,"char_server_port")==0){
- char_server_port=atoi(w2);
- printf ("set char_server_port : %s\n",w2);
- }
- else if(strcmpi(w1,"char_server_id")==0){
- strcpy(char_server_id, w2);
- printf ("set char_server_id : %s\n",w2);
- }
- else if(strcmpi(w1,"char_server_pw")==0){
- strcpy(char_server_pw, w2);
- printf ("set char_server_pw : %s\n",w2);
- }
- else if(strcmpi(w1,"char_server_db")==0){
- strcpy(char_server_db, w2);
- printf ("set char_server_db : %s\n",w2);
- }
- //Logins information to be read from the inter_athena.conf
- //for character deletion (checks email in the loginDB)
-
- else if(strcmpi(w1,"login_server_ip")==0){
- strcpy(login_server_ip, w2);
- printf ("set login_server_ip : %s\n",w2);
- }
- else if(strcmpi(w1,"login_server_port")==0){
- login_server_port=atoi(w2);
- printf ("set login_server_port : %s\n",w2);
- }
- else if(strcmpi(w1,"login_server_id")==0){
- strcpy(login_server_id, w2);
- printf ("set login_server_id : %s\n",w2);
- }
- else if(strcmpi(w1,"login_server_pw")==0){
- strcpy(login_server_pw, w2);
- printf ("set login_server_pw : %s\n",w2);
- }
- else if(strcmpi(w1,"login_server_db")==0){
- strcpy(login_server_db, w2);
- printf ("set login_server_db : %s\n",w2);
- }
- else if(strcmpi(w1,"party_share_level")==0){
- party_share_level=atoi(w2);
- if(party_share_level < 0) party_share_level = 0;
- }else if(strcmpi(w1,"import")==0){
- inter_config_read(w2);
- }
- else if(strcmpi(w1,"login_server_db")==0){
- strcpy(login_server_db, w2);
- printf ("set login_server_db : %s\n",w2);
- }
- }
- fclose_(fp);
-
- printf ("success reading interserver configuration\n");
-
- return 0;
+int inter_config_read (const char *cfgName)
+{
+ printf ("start reading interserver configuration: %s\n", cfgName);
+ int i;
+ char line[1024], w1[1024], w2[1024];
+ FILE *fp;
+
+ fp = fopen_ (cfgName, "r");
+ if (fp == NULL)
+ {
+ printf ("file not found: %s\n", cfgName);
+ return 1;
+ }
+ while (fgets (line, 1020, fp))
+ {
+ i = sscanf (line, "%[^:]: %[^\r\n]", w1, w2);
+ if (i != 2)
+ continue;
+
+ if (strcmpi (w1, "char_server_ip") == 0)
+ {
+ strcpy (char_server_ip, w2);
+ printf ("set char_server_ip : %s\n", w2);
+ }
+ else if (strcmpi (w1, "char_server_port") == 0)
+ {
+ char_server_port = atoi (w2);
+ printf ("set char_server_port : %s\n", w2);
+ }
+ else if (strcmpi (w1, "char_server_id") == 0)
+ {
+ strcpy (char_server_id, w2);
+ printf ("set char_server_id : %s\n", w2);
+ }
+ else if (strcmpi (w1, "char_server_pw") == 0)
+ {
+ strcpy (char_server_pw, w2);
+ printf ("set char_server_pw : %s\n", w2);
+ }
+ else if (strcmpi (w1, "char_server_db") == 0)
+ {
+ strcpy (char_server_db, w2);
+ printf ("set char_server_db : %s\n", w2);
+ }
+ //Logins information to be read from the inter_athena.conf
+ //for character deletion (checks email in the loginDB)
+
+ else if (strcmpi (w1, "login_server_ip") == 0)
+ {
+ strcpy (login_server_ip, w2);
+ printf ("set login_server_ip : %s\n", w2);
+ }
+ else if (strcmpi (w1, "login_server_port") == 0)
+ {
+ login_server_port = atoi (w2);
+ printf ("set login_server_port : %s\n", w2);
+ }
+ else if (strcmpi (w1, "login_server_id") == 0)
+ {
+ strcpy (login_server_id, w2);
+ printf ("set login_server_id : %s\n", w2);
+ }
+ else if (strcmpi (w1, "login_server_pw") == 0)
+ {
+ strcpy (login_server_pw, w2);
+ printf ("set login_server_pw : %s\n", w2);
+ }
+ else if (strcmpi (w1, "login_server_db") == 0)
+ {
+ strcpy (login_server_db, w2);
+ printf ("set login_server_db : %s\n", w2);
+ }
+ else if (strcmpi (w1, "party_share_level") == 0)
+ {
+ party_share_level = atoi (w2);
+ if (party_share_level < 0)
+ party_share_level = 0;
+ }
+ else if (strcmpi (w1, "import") == 0)
+ {
+ inter_config_read (w2);
+ }
+ else if (strcmpi (w1, "login_server_db") == 0)
+ {
+ strcpy (login_server_db, w2);
+ printf ("set login_server_db : %s\n", w2);
+ }
+ }
+ fclose_ (fp);
+
+ printf ("success reading interserver configuration\n");
+
+ return 0;
}
// Save interlog into sql
-int inter_log(char *fmt,...)
+int inter_log (char *fmt, ...)
{
- char str[255];
- char temp_str[255];
- va_list ap;
- va_start(ap,fmt);
-
- vsprintf(str,fmt,ap);
- sprintf(tmp_sql,"INSERT INTO `%s` (`time`, `log`) VALUES (NOW(), '%s')",interlog_db, jstrescapecpy(temp_str,str));
- if(mysql_query(&mysql_handle, tmp_sql) ) {
- printf("DB server Error (insert `interlog`)- %s\n", mysql_error(&mysql_handle) );
- }
-
- va_end(ap);
- return 0;
+ char str[255];
+ char temp_str[255];
+ va_list ap;
+ va_start (ap, fmt);
+
+ vsprintf (str, fmt, ap);
+ sprintf (tmp_sql,
+ "INSERT INTO `%s` (`time`, `log`) VALUES (NOW(), '%s')",
+ interlog_db, jstrescapecpy (temp_str, str));
+ if (mysql_query (&mysql_handle, tmp_sql))
+ {
+ printf ("DB server Error (insert `interlog`)- %s\n",
+ mysql_error (&mysql_handle));
+ }
+
+ va_end (ap);
+ return 0;
}
-
// initialize
-int inter_init(const char *file)
+int inter_init (const char *file)
{
- //int i;
-
- printf ("interserver initialize...\n");
- inter_config_read(file);
-
- //DB connection initialized
- mysql_init(&mysql_handle);
- printf("Connect Character DB server.... (Character Server)\n");
- if(!mysql_real_connect(&mysql_handle, char_server_ip, char_server_id, char_server_pw,
- char_server_db ,char_server_port, (char *)NULL, 0)) {
- //pointer check
- printf("%s\n",mysql_error(&mysql_handle));
- exit(1);
- }
- else {
- printf ("Connect Success! (Character Server)\n");
- }
-
- mysql_init(&lmysql_handle);
- printf("Connect Character DB server.... (login server)\n");
- if(!mysql_real_connect(&lmysql_handle, login_server_ip, login_server_id, login_server_pw,
- login_server_db ,login_server_port, (char *)NULL, 0)) {
- //pointer check
- printf("%s\n",mysql_error(&lmysql_handle));
- exit(1);
- }else {
- printf ("Connect Success! (Login Server)");
- }
- wis_db = numdb_init();
- inter_guild_sql_init();
- inter_storage_sql_init();
- inter_party_sql_init();
-
- inter_pet_sql_init();
- inter_accreg_sql_init();
-
- //printf ("interserver timer initializing : %d sec...\n",autosave_interval);
- //i=add_timer_interval(gettick()+autosave_interval,inter_save_timer,0,0,autosave_interval);
-
- return 0;
+ //int i;
+
+ printf ("interserver initialize...\n");
+ inter_config_read (file);
+
+ //DB connection initialized
+ mysql_init (&mysql_handle);
+ printf ("Connect Character DB server.... (Character Server)\n");
+ if (!mysql_real_connect
+ (&mysql_handle, char_server_ip, char_server_id, char_server_pw,
+ char_server_db, char_server_port, (char *) NULL, 0))
+ {
+ //pointer check
+ printf ("%s\n", mysql_error (&mysql_handle));
+ exit (1);
+ }
+ else
+ {
+ printf ("Connect Success! (Character Server)\n");
+ }
+
+ mysql_init (&lmysql_handle);
+ printf ("Connect Character DB server.... (login server)\n");
+ if (!mysql_real_connect
+ (&lmysql_handle, login_server_ip, login_server_id, login_server_pw,
+ login_server_db, login_server_port, (char *) NULL, 0))
+ {
+ //pointer check
+ printf ("%s\n", mysql_error (&lmysql_handle));
+ exit (1);
+ }
+ else
+ {
+ printf ("Connect Success! (Login Server)");
+ }
+ wis_db = numdb_init ();
+ inter_guild_sql_init ();
+ inter_storage_sql_init ();
+ inter_party_sql_init ();
+
+ inter_pet_sql_init ();
+ inter_accreg_sql_init ();
+
+ //printf ("interserver timer initializing : %d sec...\n",autosave_interval);
+ //i=add_timer_interval(gettick()+autosave_interval,inter_save_timer,0,0,autosave_interval);
+
+ return 0;
}
-int inter_mapif_init(int fd) {
- inter_guild_mapif_init(fd);
+int inter_mapif_init (int fd)
+{
+ inter_guild_mapif_init (fd);
- return 0;
+ return 0;
}
-
//--------------------------------------------------------
// GM message sending
-int mapif_GMmessage(unsigned char *mes, int len) {
- unsigned char buf[len];
-
- WBUFW(buf, 0) = 0x3800;
- WBUFW(buf, 2) = len;
- memcpy(WBUFP(buf, 4), mes, len-4);
- mapif_sendall(buf, len);
- printf("\033[1;34m inter server: GM[len:%d] - '%s' \033[0m\n", len, mes);
- return 0;
+int mapif_GMmessage (unsigned char *mes, int len)
+{
+ unsigned char buf[len];
+
+ WBUFW (buf, 0) = 0x3800;
+ WBUFW (buf, 2) = len;
+ memcpy (WBUFP (buf, 4), mes, len - 4);
+ mapif_sendall (buf, len);
+ printf ("\033[1;34m inter server: GM[len:%d] - '%s' \033[0m\n", len, mes);
+ return 0;
}
// Wis sending
-int mapif_wis_message(struct WisData *wd) {
- unsigned char buf[56 + wd->len];
-
- WBUFW(buf, 0) = 0x3801;
- WBUFW(buf, 2) = 56 +wd->len;
- WBUFL(buf, 4) = wd->id;
- memcpy(WBUFP(buf, 8), wd->src, 24);
- memcpy(WBUFP(buf,32), wd->dst, 24);
- memcpy(WBUFP(buf,56), wd->msg, wd->len);
- wd->count = mapif_sendall(buf,WBUFW(buf,2));
-
- return 0;
+int mapif_wis_message (struct WisData *wd)
+{
+ unsigned char buf[56 + wd->len];
+
+ WBUFW (buf, 0) = 0x3801;
+ WBUFW (buf, 2) = 56 + wd->len;
+ WBUFL (buf, 4) = wd->id;
+ memcpy (WBUFP (buf, 8), wd->src, 24);
+ memcpy (WBUFP (buf, 32), wd->dst, 24);
+ memcpy (WBUFP (buf, 56), wd->msg, wd->len);
+ wd->count = mapif_sendall (buf, WBUFW (buf, 2));
+
+ return 0;
}
+
// Wis sending result
-int mapif_wis_end(struct WisData *wd,int flag)
+int mapif_wis_end (struct WisData *wd, int flag)
{
- unsigned char buf[27];
-
- WBUFW(buf, 0)=0x3802;
- memcpy(WBUFP(buf, 2),wd->src,24);
- WBUFB(buf,26)=flag;
- mapif_send(wd->fd,buf,27);
-// printf("inter server wis_end %d\n",flag);
- return 0;
+ unsigned char buf[27];
+
+ WBUFW (buf, 0) = 0x3802;
+ memcpy (WBUFP (buf, 2), wd->src, 24);
+ WBUFB (buf, 26) = flag;
+ mapif_send (wd->fd, buf, 27);
+// printf("inter server wis_end %d\n",flag);
+ return 0;
}
-int mapif_account_reg(int fd,unsigned char *src)
+int mapif_account_reg (int fd, unsigned char *src)
{
- unsigned char buf[WBUFW(src,2)];
- memcpy(WBUFP(buf,0),src,WBUFW(src,2));
- WBUFW(buf, 0)=0x3804;
- mapif_sendallwos(fd,buf,WBUFW(buf,2));
- return 0;
+ unsigned char buf[WBUFW (src, 2)];
+ memcpy (WBUFP (buf, 0), src, WBUFW (src, 2));
+ WBUFW (buf, 0) = 0x3804;
+ mapif_sendallwos (fd, buf, WBUFW (buf, 2));
+ return 0;
}
// Send the requested account_reg
-int mapif_account_reg_reply(int fd,int account_id)
+int mapif_account_reg_reply (int fd, int account_id)
{
- struct accreg *reg=accreg_pt;
- inter_accreg_fromsql(account_id,reg);
-
- WFIFOW(fd,0)=0x3804;
- WFIFOL(fd,4)=account_id;
- if(reg->reg_num==0){
- WFIFOW(fd,2)=8;
- }else{
- int j,p;
- for(j=0,p=8;j<reg->reg_num;j++,p+=36){
- memcpy(WFIFOP(fd,p),reg->reg[j].str,32);
- WFIFOL(fd,p+32)=reg->reg[j].value;
- }
- WFIFOW(fd,2)=p;
- }
- WFIFOSET(fd,WFIFOW(fd,2));
- return 0;
+ struct accreg *reg = accreg_pt;
+ inter_accreg_fromsql (account_id, reg);
+
+ WFIFOW (fd, 0) = 0x3804;
+ WFIFOL (fd, 4) = account_id;
+ if (reg->reg_num == 0)
+ {
+ WFIFOW (fd, 2) = 8;
+ }
+ else
+ {
+ int j, p;
+ for (j = 0, p = 8; j < reg->reg_num; j++, p += 36)
+ {
+ memcpy (WFIFOP (fd, p), reg->reg[j].str, 32);
+ WFIFOL (fd, p + 32) = reg->reg[j].value;
+ }
+ WFIFOW (fd, 2) = p;
+ }
+ WFIFOSET (fd, WFIFOW (fd, 2));
+ return 0;
}
//--------------------------------------------------------
// Existence check of WISP data
-int check_ttl_wisdata_sub(void *key, void *data, va_list ap) {
- unsigned long tick;
- struct WisData *wd = (struct WisData *)data;
- tick = va_arg(ap, unsigned long);
+int check_ttl_wisdata_sub (void *key, void *data, va_list ap)
+{
+ unsigned long tick;
+ struct WisData *wd = (struct WisData *) data;
+ tick = va_arg (ap, unsigned long);
- if (DIFF_TICK(tick, wd->tick) > WISDATA_TTL && wis_delnum < WISDELLIST_MAX)
- wis_dellist[wis_delnum++] = wd->id;
+ if (DIFF_TICK (tick, wd->tick) > WISDATA_TTL
+ && wis_delnum < WISDELLIST_MAX)
+ wis_dellist[wis_delnum++] = wd->id;
- return 0;
+ return 0;
}
-int check_ttl_wisdata() {
- unsigned long tick = gettick();
- int i;
-
- do {
- wis_delnum = 0;
- numdb_foreach(wis_db, check_ttl_wisdata_sub, tick);
- for(i = 0; i < wis_delnum; i++) {
- struct WisData *wd = numdb_search(wis_db, wis_dellist[i]);
- printf("inter: wis data id=%d time out : from %s to %s\n", wd->id, wd->src, wd->dst);
- // removed. not send information after a timeout. Just no answer for the player
- //mapif_wis_end(wd, 1); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
- numdb_erase(wis_db, wd->id);
- free(wd);
- }
- } while(wis_delnum >= WISDELLIST_MAX);
-
- return 0;
+int check_ttl_wisdata ()
+{
+ unsigned long tick = gettick ();
+ int i;
+
+ do
+ {
+ wis_delnum = 0;
+ numdb_foreach (wis_db, check_ttl_wisdata_sub, tick);
+ for (i = 0; i < wis_delnum; i++)
+ {
+ struct WisData *wd = numdb_search (wis_db, wis_dellist[i]);
+ printf ("inter: wis data id=%d time out : from %s to %s\n",
+ wd->id, wd->src, wd->dst);
+ // removed. not send information after a timeout. Just no answer for the player
+ //mapif_wis_end(wd, 1); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
+ numdb_erase (wis_db, wd->id);
+ free (wd);
+ }
+ }
+ while (wis_delnum >= WISDELLIST_MAX);
+
+ return 0;
}
//--------------------------------------------------------
// GM message sending
-int mapif_parse_GMmessage(int fd)
+int mapif_parse_GMmessage (int fd)
{
- mapif_GMmessage(RFIFOP(fd, 4), RFIFOW(fd, 2));
- return 0;
+ mapif_GMmessage (RFIFOP (fd, 4), RFIFOW (fd, 2));
+ return 0;
}
-
// Wisp/page request to send
-int mapif_parse_WisRequest(int fd) {
- struct WisData* wd;
- static int wisid = 0;
-
- if (RFIFOW(fd,2)-52 >= sizeof(wd->msg)) {
- printf("inter: Wis message size too long.\n");
- return 0;
- } else if (RFIFOW(fd,2)-52 <= 0) { // normaly, impossible, but who knows...
- printf("inter: Wis message doesn't exist.\n");
- return 0;
- }
- sprintf (tmp_sql, "SELECT `name` FROM `%s` WHERE `char_id`='%d'",char_db, (int) RFIFOP(fd,28));
- if(mysql_query(&mysql_handle, tmp_sql) ) {
- printf("DB server Error - %s\n", mysql_error(&mysql_handle) );
- }
- sql_res = mysql_store_result(&mysql_handle);
-
- // search if character exists before to ask all map-servers
- if (!(sql_row = mysql_fetch_row(sql_res))) {
- unsigned char buf[27];
- WBUFW(buf, 0) = 0x3802;
- memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
- WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
- mapif_send(fd, buf, 27);
- // Character exists. So, ask all map-servers
- } else {
- // to be sure of the correct name, rewrite it
- memset(RFIFOP(fd,28), 0, 24);
- strncpy(RFIFOP(fd,28), sql_row[0], 24);
- // if source is destination, don't ask other servers.
- if (strcmp(RFIFOP(fd,4),RFIFOP(fd,28)) == 0) {
- unsigned char buf[27];
- WBUFW(buf, 0) = 0x3802;
- memcpy(WBUFP(buf, 2), RFIFOP(fd, 4), 24);
- WBUFB(buf,26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
- mapif_send(fd, buf, 27);
- } else {
-
- CREATE(wd, struct WisData, 1);
-
- // Whether the failure of previous wisp/page transmission (timeout)
- check_ttl_wisdata();
-
- wd->id = ++wisid;
- wd->fd = fd;
- wd->len= RFIFOW(fd,2)-52;
- memcpy(wd->src, RFIFOP(fd, 4), 24);
- memcpy(wd->dst, RFIFOP(fd,28), 24);
- memcpy(wd->msg, RFIFOP(fd,52), wd->len);
- wd->tick = gettick();
- numdb_insert(wis_db, wd->id, wd);
- mapif_wis_message(wd);
- }
- }
-
- return 0;
+int mapif_parse_WisRequest (int fd)
+{
+ struct WisData *wd;
+ static int wisid = 0;
+
+ if (RFIFOW (fd, 2) - 52 >= sizeof (wd->msg))
+ {
+ printf ("inter: Wis message size too long.\n");
+ return 0;
+ }
+ else if (RFIFOW (fd, 2) - 52 <= 0)
+ { // normaly, impossible, but who knows...
+ printf ("inter: Wis message doesn't exist.\n");
+ return 0;
+ }
+ sprintf (tmp_sql, "SELECT `name` FROM `%s` WHERE `char_id`='%d'", char_db,
+ (int) RFIFOP (fd, 28));
+ if (mysql_query (&mysql_handle, tmp_sql))
+ {
+ printf ("DB server Error - %s\n", mysql_error (&mysql_handle));
+ }
+ sql_res = mysql_store_result (&mysql_handle);
+
+ // search if character exists before to ask all map-servers
+ if (!(sql_row = mysql_fetch_row (sql_res)))
+ {
+ unsigned char buf[27];
+ WBUFW (buf, 0) = 0x3802;
+ memcpy (WBUFP (buf, 2), RFIFOP (fd, 4), 24);
+ WBUFB (buf, 26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
+ mapif_send (fd, buf, 27);
+ // Character exists. So, ask all map-servers
+ }
+ else
+ {
+ // to be sure of the correct name, rewrite it
+ memset (RFIFOP (fd, 28), 0, 24);
+ strncpy (RFIFOP (fd, 28), sql_row[0], 24);
+ // if source is destination, don't ask other servers.
+ if (strcmp (RFIFOP (fd, 4), RFIFOP (fd, 28)) == 0)
+ {
+ unsigned char buf[27];
+ WBUFW (buf, 0) = 0x3802;
+ memcpy (WBUFP (buf, 2), RFIFOP (fd, 4), 24);
+ WBUFB (buf, 26) = 1; // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
+ mapif_send (fd, buf, 27);
+ }
+ else
+ {
+
+ CREATE (wd, struct WisData, 1);
+
+ // Whether the failure of previous wisp/page transmission (timeout)
+ check_ttl_wisdata ();
+
+ wd->id = ++wisid;
+ wd->fd = fd;
+ wd->len = RFIFOW (fd, 2) - 52;
+ memcpy (wd->src, RFIFOP (fd, 4), 24);
+ memcpy (wd->dst, RFIFOP (fd, 28), 24);
+ memcpy (wd->msg, RFIFOP (fd, 52), wd->len);
+ wd->tick = gettick ();
+ numdb_insert (wis_db, wd->id, wd);
+ mapif_wis_message (wd);
+ }
+ }
+
+ return 0;
}
-
// Wisp/page transmission result
-int mapif_parse_WisReply(int fd) {
- int id = RFIFOL(fd,2), flag = RFIFOB(fd,6);
- struct WisData *wd = numdb_search(wis_db, id);
+int mapif_parse_WisReply (int fd)
+{
+ int id = RFIFOL (fd, 2), flag = RFIFOB (fd, 6);
+ struct WisData *wd = numdb_search (wis_db, id);
- if (wd == NULL)
- return 0; // This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
+ if (wd == NULL)
+ return 0; // This wisp was probably suppress before, because it was timeout of because of target was found on another map-server
- if ((--wd->count) <= 0 || flag != 1) {
- mapif_wis_end(wd, flag); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
- numdb_erase(wis_db, id);
- free(wd);
- }
+ if ((--wd->count) <= 0 || flag != 1)
+ {
+ mapif_wis_end (wd, flag); // flag: 0: success to send wisper, 1: target character is not loged in?, 2: ignored by target
+ numdb_erase (wis_db, id);
+ free (wd);
+ }
- return 0;
+ return 0;
}
-
// Save account_reg into sql (type=2)
-int mapif_parse_AccReg(int fd)
+int mapif_parse_AccReg (int fd)
{
- int j,p;
- struct accreg *reg=accreg_pt;
- int account_id = RFIFOL(fd,4);
- memset(accreg_pt,0,sizeof(struct accreg));
-
- for(j=0,p=8;j<ACCOUNT_REG_NUM && p<RFIFOW(fd,2);j++,p+=36){
- memcpy(reg->reg[j].str,RFIFOP(fd,p),32);
- reg->reg[j].value=RFIFOL(fd,p+32);
- }
- reg->reg_num=j;
-
- inter_accreg_tosql(account_id,reg);
- mapif_account_reg(fd,RFIFOP(fd,0)); // Send confirm message to map
- return 0;
+ int j, p;
+ struct accreg *reg = accreg_pt;
+ int account_id = RFIFOL (fd, 4);
+ memset (accreg_pt, 0, sizeof (struct accreg));
+
+ for (j = 0, p = 8; j < ACCOUNT_REG_NUM && p < RFIFOW (fd, 2);
+ j++, p += 36)
+ {
+ memcpy (reg->reg[j].str, RFIFOP (fd, p), 32);
+ reg->reg[j].value = RFIFOL (fd, p + 32);
+ }
+ reg->reg_num = j;
+
+ inter_accreg_tosql (account_id, reg);
+ mapif_account_reg (fd, RFIFOP (fd, 0)); // Send confirm message to map
+ return 0;
}
// Request the value of account_reg
-int mapif_parse_AccRegRequest(int fd)
+int mapif_parse_AccRegRequest (int fd)
{
-// printf("mapif: accreg request\n");
- return mapif_account_reg_reply(fd,RFIFOL(fd,2));
+// printf("mapif: accreg request\n");
+ return mapif_account_reg_reply (fd, RFIFOL (fd, 2));
}
-
-
//--------------------------------------------------------
-int inter_parse_frommap(int fd)
+int inter_parse_frommap (int fd)
{
- int cmd=RFIFOW(fd,0);
- int len=0;
-
- // inter鯖管轄かを調べる
- if(cmd<0x3000 || cmd>=0x3000+( sizeof(inter_recv_packet_length)/
- sizeof(inter_recv_packet_length[0]) ) )
- return 0;
-
- // パケット長を調べる
- if( (len=inter_check_length(fd,inter_recv_packet_length[cmd-0x3000]))==0 )
- return 2;
-
- switch(cmd){
- case 0x3000: mapif_parse_GMmessage(fd); break;
- case 0x3001: mapif_parse_WisRequest(fd); break;
- case 0x3002: mapif_parse_WisReply(fd); break;
- case 0x3004: mapif_parse_AccReg(fd); break;
- case 0x3005: mapif_parse_AccRegRequest(fd); break;
- default:
- if( inter_party_parse_frommap(fd) )
- break;
- if( inter_guild_parse_frommap(fd) )
- break;
- if( inter_storage_parse_frommap(fd) )
- break;
- if( inter_pet_parse_frommap(fd) )
- break;
- return 0;
- }
- RFIFOSKIP(fd, len );
- return 1;
+ int cmd = RFIFOW (fd, 0);
+ int len = 0;
+
+ // inter鯖管轄かを調べる
+ if (cmd < 0x3000 || cmd >= 0x3000 + (sizeof (inter_recv_packet_length) /
+ sizeof (inter_recv_packet_length
+ [0])))
+ return 0;
+
+ // パケット長を調べる
+ if ((len =
+ inter_check_length (fd,
+ inter_recv_packet_length[cmd - 0x3000])) == 0)
+ return 2;
+
+ switch (cmd)
+ {
+ case 0x3000:
+ mapif_parse_GMmessage (fd);
+ break;
+ case 0x3001:
+ mapif_parse_WisRequest (fd);
+ break;
+ case 0x3002:
+ mapif_parse_WisReply (fd);
+ break;
+ case 0x3004:
+ mapif_parse_AccReg (fd);
+ break;
+ case 0x3005:
+ mapif_parse_AccRegRequest (fd);
+ break;
+ default:
+ if (inter_party_parse_frommap (fd))
+ break;
+ if (inter_guild_parse_frommap (fd))
+ break;
+ if (inter_storage_parse_frommap (fd))
+ break;
+ if (inter_pet_parse_frommap (fd))
+ break;
+ return 0;
+ }
+ RFIFOSKIP (fd, len);
+ return 1;
}
// RFIFO check
-int inter_check_length(int fd, int length)
+int inter_check_length (int fd, int length)
{
- if(length==-1){ // v-len packet
- if(RFIFOREST(fd)<4) // packet not yet
- return 0;
- length = RFIFOW(fd, 2);
- }
-
- if(RFIFOREST(fd)<length) // packet not yet
- return 0;
-
- return length;
+ if (length == -1)
+ { // v-len packet
+ if (RFIFOREST (fd) < 4) // packet not yet
+ return 0;
+ length = RFIFOW (fd, 2);
+ }
+
+ if (RFIFOREST (fd) < length) // packet not yet
+ return 0;
+
+ return length;
}