Browse Source

- Tested and fixed resolve_hostbyname.
- Applied said function around most of the code where needed. Removed includes for the OS/network system pretty much from every file (our socket.c file should handle this)
- Added clif_getip_long, which returns the ip as a long. Prevents having to include the files to define the int_addr structure in all files that include clif.h
- Made the GM mute request bypass the manner_system setting.


git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@7285 54d463be-8e91-2dee-dedb-b68131a5f0ec

skotlex 19 years ago
parent
commit
4d27716bf1
16 changed files with 165 additions and 346 deletions
  1. 4 0
      Changelog-Trunk.txt
  2. 36 55
      src/char/char.c
  3. 38 57
      src/char_sql/char.c
  4. 5 2
      src/common/socket.c
  5. 5 1
      src/common/socket.h
  6. 8 30
      src/login/login.c
  7. 8 38
      src/login_sql/login.c
  8. 11 13
      src/map/chrif.c
  9. 1 1
      src/map/chrif.h
  10. 31 40
      src/map/clif.c
  11. 2 11
      src/map/clif.h
  12. 0 12
      src/map/intif.c
  13. 2 30
      src/map/irc.c
  14. 14 45
      src/map/map.c
  15. 0 1
      src/map/mercenary.c
  16. 0 10
      src/map/npc_chat.c

+ 4 - 0
Changelog-Trunk.txt

@@ -4,6 +4,10 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 
 2006/06/21
 2006/06/21
+	* Tested and fixed resolve_hostbyname. Applied said function around most of
+	  the code where needed. Removed includes for the OS/network system pretty
+	  much from every file (our socket.c file should handle this) [Skotlex]
+	* Made the GM mute request bypass the manner_system setting. [Skotlex]
 	* Applied use of parse_hostbyname() in chrif.c to fix compilation errors.
 	* Applied use of parse_hostbyname() in chrif.c to fix compilation errors.
 	  [Skotlex]
 	  [Skotlex]
 	* status_percent_change will now account for when the target's max hp/sp is
 	* status_percent_change will now account for when the target's max hp/sp is

+ 36 - 55
src/char/char.c

@@ -2,20 +2,13 @@
 // For more information, see LICENCE in the main folder
 // For more information, see LICENCE in the main folder
 
 
 #include <sys/types.h>
 #include <sys/types.h>
-#include <stdio.h>
-#include <stdlib.h>
 
 
 #ifdef _WIN32
 #ifdef _WIN32
 #include <winsock.h>
 #include <winsock.h>
-typedef long in_addr_t;
 #else
 #else
 #include <sys/socket.h>
 #include <sys/socket.h>
-#include <netinet/in.h>
+#include <netinet/in.h> 
 #include <arpa/inet.h>
 #include <arpa/inet.h>
-#include <netdb.h>
-#include <sys/ioctl.h>
-#include <sys/time.h>
-#include <unistd.h>
 #endif
 #endif
 
 
 #include <time.h>
 #include <time.h>
@@ -23,6 +16,8 @@ typedef long in_addr_t;
 #include <fcntl.h>
 #include <fcntl.h>
 #include <string.h>
 #include <string.h>
 #include <stdarg.h>
 #include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
 #include <limits.h>
 #include <limits.h>
 
 
 #include "../common/strlib.h"
 #include "../common/strlib.h"
@@ -54,15 +49,13 @@ char userid[24];
 char passwd[24];
 char passwd[24];
 char server_name[20];
 char server_name[20];
 char wisp_server_name[NAME_LENGTH] = "Server";
 char wisp_server_name[NAME_LENGTH] = "Server";
-int login_ip_set_ = 0;
 char login_ip_str[16];
 char login_ip_str[16];
 in_addr_t login_ip;
 in_addr_t login_ip;
 int login_port = 6900;
 int login_port = 6900;
-int char_ip_set_ = 0;
 char char_ip_str[16];
 char char_ip_str[16];
-int bind_ip_set_ = 0;
-char bind_ip_str[16];
 in_addr_t char_ip;
 in_addr_t char_ip;
+char bind_ip_str[16];
+in_addr_t bind_ip;
 int char_port = 6121;
 int char_port = 6121;
 int char_maintenance;
 int char_maintenance;
 int char_new;
 int char_new;
