summaryrefslogtreecommitdiff
path: root/src/login/login.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/login/login.c')
-rw-r--r--src/login/login.c108
1 files changed, 51 insertions, 57 deletions
diff --git a/src/login/login.c b/src/login/login.c
index 141ab5e2b..572bd594f 100644
--- a/src/login/login.c
+++ b/src/login/login.c
@@ -29,6 +29,7 @@
#include <stdlib.h>
struct login_interface login_s;
+struct login_interface *login;
struct Login_Config login_config;
struct mmo_char_server server[MAX_SERVERS]; // char server data
@@ -144,8 +145,7 @@ int charif_sendallwos(int sfd, uint8* buf, size_t len)
for( i = 0, c = 0; i < ARRAYLENGTH(server); ++i )
{
int fd = server[i].fd;
- if( session_isValid(fd) && fd != sfd )
- {
+ if (sockt->session_is_valid(fd) && fd != sfd) {
WFIFOHEAD(fd,len);
memcpy(WFIFOP(fd,0), buf, len);
WFIFOSET(fd,len);
@@ -172,7 +172,7 @@ void chrif_server_destroy(int id)
Assert_retv(id >= 0 && id < MAX_SERVERS);
if (server[id].fd != -1)
{
- do_close(server[id].fd);
+ sockt->close(server[id].fd);
server[id].fd = -1;
}
}
@@ -294,7 +294,7 @@ void login_fromchar_parse_auth(int fd, int id, const char *const ip)
RFIFOSKIP(fd,23);
node = (struct login_auth_node*)idb_get(login->auth_db, account_id);
- if( runflag == LOGINSERVER_ST_RUNNING &&
+ if( core->runflag == LOGINSERVER_ST_RUNNING &&
node != NULL &&
node->account_id == account_id &&
node->login_id1 == login_id1 &&
@@ -703,7 +703,7 @@ bool login_fromchar_parse_wrong_pincode(int fd)
return true;
}
- login_log(host2ip(acc.last_ip), acc.userid, 100, "PIN Code check failed"); // FIXME: Do we really want to log this with the same code as successful logins?
+ login_log(sockt->host2ip(acc.last_ip), acc.userid, 100, "PIN Code check failed"); // FIXME: Do we really want to log this with the same code as successful logins?
}
login->remove_online_user(acc.account_id);
@@ -776,21 +776,21 @@ int login_parse_fromchar(int fd)
if( id == ARRAYLENGTH(server) )
{// not a char server
ShowDebug("login_parse_fromchar: Disconnecting invalid session #%d (is not a char-server)\n", fd);
- set_eof(fd);
- do_close(fd);
+ sockt->eof(fd);
+ sockt->close(fd);
return 0;
}
- if( session[fd]->flag.eof )
+ if( sockt->session[fd]->flag.eof )
{
- do_close(fd);
+ sockt->close(fd);
server[id].fd = -1;
chrif_on_disconnect(id);
return 0;
}
ipl = server[id].ip;
- ip2str(ipl, ip);
+ sockt->ip2str(ipl, ip);
while( RFIFOREST(fd) >= 2 ) {
uint16 command = RFIFOW(fd,0);
@@ -954,7 +954,7 @@ int login_parse_fromchar(int fd)
break;
default:
ShowError("login_parse_fromchar: Unknown packet 0x%x from a char-server! Disconnecting!\n", command);
- set_eof(fd);
+ sockt->eof(fd);
return 0;
} // switch
} // while
@@ -1034,20 +1034,20 @@ int login_mmo_auth(struct login_session_data* sd, bool isServer) {
char ip[16];
nullpo_ret(sd);
- ip2str(session[sd->fd]->client_addr, ip);
+ sockt->ip2str(sockt->session[sd->fd]->client_addr, ip);
// DNS Blacklist check
if( login_config.use_dnsbl ) {
char r_ip[16];
char ip_dnsbl[256];
char* dnsbl_serv;
- uint8* sin_addr = (uint8*)&session[sd->fd]->client_addr;
+ uint8* sin_addr = (uint8*)&sockt->session[sd->fd]->client_addr;
sprintf(r_ip, "%u.%u.%u.%u", sin_addr[0], sin_addr[1], sin_addr[2], sin_addr[3]);
for( dnsbl_serv = strtok(login_config.dnsbl_servs,","); dnsbl_serv != NULL; dnsbl_serv = strtok(NULL,",") ) {
sprintf(ip_dnsbl, "%s.%s", r_ip, trim(dnsbl_serv));
- if( host2ip(ip_dnsbl) ) {
+ if (sockt->host2ip(ip_dnsbl)) {
ShowInfo("DNSBL: (%s) Blacklisted. User Kicked.\n", r_ip);
return 3;
}
@@ -1191,8 +1191,8 @@ void login_auth_ok(struct login_session_data* sd)
nullpo_retv(sd);
fd = sd->fd;
- ip = session[fd]->client_addr;
- if( runflag != LOGINSERVER_ST_RUNNING )
+ ip = sockt->session[fd]->client_addr;
+ if( core->runflag != LOGINSERVER_ST_RUNNING )
{
// players can only login while running
login->connection_problem(fd, 1); // 01 = server closed
@@ -1211,7 +1211,7 @@ void login_auth_ok(struct login_session_data* sd)
server_num = 0;
for( i = 0; i < ARRAYLENGTH(server); ++i )
- if( session_isActive(server[i].fd) )
+ if (sockt->session_is_active(server[i].fd))
server_num++;
if( server_num == 0 )
@@ -1263,12 +1263,12 @@ void login_auth_ok(struct login_session_data* sd)
for (i = 0, n = 0; i < ARRAYLENGTH(server); ++i) {
uint32 subnet_char_ip;
- if( !session_isValid(server[i].fd) )
+ if (!sockt->session_is_valid(server[i].fd))
continue;
subnet_char_ip = login->lan_subnet_check(ip);
WFIFOL(fd,47+n*32) = htonl((subnet_char_ip) ? subnet_char_ip : server[i].ip);
- WFIFOW(fd,47+n*32+4) = ntows(htons(server[i].port)); // [!] LE byte order here [!]
+ WFIFOW(fd,47+n*32+4) = sockt->ntows(htons(server[i].port)); // [!] LE byte order here [!]
memcpy(WFIFOP(fd,47+n*32+6), server[i].name, 20);
WFIFOW(fd,47+n*32+26) = server[i].users;
@@ -1313,7 +1313,7 @@ void login_auth_failed(struct login_session_data* sd, int result)
nullpo_retv(sd);
fd = sd->fd;
- ip = session[fd]->client_addr;
+ ip = sockt->session[fd]->client_addr;
if (login_config.log_login)
{
const char* error;
@@ -1534,15 +1534,15 @@ void login_parse_request_connection(int fd, struct login_session_data* sd, const
ShowInfo("Connection request of the char-server '%s' @ %u.%u.%u.%u:%u (account: '%s', pass: '%s', ip: '%s')\n", server_name, CONVIP(server_ip), server_port, sd->userid, sd->passwd, ip);
sprintf(message, "charserver - %s@%u.%u.%u.%u:%u", server_name, CONVIP(server_ip), server_port);
- login_log(session[fd]->client_addr, sd->userid, 100, message);
+ login_log(sockt->session[fd]->client_addr, sd->userid, 100, message);
result = login->mmo_auth(sd, true);
- if (runflag == LOGINSERVER_ST_RUNNING &&
+ if (core->runflag == LOGINSERVER_ST_RUNNING &&
result == -1 &&
sd->sex == 'S' &&
sd->account_id >= 0 &&
sd->account_id < ARRAYLENGTH(server) &&
- !session_isValid(server[sd->account_id].fd) &&
+ !sockt->session_is_valid(server[sd->account_id].fd) &&
sockt->allowed_ip_check(ipl))
{
ShowStatus("Connection of the char-server '%s' accepted.\n", server_name);
@@ -1554,9 +1554,9 @@ void login_parse_request_connection(int fd, struct login_session_data* sd, const
server[sd->account_id].type = type;
server[sd->account_id].new_ = new_;
- session[fd]->func_parse = login->parse_fromchar;
- session[fd]->flag.server = 1;
- realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
+ sockt->session[fd]->func_parse = login->parse_fromchar;
+ sockt->session[fd]->flag.server = 1;
+ sockt->realloc_fifo(fd, FIFOSIZE_SERVERLINK, FIFOSIZE_SERVERLINK);
// send connection success
login->char_server_connection_status(fd, sd, 0);
@@ -1573,17 +1573,17 @@ void login_parse_request_connection(int fd, struct login_session_data* sd, const
//----------------------------------------------------------------------------------------
int login_parse_login(int fd)
{
- struct login_session_data* sd = (struct login_session_data*)session[fd]->session_data;
+ struct login_session_data* sd = (struct login_session_data*)sockt->session[fd]->session_data;
int result;
char ip[16];
- uint32 ipl = session[fd]->client_addr;
- ip2str(ipl, ip);
+ uint32 ipl = sockt->session[fd]->client_addr;
+ sockt->ip2str(ipl, ip);
- if( session[fd]->flag.eof )
+ if( sockt->session[fd]->flag.eof )
{
ShowInfo("Closed connection from '"CL_WHITE"%s"CL_RESET"'.\n", ip);
- do_close(fd);
+ sockt->close(fd);
return 0;
}
@@ -1595,13 +1595,13 @@ int login_parse_login(int fd)
ShowStatus("Connection refused: IP isn't authorized (deny/allow, ip: %s).\n", ip);
login_log(ipl, "unknown", -3, "ip banned");
login->login_error(fd, 3); // 3 = Rejected from Server
- set_eof(fd);
+ sockt->eof(fd);
return 0;
}
// create a session for this new connection
- CREATE(session[fd]->session_data, struct login_session_data, 1);
- sd = (struct login_session_data*)session[fd]->session_data;
+ CREATE(sockt->session[fd]->session_data, struct login_session_data, 1);
+ sd = (struct login_session_data*)sockt->session[fd]->session_data;
sd->fd = fd;
}
@@ -1675,7 +1675,7 @@ int login_parse_login(int fd)
default:
ShowNotice("Abnormal end of connection (ip: %s): Unknown packet 0x%x\n", ip, command);
- set_eof(fd);
+ sockt->eof(fd);
return 0;
}
}
@@ -1735,19 +1735,19 @@ int login_config_read(const char* cfgName)
continue;
if(!strcmpi(w1,"timestamp_format"))
- safestrncpy(timestamp_format, w2, 20);
+ safestrncpy(showmsg->timestamp_format, w2, 20);
else if(!strcmpi(w1,"stdout_with_ansisequence"))
- stdout_with_ansisequence = config_switch(w2);
+ showmsg->stdout_with_ansisequence = config_switch(w2) ? true : false;
else if(!strcmpi(w1,"console_silent")) {
- msg_silent = atoi(w2);
- if( msg_silent ) /* only bother if we actually have this enabled */
+ showmsg->silent = atoi(w2);
+ if (showmsg->silent) /* only bother if we actually have this enabled */
ShowInfo("Console Silent Setting: %d\n", atoi(w2));
}
else if( !strcmpi(w1, "bind_ip") ) {
- login_config.login_ip = host2ip(w2);
+ login_config.login_ip = sockt->host2ip(w2);
if( login_config.login_ip ) {
char ip_str[16];
- ShowStatus("Login server binding IP address : %s -> %s\n", w2, ip2str(login_config.login_ip, ip_str));
+ ShowStatus("Login server binding IP address : %s -> %s\n", w2, sockt->ip2str(login_config.login_ip, ip_str));
}
}
else if( !strcmpi(w1, "login_port") ) {
@@ -1874,7 +1874,7 @@ int do_final(void) {
if( login->fd != -1 )
{
- do_close(login->fd);
+ sockt->close(login->fd);
login->fd = -1;
}
@@ -1905,24 +1905,19 @@ void set_server_type(void) {
/// Called when a terminate signal is received.
void do_shutdown_login(void)
{
- if( runflag != LOGINSERVER_ST_SHUTDOWN )
+ if( core->runflag != LOGINSERVER_ST_SHUTDOWN )
{
int id;
- runflag = LOGINSERVER_ST_SHUTDOWN;
+ core->runflag = LOGINSERVER_ST_SHUTDOWN;
ShowStatus("Shutting down...\n");
// TODO proper shutdown procedure; kick all characters, wait for acks, ... [FlavioJS]
for( id = 0; id < ARRAYLENGTH(server); ++id )
chrif_server_reset(id);
- flush_fifos();
- runflag = CORE_ST_STOP;
+ sockt->flush_fifos();
+ core->runflag = CORE_ST_STOP;
}
}
-void login_hp_symbols(void) {
- HPM->share(account_db_sql_up(accounts),"sql_handle");
- HPM->share(login,"login");
-}
-
/**
* --login-config handler
*
@@ -1980,7 +1975,6 @@ int do_init(int argc, char** argv)
login->NET_CONF_NAME = aStrdup("conf/network.conf");
HPM_login_do_init();
- HPM->symbol_defaults_sub = login_hp_symbols;
cmdline->exec(argc, argv, CMDLINE_OPT_PREINIT);
HPM->config_read();
HPM->event(HPET_PRE_INIT);
@@ -2007,7 +2001,7 @@ int do_init(int argc, char** argv)
login->auth_db = idb_alloc(DB_OPT_RELEASE_DATA);
// set default parser as login_parse_login function
- set_defaultparse(login->parse_login);
+ sockt->set_defaultparse(login->parse_login);
// every 10 minutes cleanup online account db.
timer->add_func_list(login->online_data_cleanup, "login->online_data_cleanup");
@@ -2028,14 +2022,14 @@ int do_init(int argc, char** argv)
HPM->event(HPET_INIT);
// server port open & binding
- if( (login->fd = make_listen_bind(login_config.login_ip,login_config.login_port)) == -1 ) {
+ if ((login->fd = sockt->make_listen_bind(login_config.login_ip,login_config.login_port)) == -1) {
ShowFatalError("Failed to bind to port '"CL_WHITE"%d"CL_RESET"'\n",login_config.login_port);
exit(EXIT_FAILURE);
}
- if( runflag != CORE_ST_STOP ) {
- shutdown_callback = do_shutdown_login;
- runflag = LOGINSERVER_ST_RUNNING;
+ if( core->runflag != CORE_ST_STOP ) {
+ core->shutdown_callback = do_shutdown_login;
+ core->runflag = LOGINSERVER_ST_RUNNING;
}
ShowStatus("The login-server is "CL_GREEN"ready"CL_RESET" (Server is listening on the port %u).\n\n", login_config.login_port);