@@ -1798,7 +1791,6 @@ static int char_delete(struct mmo_charstatus *cs) {
 int parse_tologin(int fd) {
 int parse_tologin(int fd) {
 	int i;
 	int i;
 	struct char_session_data *sd;
 	struct char_session_data *sd;
-	struct hostent *h;
 	RFIFOHEAD(fd);
 	RFIFOHEAD(fd);
 
 
 	// only login-server can have an access to here.
 	// only login-server can have an access to here.
@@ -2296,14 +2288,16 @@ int parse_tologin(int fd) {
 			}
 			}
 			break;
 			break;
 		case 0x2735:
 		case 0x2735:
+		{
+			unsigned char ip[4];
 			ShowInfo("IP Sync in progress...\n");
 			ShowInfo("IP Sync in progress...\n");
-			h = char_server_dns?gethostbyname(char_server_dns):NULL;
-			if(h){
+			if (char_server_dns && resolve_hostbyname(char_server_dns, ip, NULL))
+			{
 				WFIFOW(fd,0) = 0x2736;
 				WFIFOW(fd,0) = 0x2736;
-				WFIFOB(fd,2) = h->h_addr[0];
-				WFIFOB(fd,3) = h->h_addr[1];
-				WFIFOB(fd,4) = h->h_addr[2];
-				WFIFOB(fd,5) = h->h_addr[3];
+				WFIFOB(fd,2) = ip[0];
+				WFIFOB(fd,3) = ip[1];
+				WFIFOB(fd,4) = ip[2];
+				WFIFOB(fd,5) = ip[3];
 				WFIFOSET(fd, 6);
 				WFIFOSET(fd, 6);
 			}
 			}
 			for(i = 0; i < MAX_MAP_SERVERS; i++){
 			for(i = 0; i < MAX_MAP_SERVERS; i++){
@@ -2314,6 +2308,7 @@ int parse_tologin(int fd) {
 			}
 			}
 			RFIFOSKIP(fd,2);
 			RFIFOSKIP(fd,2);
 			break;
 			break;
+		}
 		default:
 		default:
 			ShowWarning("Unknown packet 0x%04x received from login-server, disconnecting.\n", RFIFOW(fd,0));
 			ShowWarning("Unknown packet 0x%04x received from login-server, disconnecting.\n", RFIFOW(fd,0));
 			session[fd]->eof = 1;
 			session[fd]->eof = 1;
@@ -3954,7 +3949,6 @@ int char_lan_config_read(const char *lancfgName) {
 }
 }
 
 
 int char_config_read(const char *cfgName) {
 int char_config_read(const char *cfgName) {
-	struct hostent *h = NULL;
 	char line[1024], w1[1024], w2[1024];
 	char line[1024], w1[1024], w2[1024];
 	FILE *fp = fopen(cfgName, "r");
 	FILE *fp = fopen(cfgName, "r");
 
 
@@ -3994,35 +3988,24 @@ int char_config_read(const char *cfgName) {
 				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
 				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
 			}
 			}
 		} else if (strcmpi(w1, "login_ip") == 0) {
 		} else if (strcmpi(w1, "login_ip") == 0) {
-			login_ip_set_ = 1;
-			h = gethostbyname(w2);
-			if(char_server_dns)
-				aFree(char_server_dns);
-			char_server_dns = (char *)aCalloc(strlen(w2)+1, 1);
-			strcpy(char_server_dns, w2);
-			if (h != NULL) {
-				ShowStatus("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(login_ip_str, w2, 16);
+			login_ip = resolve_hostbyname(w2, NULL, login_ip_str);
+			if (login_ip) {
+				if(char_server_dns)
+					aFree(char_server_dns);
+				char_server_dns = (char *)aCalloc(strlen(w2)+1, 1);
+				strcpy(char_server_dns, w2);
+				ShowStatus("Login server IP address : %s -> %s\n", w2, login_ip_str);
+			}
 		} else if (strcmpi(w1, "login_port") == 0) {
 		} else if (strcmpi(w1, "login_port") == 0) {
 			login_port = atoi(w2);
 			login_port = atoi(w2);
 		} else if (strcmpi(w1, "char_ip") == 0) {
 		} else if (strcmpi(w1, "char_ip") == 0) {
-			char_ip_set_ = 1;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				ShowStatus("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(char_ip_str, w2, 16);
+			char_ip = resolve_hostbyname(w2, NULL, char_ip_str);
+			if (char_ip)
+				ShowStatus("Character server IP address : %s -> %s\n", w2, char_ip_str);
 		} else if (strcmpi(w1, "bind_ip") == 0) {
 		} else if (strcmpi(w1, "bind_ip") == 0) {
-			bind_ip_set_ = 1;
-			h = gethostbyname(w2);
-			if (h != NULL) {
-				ShowStatus("Character server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(bind_ip_str, w2, 16);
+			bind_ip = resolve_hostbyname(w2, NULL, bind_ip_str);
+			if (bind_ip)	
+				ShowStatus("Character server binding IP address : %s -> %s\n", w2, bind_ip_str);
 		} else if (strcmpi(w1, "char_port") == 0) {
 		} else if (strcmpi(w1, "char_port") == 0) {
 			char_port = atoi(w2);
 			char_port = atoi(w2);
 		} else if (strcmpi(w1, "char_maintenance") == 0) {
 		} else if (strcmpi(w1, "char_maintenance") == 0) {
@@ -4225,7 +4208,7 @@ int do_init(int argc, char **argv) {
 	// moved behind char_config_read in case we changed the filename [celest]
 	// moved behind char_config_read in case we changed the filename [celest]
 	char_log("The char-server starting..." RETCODE);
 	char_log("The char-server starting..." RETCODE);
 
 
-	if ((naddr_ != 0) && (login_ip_set_ == 0 || char_ip_set_ == 0)) {
+	if ((naddr_ != 0) && (!login_ip || !char_ip)) {
 		// The char server should know what IP address it is running on
 		// The char server should know what IP address it is running on
 		 //   - MouseJstr
 		 //   - MouseJstr
 		int localaddr = ntohl(addr_[0]);
 		int localaddr = ntohl(addr_[0]);
@@ -4236,18 +4219,19 @@ int do_init(int argc, char **argv) {
 			ShowStatus("Multiple interfaces detected..  using %s as our IP address\n", buf);
 			ShowStatus("Multiple interfaces detected..  using %s as our IP address\n", buf);
 		else
 		else
 			ShowStatus("Defaulting to %s as our IP address\n", buf);
 			ShowStatus("Defaulting to %s as our IP address\n", buf);
-		if (login_ip_set_ == 0)
+		if (!login_ip) {
 			strcpy(login_ip_str, buf);
 			strcpy(login_ip_str, buf);
-		if (char_ip_set_ == 0)
+			login_ip = inet_addr(login_ip_str);
+		}
+		if (!char_ip) {
 			strcpy(char_ip_str, buf);
 			strcpy(char_ip_str, buf);
+			char_ip = inet_addr(char_ip_str);
+		}
 
 
 		if (ptr[0] == 192 && ptr[1] == 168)
 		if (ptr[0] == 192 && ptr[1] == 168)
 			ShowWarning("Firewall detected.. edit subnet_athena.conf and char_athena.conf\n");
 			ShowWarning("Firewall detected.. edit subnet_athena.conf and char_athena.conf\n");
 	}
 	}
 
 
-	login_ip = inet_addr(login_ip_str);
-	char_ip = inet_addr(char_ip_str);
-
 	for(i = 0; i < MAX_MAP_SERVERS; i++) {
 	for(i = 0; i < MAX_MAP_SERVERS; i++) {
 		memset(&server[i], 0, sizeof(struct mmo_map_server));
 		memset(&server[i], 0, sizeof(struct mmo_map_server));
 		server_fd[i] = -1;
 		server_fd[i] = -1;
@@ -4266,10 +4250,7 @@ int do_init(int argc, char **argv) {
 
 
 	set_defaultparse(parse_char);
 	set_defaultparse(parse_char);
 
 
-	if (bind_ip_set_)
-		char_fd = make_listen_bind(inet_addr(bind_ip_str),char_port);
-	else
-		char_fd = make_listen_bind(INADDR_ANY,char_port);
+	char_fd = make_listen_bind(bind_ip?bind_ip:INADDR_ANY,char_port);
 
 
 	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
 	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
 	add_timer_func_list(send_users_tologin, "send_users_tologin");
 	add_timer_func_list(send_users_tologin, "send_users_tologin");

+ 38 - 57
src/char_sql/char.c

@@ -8,16 +8,10 @@
 
 
 #ifdef _WIN32
 #ifdef _WIN32
 #include <winsock.h>
 #include <winsock.h>
-typedef long in_addr_t;
-//#pragma lib <libmysql.lib> // Not required [Lance]
 #else
 #else
 #include <sys/socket.h>
 #include <sys/socket.h>
 #include <netinet/in.h> 
 #include <netinet/in.h> 
-#include <sys/time.h>
-#include <sys/ioctl.h>
 #include <arpa/inet.h>
 #include <arpa/inet.h>
-#include <netdb.h>
-#include <unistd.h>
 #endif
 #endif
 
 
 #include <time.h>
 #include <time.h>
@@ -81,15 +75,13 @@ char userid[24];
 char passwd[24];
 char passwd[24];
 char server_name[20];
 char server_name[20];
 char wisp_server_name[NAME_LENGTH] = "Server";
 char wisp_server_name[NAME_LENGTH] = "Server";
-int login_ip_set_ = 0;
 char login_ip_str[128];
 char login_ip_str[128];
-in_addr_t login_ip;
+in_addr_t login_ip = 0;
 int login_port = 6900;
 int login_port = 6900;
-int char_ip_set_ = 0;
 char char_ip_str[128];
 char char_ip_str[128];
-int bind_ip_set_ = 0;
+in_addr_t char_ip = 0;
 char bind_ip_str[128];
 char bind_ip_str[128];
-in_addr_t char_ip;
+in_addr_t bind_ip = 0;
 int char_port = 6121;
 int char_port = 6121;
 int char_maintenance;
 int char_maintenance;
 int char_new;
 int char_new;
@@ -1784,7 +1776,6 @@ int mmo_char_send006b(int fd, struct char_session_data *sd) {
 int parse_tologin(int fd) {
 int parse_tologin(int fd) {
 	int i;
 	int i;
 	struct char_session_data *sd;
 	struct char_session_data *sd;
-	struct hostent *h;
 
 
 	// only login-server can have an access to here.
 	// only login-server can have an access to here.
 	// so, if it isn't the login-server, we disconnect the session.
 	// so, if it isn't the login-server, we disconnect the session.
@@ -2182,15 +2173,17 @@ int parse_tologin(int fd) {
 			break;
 			break;
 
 
 		case 0x2735:
 		case 0x2735:
+		{
+			unsigned char ip_str[4];
 			ShowInfo("IP Sync in progress...\n");
 			ShowInfo("IP Sync in progress...\n");
-			h = char_server_dns?gethostbyname(char_server_dns):NULL;
-			if(h){
+			if (char_server_dns && resolve_hostbyname(char_server_dns, ip_str, NULL))
+			{
 				WFIFOW(fd,0) = 0x2736;
 				WFIFOW(fd,0) = 0x2736;
-				WFIFOB(fd,2) = h->h_addr[0];
-				WFIFOB(fd,3) = h->h_addr[1];
-				WFIFOB(fd,4) = h->h_addr[2];
-				WFIFOB(fd,5) = h->h_addr[3];
-				WFIFOSET(fd, 6);
+				WFIFOB(fd,2) = ip_str[0];
+				WFIFOB(fd,3) = ip_str[1];
+				WFIFOB(fd,4) = ip_str[2];
+				WFIFOB(fd,5) = ip_str[3];
+				WFIFOSET(fd,6);
 			}
 			}
 			for(i = 0; i < MAX_MAP_SERVERS; i++){
 			for(i = 0; i < MAX_MAP_SERVERS; i++){
 				if(server_fd[i] >= 0){
 				if(server_fd[i] >= 0){
@@ -2200,7 +2193,7 @@ int parse_tologin(int fd) {
 			}
 			}
 			RFIFOSKIP(fd,2);
 			RFIFOSKIP(fd,2);
 			break;
 			break;
-
+		}
 		default:
 		default:
 			ShowError("Unknown packet 0x%04x from login server, disconnecting.\n", RFIFOW(fd, 0));
 			ShowError("Unknown packet 0x%04x from login server, disconnecting.\n", RFIFOW(fd, 0));
 			session[fd]->eof = 1;
 			session[fd]->eof = 1;
@@ -4064,7 +4057,6 @@ void sql_config_read(const char *cfgName){ /* Kalaspuff, to get login_db */
 }
 }
 
 
 int char_config_read(const char *cfgName) {
 int char_config_read(const char *cfgName) {
-	struct hostent *h = NULL;
 	char line[1024], w1[1024], w2[1024];
 	char line[1024], w1[1024], w2[1024];
 	FILE *fp;
 	FILE *fp;
 
 
@@ -4104,34 +4096,27 @@ int char_config_read(const char *cfgName) {
 				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
 				wisp_server_name[sizeof(wisp_server_name) - 1] = '\0';
 			}
 			}
 		} else if (strcmpi(w1, "login_ip") == 0) {
 		} else if (strcmpi(w1, "login_ip") == 0) {
-			login_ip_set_ = 1;
-			h = gethostbyname (w2);
-			if(char_server_dns)
-				aFree(char_server_dns);
-			char_server_dns = (char *)aCalloc(strlen(w2)+1, 1);
-			if (h != NULL) {
-				ShowStatus("Login server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(login_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(login_ip_str,w2,16);
+			unsigned char ip_str[4];
+			login_ip = resolve_hostbyname(w2, ip_str, login_ip_str);
+			if (login_ip) {
+				if(char_server_dns)
+					aFree(char_server_dns);
+				char_server_dns = (char *)aCalloc(strlen(w2)+1, 1);
+
+				ShowStatus("Login server IP address : %s -> %s\n", w2, login_ip_str);
+			}
 		} else if (strcmpi(w1, "login_port") == 0) {
 		} else if (strcmpi(w1, "login_port") == 0) {
 			login_port=atoi(w2);
 			login_port=atoi(w2);
 		} else if (strcmpi(w1, "char_ip") == 0) {
 		} else if (strcmpi(w1, "char_ip") == 0) {
-			char_ip_set_ = 1;
-			h = gethostbyname (w2);
-			if(h != NULL) {
-				ShowStatus("Character server IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(char_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(char_ip_str, w2, 16);
+			unsigned char ip_str[4];
+			char_ip = resolve_hostbyname(w2, ip_str, char_ip_str);
+			if (char_ip)
+				ShowStatus("Character server IP address : %s -> %s\n", w2, char_ip_str);
 		} else if (strcmpi(w1, "bind_ip") == 0) {
 		} else if (strcmpi(w1, "bind_ip") == 0) {
-			bind_ip_set_ = 1;
-			h = gethostbyname (w2);
-			if(h != NULL) {
-				ShowStatus("Character server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(bind_ip_str, w2, 16);
+			unsigned char ip_str[4];
+			bind_ip = resolve_hostbyname(w2, ip_str, bind_ip_str);
+			if (bind_ip)
+				ShowStatus("Character server binging IP address : %s -> %s\n", w2, bind_ip_str);
 		} else if (strcmpi(w1, "char_port") == 0) {
 		} else if (strcmpi(w1, "char_port") == 0) {
 			char_port = atoi(w2);
 			char_port = atoi(w2);
 		} else if (strcmpi(w1, "char_maintenance") == 0) {
 		} else if (strcmpi(w1, "char_maintenance") == 0) {
@@ -4293,7 +4278,7 @@ int do_init(int argc, char **argv){
 
 
 //	ShowDebug("set terminate function -> do_final().....\n");
 //	ShowDebug("set terminate function -> do_final().....\n");
 
 
-        if ((naddr_ != 0) && (login_ip_set_ == 0 || char_ip_set_ == 0)) {
+        if ((naddr_ != 0) && (!login_ip || !char_ip)) {
           // The char server should know what IP address it is running on
           // The char server should know what IP address it is running on
           //   - MouseJstr
           //   - MouseJstr
           int localaddr = ntohl(addr_[0]);
           int localaddr = ntohl(addr_[0]);
@@ -4304,24 +4289,20 @@ int do_init(int argc, char **argv){
             ShowStatus("Multiple interfaces detected..  using %s as our IP address\n", buf);
             ShowStatus("Multiple interfaces detected..  using %s as our IP address\n", buf);
           else
           else
             ShowStatus("Defaulting to %s as our IP address\n", buf);
             ShowStatus("Defaulting to %s as our IP address\n", buf);
-          if (login_ip_set_ == 0)
+          if (!login_ip) {
           	strcpy(login_ip_str, buf);
           	strcpy(login_ip_str, buf);
-          if (char_ip_set_ == 0)
+				login_ip = inet_addr(login_ip_str);
+			 }
+          if (!char_ip) {
           	strcpy(char_ip_str, buf);
           	strcpy(char_ip_str, buf);
-
+				char_ip = inet_addr(char_ip_str);
+			 }
           if (ptr[0] == 192 && ptr[1] == 168)
           if (ptr[0] == 192 && ptr[1] == 168)
 		ShowWarning("Firewall detected.. edit subnet_athena.conf and char_athena.conf\n");
 		ShowWarning("Firewall detected.. edit subnet_athena.conf and char_athena.conf\n");
         }
         }
 
 
-	login_ip = inet_addr(login_ip_str);
-	char_ip = inet_addr(char_ip_str);
-
 	ShowInfo("open port %d.....\n",char_port);
 	ShowInfo("open port %d.....\n",char_port);
-	//char_fd = make_listen_port(char_port);
-	if (bind_ip_set_)
-		char_fd = make_listen_bind(inet_addr(bind_ip_str),char_port);
-	else
-		char_fd = make_listen_bind(INADDR_ANY,char_port);
+	char_fd = make_listen_bind(bind_ip?bind_ip:INADDR_ANY,char_port);
 
 
 	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
 	add_timer_func_list(check_connect_login_server, "check_connect_login_server");
 	add_timer_func_list(send_users_tologin, "send_users_tologin");
 	add_timer_func_list(send_users_tologin, "send_users_tologin");

+ 5 - 2
src/common/socket.c

@@ -1392,14 +1392,17 @@ bool session_isActive(int fd)
 	return ( session_isValid(fd) && !session[fd]->eof );
 	return ( session_isValid(fd) && !session[fd]->eof );
 }
 }
 
 
-in_addr_t resolve_hostbyname(char* hostname, char *ip) {
+in_addr_t resolve_hostbyname(char* hostname, unsigned char *ip, char *ip_str) {
 	struct hostent *h = gethostbyname(hostname);
 	struct hostent *h = gethostbyname(hostname);
-	char ip_str[16];
+	unsigned char ip_buf[16];
+	char ip2[4];
 	if (!h) return 0;
 	if (!h) return 0;
+	if (ip == NULL) ip = ip2;
 	ip[0] = (unsigned char) h->h_addr[0];
 	ip[0] = (unsigned char) h->h_addr[0];
 	ip[1]	= (unsigned char) h->h_addr[1];
 	ip[1]	= (unsigned char) h->h_addr[1];
 	ip[2] = (unsigned char) h->h_addr[2];
 	ip[2] = (unsigned char) h->h_addr[2];
 	ip[3] = (unsigned char) h->h_addr[3];
 	ip[3] = (unsigned char) h->h_addr[3];
+	if (ip_str == NULL) ip_str = ip_buf;
 	sprintf(ip_str, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
 	sprintf(ip_str, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
 	return inet_addr(ip_str);
 	return inet_addr(ip_str);
 }
 }

+ 5 - 1
src/common/socket.h

@@ -9,6 +9,7 @@
 #ifdef __WIN32
 #ifdef __WIN32
 #define __USE_W32_SOCKETS
 #define __USE_W32_SOCKETS
 #include <windows.h>
 #include <windows.h>
+typedef long in_addr_t;
 #else
 #else
 #include <sys/types.h>
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <sys/socket.h>
@@ -157,7 +158,10 @@ void set_defaultconsoleparse(int (*defaultparse)(char*));
 //Resolves the hostname and stores the string representation of the string in ip.
 //Resolves the hostname and stores the string representation of the string in ip.
 //Meant to simplify calls to gethostbyname without the need of all the
 //Meant to simplify calls to gethostbyname without the need of all the
 //required network includes.
 //required network includes.
-in_addr_t resolve_hostbyname(char* hostname, char *ip);
+//hostname is the name to resolve.
+//ip is an array of char[4] where the individual parts of the ip are stored (optional)
+//ip_str is a char[16] where the whole ip is stored in string notation (optional)
+in_addr_t resolve_hostbyname(char* hostname, unsigned char *ip, char *ip_str);
 
 
 extern unsigned int addr_[16];   // ip addresses of local host (host byte order)
 extern unsigned int addr_[16];   // ip addresses of local host (host byte order)
 extern unsigned int naddr_;   // # of ip addresses
 extern unsigned int naddr_;   // # of ip addresses

+ 8 - 30
src/login/login.c

@@ -7,25 +7,10 @@
 #ifdef __WIN32
 #ifdef __WIN32
 #define WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
 #include <winsock2.h>
 #include <winsock2.h>
-#include <time.h>
-void Gettimeofday(struct timeval *timenow)
-{
-	time_t t;
-	t = clock();
-	timenow->tv_usec = (long)t;
-	timenow->tv_sec = (long)(t / CLK_TCK);
-	return;
-}
-#define gettimeofday(timenow, dummy) Gettimeofday(timenow)
-#define in_addr_t unsigned long
 #else
 #else
 #include <sys/socket.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
 #include <arpa/inet.h>
 #include <arpa/inet.h>
-#include <netdb.h>
 #endif
 #endif
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
@@ -55,7 +40,7 @@ void Gettimeofday(struct timeval *timenow)
 int account_id_count = START_ACCOUNT_NUM;
 int account_id_count = START_ACCOUNT_NUM;
 int server_num;
 int server_num;
 int new_account_flag = 0;
 int new_account_flag = 0;
-int bind_ip_set_ = 0;
+in_addr_t bind_ip= 0;
 char bind_ip_str[128];
 char bind_ip_str[128];
 int login_port = 6900;
 int login_port = 6900;
 
 
@@ -1180,14 +1165,14 @@ int mmo_auth(struct mmo_account* account, int fd) {
 
 
 		dnsbl_serv=strtok(dnsbl_servs,",");
 		dnsbl_serv=strtok(dnsbl_servs,",");
 		sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
 		sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
-		if(gethostbyname(ip_dnsbl)!=NULL) {
+		if(resolve_hostbyname(ip_dnsbl,NULL,NULL)) {
 			ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 			ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 			return 3;
 			return 3;
 		}
 		}
 
 
-		while((dnsbl_serv=strtok(dnsbl_servs,","))!=NULL) {
+		while((dnsbl_serv=strtok(dnsbl_servs,","))) {
 			sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
 			sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
-			if(gethostbyname(ip_dnsbl)!=NULL) {
+			if(resolve_hostbyname(ip_dnsbl,NULL,NULL)!=NULL) {
 				ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 				ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 				return 3;
 				return 3;
 			}
 			}
@@ -3651,13 +3636,9 @@ int login_config_read(const char *cfgName) {
 			} else if (strcmpi(w1, "new_account") == 0) {
 			} else if (strcmpi(w1, "new_account") == 0) {
 				new_account_flag = config_switch(w2);
 				new_account_flag = config_switch(w2);
 			} else if (strcmpi(w1, "bind_ip") == 0) {
 			} else if (strcmpi(w1, "bind_ip") == 0) {
-				bind_ip_set_ = 1;
-				h = gethostbyname (w2);
-				if (h != NULL) {
-					ShowStatus("Login server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				} else
-					memcpy(bind_ip_str,w2,16);
+				bind_ip = resolve_hostbyname(w2, NULL, bind_ip_str);
+				if (bind_ip) 
+					ShowStatus("Login server binding IP address : %s -> %s\n", w2, bind_ip_str);
 			} else if (strcmpi(w1, "login_port") == 0) {
 			} else if (strcmpi(w1, "login_port") == 0) {
 				login_port = atoi(w2);
 				login_port = atoi(w2);
 			} else if (strcmpi(w1, "account_filename") == 0) {
 			} else if (strcmpi(w1, "account_filename") == 0) {
@@ -4169,10 +4150,7 @@ int do_init(int argc, char **argv) {
 	online_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int));	// reinitialise
 	online_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int));	// reinitialise
 	add_timer_func_list(waiting_disconnect_timer, "waiting_disconnect_timer");
 	add_timer_func_list(waiting_disconnect_timer, "waiting_disconnect_timer");
 
 
-	if (bind_ip_set_)
-		login_fd = make_listen_bind(inet_addr(bind_ip_str),login_port);
-	else
-		login_fd = make_listen_bind(INADDR_ANY,login_port);
+	login_fd = make_listen_bind(bind_ip?bind_ip:INADDR_ANY,login_port);
 
 
 	add_timer_func_list(check_auth_sync, "check_auth_sync");
 	add_timer_func_list(check_auth_sync, "check_auth_sync");
 	add_timer_interval(gettick() + 60000, check_auth_sync, 0, 0, 60000); // every 60 sec we check if we must save accounts file (only if necessary to save)
 	add_timer_interval(gettick() + 60000, check_auth_sync, 0, 0, 60000); // every 60 sec we check if we must save accounts file (only if necessary to save)

+ 8 - 38
src/login_sql/login.c

@@ -5,32 +5,15 @@
 
 
 #ifdef LCCWIN32
 #ifdef LCCWIN32
 #include <winsock.h>
 #include <winsock.h>
-#pragma lib <libmysql.lib>
 #else
 #else
 #ifdef __WIN32
 #ifdef __WIN32
 #define WIN32_LEAN_AND_MEAN
 #define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <windows.h>
 #include <winsock2.h>
 #include <winsock2.h>
-#include <time.h>
-void Gettimeofday(struct timeval *timenow)
-{
-	time_t t;
-	t = clock();
-	timenow->tv_usec = (long)t;
-	timenow->tv_sec = (long)(t / CLK_TCK);
-	return;
-}
-#define gettimeofday(timenow, dummy) Gettimeofday(timenow)
-#define in_addr_t unsigned long
-#pragma comment(lib,"libmysql.lib")
 #else
 #else
 #include <sys/socket.h>
 #include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <sys/ioctl.h>
+#include <netinet/in.h> 
 #include <arpa/inet.h>
 #include <arpa/inet.h>
-#include <netdb.h>
-#include <unistd.h>
 #endif
 #endif
 #endif
 #endif
 
 
@@ -69,7 +52,7 @@ int use_dnsbl=0; // [Zido]
 char dnsbl_servs[1024];
 char dnsbl_servs[1024];
 int server_num;
 int server_num;
 int new_account_flag = 0; //Set from config too XD [Sirius]
 int new_account_flag = 0; //Set from config too XD [Sirius]
-int bind_ip_set_ = 0;
+in_addr_t bind_ip= 0;
 char bind_ip_str[128];
 char bind_ip_str[128];
 int login_port = 6900;
 int login_port = 6900;
 
 
@@ -559,10 +542,6 @@ int mmo_auth_new(struct mmo_account* account, char sex)
 	return 0;
 	return 0;
 }
 }
 
 
-#ifdef LCCWIN32
-extern void gettimeofday(struct timeval *t, struct timezone *dummy);
-#endif
-
 // Send to char
 // Send to char
 int charif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
 int charif_sendallwos(int sfd, unsigned char *buf, unsigned int len) {
 	int i, c;
 	int i, c;
@@ -613,14 +592,14 @@ int mmo_auth( struct mmo_account* account , int fd){
 
 
 		dnsbl_serv=strtok(dnsbl_servs,",");
 		dnsbl_serv=strtok(dnsbl_servs,",");
 		sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
 		sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
-		if(gethostbyname(ip_dnsbl)!=NULL) {
+		if(resolve_hostbyname(ip_dnsbl, NULL, NULL)) {
 			ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 			ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 			return 3;
 			return 3;
 		}
 		}
 
 
 		while((dnsbl_serv=strtok(dnsbl_servs,","))!=NULL) {
 		while((dnsbl_serv=strtok(dnsbl_servs,","))!=NULL) {
 			sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
 			sprintf(ip_dnsbl,"%s.%s",r_ip,dnsbl_serv);
-			if(gethostbyname(ip_dnsbl)!=NULL) {
+			if(resolve_hostbyname(ip_dnsbl, NULL, NULL)) {
 				ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 				ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n",ip);
 				return 3;
 				return 3;
 			}
 			}
@@ -2064,7 +2043,6 @@ int ip_ban_check(int tid, unsigned int tick, int id, int data){
 //-----------------------------------------------------
 //-----------------------------------------------------
 int login_config_read(const char *cfgName){
 int login_config_read(const char *cfgName){
 	int i;
 	int i;
-	struct hostent *h = NULL;
 	char line[1024], w1[1024], w2[1024];
 	char line[1024], w1[1024], w2[1024];
 	FILE *fp;
 	FILE *fp;
 
 
@@ -2092,13 +2070,9 @@ int login_config_read(const char *cfgName){
 			ShowInfo("Console Silent Setting: %d\n", atoi(w2));
 			ShowInfo("Console Silent Setting: %d\n", atoi(w2));
 			msg_silent = atoi(w2);
 			msg_silent = atoi(w2);
 		} else if (strcmpi(w1, "bind_ip") == 0) {
 		} else if (strcmpi(w1, "bind_ip") == 0) {
-			bind_ip_set_ = 1;
-			h = gethostbyname (w2);
-			if (h != NULL) {
-				ShowStatus("Login server binding IP address : %s -> %d.%d.%d.%d\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				sprintf(bind_ip_str, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-			} else
-				memcpy(bind_ip_str,w2,16);
+			bind_ip = resolve_hostbyname(w2, NULL, bind_ip_str);
+			if (bind_ip)
+				ShowStatus("Login server binding IP address : %s -> %s\n", w2, bind_ip_str);
 		} else if(strcmpi(w1,"login_port")==0){
 		} else if(strcmpi(w1,"login_port")==0){
 			login_port=atoi(w2);
 			login_port=atoi(w2);
 			ShowStatus("set login_port : %s\n",w2);
 			ShowStatus("set login_port : %s\n",w2);
@@ -2344,11 +2318,7 @@ int do_init(int argc,char **argv){
 	online_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int));	// reinitialise
 	online_db = db_alloc(__FILE__,__LINE__,DB_INT,DB_OPT_RELEASE_DATA,sizeof(int));	// reinitialise
 	add_timer_func_list(waiting_disconnect_timer, "waiting_disconnect_timer");
 	add_timer_func_list(waiting_disconnect_timer, "waiting_disconnect_timer");
 
 
-	//login_fd=make_listen_port(login_port);
-	if (bind_ip_set_)
-		login_fd = make_listen_bind(inet_addr(bind_ip_str),login_port);
-	else
-		login_fd = make_listen_bind(INADDR_ANY,login_port);
+	login_fd = make_listen_bind(bind_ip?bind_ip:INADDR_ANY,login_port);
 
 
 	//Auth start
 	//Auth start
 	ShowInfo("Running mmo_auth_sqldb_init()\n");
 	ShowInfo("Running mmo_auth_sqldb_init()\n");

+ 11 - 13
src/map/chrif.c

@@ -4,14 +4,6 @@
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
 #include <string.h>
 #include <string.h>
-#ifdef _WIN32
-#include <winsock.h>
-#else
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
 #include <sys/types.h>
 #include <sys/types.h>
 #include <time.h>
 #include <time.h>
 #include <limits.h>
 #include <limits.h>
@@ -151,10 +143,16 @@ void chrif_checkdefaultlogin(void)
  *
  *
  *------------------------------------------
  *------------------------------------------
  */
  */
-void chrif_setip(char *ip)
+int chrif_setip(char *ip)
 {
 {
-	memcpy(&char_ip_str, ip, 16);
-	char_ip = inet_addr(char_ip_str);
+	char_ip = resolve_hostbyname(ip,NULL,char_ip_str);
+
+	if (!char_ip) {
+		ShowWarning("Failed to Resolve Char Server Address! (%s)\n", ip);
+		return 0;
+	}
+	ShowInfo("Char Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%s"CL_RESET"'.\n", ip, char_ip_str);
+	return 1;
 }
 }
 
 
 /*==========================================
 /*==========================================
@@ -239,7 +237,7 @@ int chrif_connect(int fd)
 	memcpy(WFIFOP(fd,2), userid, NAME_LENGTH);
 	memcpy(WFIFOP(fd,2), userid, NAME_LENGTH);
 	memcpy(WFIFOP(fd,26), passwd, NAME_LENGTH);
 	memcpy(WFIFOP(fd,26), passwd, NAME_LENGTH);
 	WFIFOL(fd,50) = 0;
 	WFIFOL(fd,50) = 0;
-	WFIFOL(fd,54) = clif_getip();
+	WFIFOL(fd,54) = clif_getip_long();
 	WFIFOW(fd,58) = clif_getport();	// [Valaris] thanks to fov
 	WFIFOW(fd,58) = clif_getport();	// [Valaris] thanks to fov
 	WFIFOSET(fd,60);
 	WFIFOSET(fd,60);
 
 
@@ -1417,7 +1415,7 @@ int chrif_disconnect(int fd) {
 void chrif_update_ip(int fd){
 void chrif_update_ip(int fd){
 	char ip[4];
 	char ip[4];
 	ShowInfo("IP Sync in progress...\n");
 	ShowInfo("IP Sync in progress...\n");
-	if (map_server_dns && resolve_hostbyname(map_server_dns, ip)) {
+	if (map_server_dns && resolve_hostbyname(map_server_dns, ip, NULL)) {
 		WFIFOW(fd, 0) = 0x2736;
 		WFIFOW(fd, 0) = 0x2736;
 		WFIFOB(fd, 2) = ip[0];
 		WFIFOB(fd, 2) = ip[0];
 		WFIFOB(fd, 3) = ip[1];
 		WFIFOB(fd, 3) = ip[1];

+ 1 - 1
src/map/chrif.h

@@ -15,7 +15,7 @@ struct auth_node{
 void chrif_setuserid(char*);
 void chrif_setuserid(char*);
 void chrif_setpasswd(char*);
 void chrif_setpasswd(char*);
 void chrif_checkdefaultlogin(void);
 void chrif_checkdefaultlogin(void);
-void chrif_setip(char*);
+int chrif_setip(char*);
 void chrif_setport(int);
 void chrif_setport(int);
 
 
 int chrif_isconnect(void);
 int chrif_isconnect(void);

+ 31 - 40
src/map/clif.c

@@ -10,16 +10,6 @@
 #include <string.h>
 #include <string.h>
 #include <stdarg.h>
 #include <stdarg.h>
 #include <limits.h>
 #include <limits.h>
-#ifdef __WIN32
-#define __USE_W32_SOCKETS
-#include <windows.h>
-#else
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
 #include <time.h>
 #include <time.h>
 
 
 #include "../common/socket.h"
 #include "../common/socket.h"
@@ -160,15 +150,30 @@ static void clif_hpmeter_single(int fd, struct map_session_data *sd);
  * mapŽI‚Ìip�Ý’è
  * mapŽI‚Ìip�Ý’è
  *------------------------------------------
  *------------------------------------------
  */
  */
-void clif_setip(char *ip)
+int clif_setip(char *ip)
 {
 {
-	memcpy(map_ip_str, ip, 16);
-	map_ip = inet_addr(map_ip_str);
+	map_ip = resolve_hostbyname(ip,NULL,map_ip_str);
+	if (!map_ip) {
+		ShowWarning("Failed to Resolve Map Server Address! (%s)\n", ip);
+		return 0;
+	}
+	if(map_server_dns)
+		aFree(map_server_dns);
+	map_server_dns = aCalloc(strlen(ip)+1,1);
+	strcpy(map_server_dns, ip);
+	ShowInfo("Map Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%s"CL_RESET"'.\n", ip, map_ip_str);
+	return 1;
 }
 }
 
 
 void clif_setbindip(char *ip)
 void clif_setbindip(char *ip)
 {
 {
-	bind_ip = inet_addr(ip);
+	unsigned char ip_str[4];
+	bind_ip = resolve_hostbyname(ip,ip_str,NULL);
+	if (bind_ip) {
+		ShowInfo("Map Server Bind IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'.\n", ip, ip_str[0], ip_str[1], ip_str[2], ip_str[3]);
+	} else {
+		ShowWarning("Failed to Resolve Map Server Address! (%s)\n", ip);
+	}
 }
 }
 
 
 /*==========================================
 /*==========================================
@@ -189,6 +194,12 @@ in_addr_t clif_getip(void)
 	return map_ip;
 	return map_ip;
 }
 }
 
 
+//Returns the ip casted as a basic type, to avoid needing to include the socket/net related libs by calling modules.
+unsigned long clif_getip_long(void)
+{
+	return (unsigned long)map_ip;
+}
+
 /*==========================================
 /*==========================================
  * mapŽI‚Ìport“Ç‚Ý�o‚µ
  * mapŽI‚Ìport“Ç‚Ý�o‚µ
  *------------------------------------------
  *------------------------------------------
@@ -10601,16 +10612,13 @@ void clif_parse_GMReqNoChat(int fd,struct map_session_data *sd)
 		((level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level(AtCommand_Mute))
 		((level = pc_isGM(sd)) > pc_isGM(dstsd) && level >= get_atcommand_level(AtCommand_Mute))
 		|| (type == 2 && !level)) {
 		|| (type == 2 && !level)) {
 		clif_GM_silence(sd, dstsd, ((type == 2) ? 1 : type));
 		clif_GM_silence(sd, dstsd, ((type == 2) ? 1 : type));
-		if (battle_config.manner_system)
+		dstsd->status.manner -= limit;
+		if(dstsd->status.manner < 0)
+			sc_start(bl,SC_NOCHAT,100,0,0);
+		else
 		{
 		{
-			dstsd->status.manner -= limit;
-			if(dstsd->status.manner < 0)
-				sc_start(bl,SC_NOCHAT,100,0,0);
-			else
-			{
-				dstsd->status.manner = 0;
-				status_change_end(bl,SC_NOCHAT,-1);
-			}
+			dstsd->status.manner = 0;
+			status_change_end(bl,SC_NOCHAT,-1);
 		}
 		}
 		ShowDebug("GMReqNoChat: name:%s type:%d limit:%d manner:%d\n", dstsd->status.name, type, limit, dstsd->status.manner);
 		ShowDebug("GMReqNoChat: name:%s type:%d limit:%d manner:%d\n", dstsd->status.name, type, limit, dstsd->status.manner);
 	}
 	}
@@ -11775,9 +11783,6 @@ static int packetdb_readdb(void)
  *------------------------------------------
  *------------------------------------------
  */
  */
 int do_init_clif(void) {
 int do_init_clif(void) {
-#ifndef __WIN32
-	int i;
-#endif
 	
 	
 	clif_config.packet_db_ver = -1; // the main packet version of the DB
 	clif_config.packet_db_ver = -1; // the main packet version of the DB
 	memset(clif_config.connect_cmd, 0, sizeof(clif_config.connect_cmd)); //The default connect command will be determined after reading the packet_db [Skotlex]
 	memset(clif_config.connect_cmd, 0, sizeof(clif_config.connect_cmd)); //The default connect command will be determined after reading the packet_db [Skotlex]
@@ -11787,24 +11792,10 @@ int do_init_clif(void) {
 	packetdb_readdb();
 	packetdb_readdb();
 
 
 	set_defaultparse(clif_parse);
 	set_defaultparse(clif_parse);
-#ifdef __WIN32
-	//if (!make_listen_port(map_port)) {
 	if (!make_listen_bind(bind_ip,map_port)) {
 	if (!make_listen_bind(bind_ip,map_port)) {
 		ShowFatalError("cant bind game port\n");
 		ShowFatalError("cant bind game port\n");
 		exit(1);
 		exit(1);
 	}
 	}
-#else
-	for(i = 0; i < 10; i++) {
-		//if (make_listen_port(map_port))
-		if (make_listen_bind(bind_ip,map_port))
-			break;
-		sleep(20);
-	}
-	if (i == 10) {
-		ShowFatalError("cant bind game port\n");
-		exit(1);
-	}
-#endif
 
 
 	add_timer_func_list(clif_waitclose, "clif_waitclose");
 	add_timer_func_list(clif_waitclose, "clif_waitclose");
 	add_timer_func_list(clif_clearchar_delay_sub, "clif_clearchar_delay_sub");
 	add_timer_func_list(clif_clearchar_delay_sub, "clif_clearchar_delay_sub");

+ 2 - 11
src/map/clif.h

@@ -4,15 +4,6 @@
 #ifndef _CLIF_H_
 #ifndef _CLIF_H_
 #define _CLIF_H_
 #define _CLIF_H_
 
 
-#ifdef __WIN32
-typedef unsigned int in_addr_t;
-#else
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
 #include "map.h"
 #include "map.h"
 
 
 // protocol version
 // protocol version
@@ -57,11 +48,11 @@ enum {
 
 
 extern struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB];
 extern struct packet_db packet_db[MAX_PACKET_VER + 1][MAX_PACKET_DB];
 
 
-void clif_setip(char*);
+int clif_setip(char*);
 void clif_setbindip(char*);
 void clif_setbindip(char*);
 void clif_setport(int);
 void clif_setport(int);
 
 
-in_addr_t clif_getip(void);
+unsigned long clif_getip_long(void);
 int clif_getport(void);
 int clif_getport(void);
 int clif_countusers(void);
 int clif_countusers(void);
 void clif_setwaitclose(int);
 void clif_setwaitclose(int);

+ 0 - 12
src/map/intif.c

@@ -2,20 +2,8 @@
 // For more information, see LICENCE in the main folder
 // For more information, see LICENCE in the main folder
 
 
 #include <sys/types.h>
 #include <sys/types.h>
-#ifdef _WIN32
-#include <winsock.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
 #include <stdio.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <stdlib.h>
-#ifndef _WIN32
-#include <sys/time.h>
-#include <sys/ioctl.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#endif
 #include <signal.h>
 #include <signal.h>
 #include <fcntl.h>
 #include <fcntl.h>
 #include <string.h>
 #include <string.h>

+ 2 - 30
src/map/irc.c

@@ -1,28 +1,7 @@
 #include <ctype.h>
 #include <ctype.h>
 #include <string.h>
 #include <string.h>
-
-#ifdef __WIN32
-#define __USE_W32_SOCKETS
-#include <windows.h>
-#include <io.h>
-typedef int socklen_t;
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <sys/ioctl.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#include <ctype.h>
 #include <stdlib.h>
 #include <stdlib.h>
 
 
-#ifndef SIOCGIFCONF
-#include <sys/sockio.h> // SIOCGIFCONF on Solaris, maybe others? [Shinomori]
-#endif
-
-#endif
-
 #include "../common/core.h"
 #include "../common/core.h"
 #include "../common/socket.h"
 #include "../common/socket.h"
 #include "../common/malloc.h"
 #include "../common/malloc.h"
@@ -357,24 +336,17 @@ void do_final_irc(void)
 
 
 void do_init_irc(void)
 void do_init_irc(void)
 {
 {
-	struct hostent *irc_hostname;
-	
 	if(!use_irc)
 	if(!use_irc)
 		return;
 		return;
 	if (irc_ip_str[strlen(irc_ip_str)-1] == '\n') 
 	if (irc_ip_str[strlen(irc_ip_str)-1] == '\n') 
 		irc_ip_str[strlen(irc_ip_str)-1] = '\0'; 
 		irc_ip_str[strlen(irc_ip_str)-1] = '\0'; 
-	irc_hostname=gethostbyname(irc_ip_str);
-	if (!irc_hostname)
+	irc_ip = resolve_hostbyname(irc_ip_str, NULL, irc_ip_str);
+	if (!irc_ip)
 	{
 	{
 		ShowError("Unable to resolve %s! Cannot connect to IRC server, disabling irc_bot.\n", irc_ip_str);
 		ShowError("Unable to resolve %s! Cannot connect to IRC server, disabling irc_bot.\n", irc_ip_str);
 		use_irc = 0;
 		use_irc = 0;
 		return;
 		return;
 	}
 	}
-	irc_ip_str[0]='\0';
-	sprintf(irc_ip_str, "%d.%d.%d.%d", (unsigned char)irc_hostname->h_addr[0], (unsigned char)irc_hostname->h_addr[1],
-					   (unsigned char)irc_hostname->h_addr[2], (unsigned char)irc_hostname->h_addr[3]);
-
-	irc_ip=inet_addr(irc_ip_str);
 
 
 	irc_connect_timer(0, 0, 0, 0);
 	irc_connect_timer(0, 0, 0, 0);
 
 

+ 14 - 45
src/map/map.c

@@ -5,13 +5,8 @@
 #include <stdlib.h>
 #include <stdlib.h>
 #include <string.h>
 #include <string.h>
 #include <stdarg.h>
 #include <stdarg.h>
-#ifdef _WIN32
-#include <winsock.h>
-#else
-#include <netdb.h>
-#include <unistd.h>
-#endif
 #include <math.h>
 #include <math.h>
+#include <unistd.h>
 
 
 #include "../common/core.h"
 #include "../common/core.h"
 #include "../common/timer.h"
 #include "../common/timer.h"
@@ -2300,7 +2295,7 @@ int map_setipport(unsigned short mapindex,unsigned long ip,int port) {
 	
 	
 	if(mdos->gat) //Local map,Do nothing. Give priority to our own local maps over ones from another server. [Skotlex]
 	if(mdos->gat) //Local map,Do nothing. Give priority to our own local maps over ones from another server. [Skotlex]
 		return 0;
 		return 0;
-	if(ip == clif_getip() && port == clif_getport()) {
+	if(ip == clif_getip_long() && port == clif_getport()) {
 		//That's odd, we received info that we are the ones with this map, but... we don't have it.
 		//That's odd, we received info that we are the ones with this map, but... we don't have it.
 		ShowFatalError("map_setipport : received info that this map-server SHOULD have map '%s', but it is not loaded.\n",mapindex_id2name(mapindex));
 		ShowFatalError("map_setipport : received info that this map-server SHOULD have map '%s', but it is not loaded.\n",mapindex_id2name(mapindex));
 		exit(1);
 		exit(1);
@@ -3171,10 +3166,8 @@ int map_readallmaps (void)
 }
 }
 
 
 ////////////////////////////////////////////////////////////////////////
 ////////////////////////////////////////////////////////////////////////
-
-static int map_ip_set_ = 0;
-static int char_ip_set_ = 0;
-//static int bind_ip_set_ = 0;
+static int map_ip_set = 0;
+static int char_ip_set = 0;
 
 
 /*==========================================
 /*==========================================
  * Console Command Parser [Wizputer]
  * Console Command Parser [Wizputer]
@@ -3263,7 +3256,6 @@ int parse_console(char *buf) {
 int map_config_read(char *cfgName) {
 int map_config_read(char *cfgName) {
 	char line[1024], w1[1024], w2[1024];
 	char line[1024], w1[1024], w2[1024];
 	FILE *fp;
 	FILE *fp;
-	struct hostent *h = NULL;
 
 
 	fp = fopen(cfgName,"r");
 	fp = fopen(cfgName,"r");
 	if (fp == NULL) {
 	if (fp == NULL) {
@@ -3285,34 +3277,12 @@ int map_config_read(char *cfgName) {
 			} else if (strcmpi(w1, "passwd") == 0) {
 			} else if (strcmpi(w1, "passwd") == 0) {
 				chrif_setpasswd(w2);
 				chrif_setpasswd(w2);
 			} else if (strcmpi(w1, "char_ip") == 0) {
 			} else if (strcmpi(w1, "char_ip") == 0) {
-				char_ip_set_ = 1;
-				h = gethostbyname (w2);
-				if(h != NULL) {
-					ShowInfo("Char Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'.\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(w2,"%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				}
-				chrif_setip(w2);
+				char_ip_set = chrif_setip(w2);
 			} else if (strcmpi(w1, "char_port") == 0) {
 			} else if (strcmpi(w1, "char_port") == 0) {
 				chrif_setport(atoi(w2));
 				chrif_setport(atoi(w2));
 			} else if (strcmpi(w1, "map_ip") == 0) {
 			} else if (strcmpi(w1, "map_ip") == 0) {
-				map_ip_set_ = 1;
-				h = gethostbyname (w2);
-				if(map_server_dns)
-					aFree(map_server_dns);
-				map_server_dns = aCalloc(strlen(w2)+1,1);
-				strcpy(map_server_dns, w2);
-				if (h != NULL) {
-					ShowInfo("Map Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'.\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(w2, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				}
-				clif_setip(w2);
+				map_ip_set = clif_setip(w2);
 			} else if (strcmpi(w1, "bind_ip") == 0) {
 			} else if (strcmpi(w1, "bind_ip") == 0) {
-				//bind_ip_set_ = 1;
-				h = gethostbyname (w2);
-				if (h != NULL) {
-					ShowInfo("Map Server IP Address : '"CL_WHITE"%s"CL_RESET"' -> '"CL_WHITE"%d.%d.%d.%d"CL_RESET"'.\n", w2, (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-					sprintf(w2, "%d.%d.%d.%d", (unsigned char)h->h_addr[0], (unsigned char)h->h_addr[1], (unsigned char)h->h_addr[2], (unsigned char)h->h_addr[3]);
-				}
 				clif_setbindip(w2);
 				clif_setbindip(w2);
 			} else if (strcmpi(w1, "map_port") == 0) {
 			} else if (strcmpi(w1, "map_port") == 0) {
 				clif_setport(atoi(w2));
 				clif_setport(atoi(w2));
@@ -3847,26 +3817,25 @@ int do_init(int argc, char *argv[]) {
 	irc_read_conf(IRC_CONF); // [Zido]
 	irc_read_conf(IRC_CONF); // [Zido]
 	chrif_checkdefaultlogin();
 	chrif_checkdefaultlogin();
 
 
-	if ((naddr_ == 0) && (map_ip_set_ == 0 || char_ip_set_ == 0)) {
-		ShowError("\nUnable to determine your IP address... please edit the map_athena.conf file and set it.\n");
-		ShowError("(127.0.0.1 is valid if you have no network interface)\n");
-	}
-
-	if (map_ip_set_ == 0 || char_ip_set_ == 0) {
+	if (!map_ip_set || !char_ip_set) {
 		// The map server should know what IP address it is running on
 		// The map server should know what IP address it is running on
 		//   - MouseJstr
 		//   - MouseJstr
 		int localaddr = ntohl(addr_[0]);
 		int localaddr = ntohl(addr_[0]);
 		unsigned char *ptr = (unsigned char *) &localaddr;
 		unsigned char *ptr = (unsigned char *) &localaddr;
 		char buf[16];
 		char buf[16];
+		if (naddr_ == 0) {
+			ShowError("\nUnable to determine your IP address... please edit the map_athena.conf file and set it.\n");
+			ShowError("(127.0.0.1 is valid if you have no network interface)\n");
+		}
 		sprintf(buf, "%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);;
 		sprintf(buf, "%d.%d.%d.%d", ptr[0], ptr[1], ptr[2], ptr[3]);;
 		if (naddr_ != 1)
 		if (naddr_ != 1)
 			ShowNotice("Multiple interfaces detected..  using %s as our IP address\n", buf);
 			ShowNotice("Multiple interfaces detected..  using %s as our IP address\n", buf);
 		else
 		else
 			ShowInfo("Defaulting to %s as our IP address\n", buf);
 			ShowInfo("Defaulting to %s as our IP address\n", buf);
-		if (map_ip_set_ == 0)
+		if (!map_ip_set)
 			clif_setip(buf);
 			clif_setip(buf);
-		if (char_ip_set_ == 0)
-				chrif_setip(buf);
+		if (!char_ip_set)
+			chrif_setip(buf);
 		if (ptr[0] == 192 && ptr[1] == 168)
 		if (ptr[0] == 192 && ptr[1] == 168)
 			ShowNotice("\nFirewall detected.. \n    edit subnet_athena.conf and map_athena.conf\n\n");
 			ShowNotice("\nFirewall detected.. \n    edit subnet_athena.conf and map_athena.conf\n\n");
 	}
 	}

+ 0 - 1
src/map/mercenary.c

@@ -9,7 +9,6 @@
 #include "../common/timer.h"
 #include "../common/timer.h"
 #include "../common/nullpo.h"
 #include "../common/nullpo.h"
 #include "../common/mmo.h"
 #include "../common/mmo.h"
-#include "../common/core.h"
 #include "../common/showmsg.h"
 #include "../common/showmsg.h"
 
 
 #include "log.h"
 #include "log.h"

+ 0 - 10
src/map/npc_chat.c

@@ -8,16 +8,6 @@
 #include <stdlib.h>
 #include <stdlib.h>
 #include <string.h>
 #include <string.h>
 #include <stdarg.h>
 #include <stdarg.h>
-#ifdef __WIN32
-#define __USE_W32_SOCKETS
-#include <windows.h>
-#else
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
 #include <time.h>
 #include <time.h>
 
 
 #include "../common/timer.h"
 #include "../common/timer.h"