diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/HPMDataCheck.h | 7 | ||||
-rw-r--r-- | src/common/HPMSymbols.inc.h | 7 | ||||
-rw-r--r-- | src/common/mmo.h | 5 | ||||
-rw-r--r-- | src/common/packets/packets2019_len_main.h | 75 | ||||
-rw-r--r-- | src/common/packets/packets2019_len_re.h | 75 | ||||
-rw-r--r-- | src/common/packets/packets2019_len_zero.h | 45 | ||||
-rw-r--r-- | src/common/socket.c | 20 | ||||
-rw-r--r-- | src/common/socket.h | 3 |
8 files changed, 202 insertions, 35 deletions
diff --git a/src/common/HPMDataCheck.h b/src/common/HPMDataCheck.h index ecbfc9f2c..57b57c345 100644 --- a/src/common/HPMDataCheck.h +++ b/src/common/HPMDataCheck.h @@ -465,7 +465,6 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = { { "hCSData", sizeof(struct hCSData), SERVER_TYPE_MAP }, { "merge_item", sizeof(struct merge_item), SERVER_TYPE_MAP }, { "s_packet_db", sizeof(struct s_packet_db), SERVER_TYPE_MAP }, - { "stylist_data_entry", sizeof(struct stylist_data_entry), SERVER_TYPE_MAP }, #else #define MAP_CLIF_H #endif // MAP_CLIF_H @@ -963,6 +962,12 @@ HPExport const struct s_HPMDataCheck HPMDataCheck[] = { #else #define MAP_STORAGE_H #endif // MAP_STORAGE_H + #ifdef MAP_STYLIST_H + { "stylist_data_entry", sizeof(struct stylist_data_entry), SERVER_TYPE_MAP }, + { "stylist_interface", sizeof(struct stylist_interface), SERVER_TYPE_MAP }, + #else + #define MAP_STYLIST_H + #endif // MAP_STYLIST_H #ifdef MAP_TRADE_H { "trade_interface", sizeof(struct trade_interface), SERVER_TYPE_MAP }, #else diff --git a/src/common/HPMSymbols.inc.h b/src/common/HPMSymbols.inc.h index 6b02b005a..9410f0586 100644 --- a/src/common/HPMSymbols.inc.h +++ b/src/common/HPMSymbols.inc.h @@ -281,6 +281,9 @@ struct stringbuf_interface *StrBuf; #ifdef COMMON_STRLIB_H /* strlib */ struct strlib_interface *strlib; #endif // COMMON_STRLIB_H +#ifdef MAP_STYLIST_H /* stylist */ +struct stylist_interface *stylist; +#endif // MAP_STYLIST_H #ifdef COMMON_STRLIB_H /* sv */ struct sv_interface *sv; #endif // COMMON_STRLIB_H @@ -646,6 +649,10 @@ HPExport const char *HPM_shared_symbols(int server_type) if ((server_type&(SERVER_TYPE_ALL)) != 0 && !HPM_SYMBOL("strlib", strlib)) return "strlib"; #endif // COMMON_STRLIB_H +#ifdef MAP_STYLIST_H /* stylist */ + if ((server_type&(SERVER_TYPE_MAP)) != 0 && !HPM_SYMBOL("stylist", stylist)) + return "stylist"; +#endif // MAP_STYLIST_H #ifdef COMMON_STRLIB_H /* sv */ if ((server_type&(SERVER_TYPE_ALL)) != 0 && !HPM_SYMBOL("sv", sv)) return "sv"; diff --git a/src/common/mmo.h b/src/common/mmo.h index 3a0f73520..2fc464243 100644 --- a/src/common/mmo.h +++ b/src/common/mmo.h @@ -487,6 +487,7 @@ enum e_mmo_charstatus_opt { OPT_NONE = 0x0, OPT_SHOW_EQUIP = 0x1, OPT_ALLOW_PARTY = 0x2, + OPT_ALLOW_CALL = 0x4, }; enum e_item_bound_type { @@ -733,7 +734,9 @@ struct mmo_charstatus { #ifdef HOTKEY_SAVING struct hotkey hotkeys[MAX_HOTKEYS]; #endif - bool show_equip, allow_party; + bool show_equip; + bool allow_party; + bool allow_call; unsigned short rename; unsigned short slotchange; diff --git a/src/common/packets/packets2019_len_main.h b/src/common/packets/packets2019_len_main.h index f7ad59577..79c8d3f51 100644 --- a/src/common/packets/packets2019_len_main.h +++ b/src/common/packets/packets2019_len_main.h @@ -2,8 +2,8 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2019 Hercules Dev Team - * Copyright (C) 2019 Andrei Karas (4144) + * Copyright (C) 2018-2019 Hercules Dev Team + * Copyright (C) 2018-2019 Andrei Karas (4144) * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3787,7 +3787,7 @@ packetLen(0x0a43, 85) // ZC_ADD_MEMBER_TO_GROUP packetLen(0x0a44, -1) // ZC_GROUP_LIST // Packet: 0x0a46 -packetLen(0x0a46, 14) +packetLen(0x0a46, 14) // CZ_REQ_STYLE_CHANGE // Packet: 0x0a47 packetLen(0x0a47, 3) // ZC_STYLE_CHANGE_RES @@ -3994,13 +3994,13 @@ packetLen(0x0a95, 4) packetLen(0x0a96, 61) // ZC_ADD_EXCHANGE_ITEM4 // Packet: 0x0a97 -packetLen(0x0a97, 8) // CZ_ALT_EQUIPMENT_EQUIP +packetLen(0x0a97, 8) // CZ_ALT_EQUIPMENT_ADD // Packet: 0x0a98 packetLen(0x0a98, 10) // ZC_ALT_EQUIPMENT_EQUIP // Packet: 0x0a99 -packetLen(0x0a99, 4) +packetLen(0x0a99, 4) // CZ_ALT_EQUIPMENT_REMOVE // Packet: 0x0a9a packetLen(0x0a9a, 10) // ZC_ALT_EQUIPMENT_REMOVE @@ -4009,10 +4009,10 @@ packetLen(0x0a9a, 10) // ZC_ALT_EQUIPMENT_REMOVE packetLen(0x0a9b, -1) // ZC_ALT_EQUIPMENT_ITEMS // Packet: 0x0a9c -packetLen(0x0a9c, 2) +packetLen(0x0a9c, 2) // CZ_ALT_EQUIPMENT_SWITCH // Packet: 0x0a9d -packetLen(0x0a9d, 4) +packetLen(0x0a9d, 4) // ZC_ALT_EQUIPMENT_SWITCH_ACK // Packet: 0x0a9e packetLen(0x0a9e, 2) @@ -4168,7 +4168,7 @@ packetLen(0x0acf, 68) // CA_LOGIN_OTP packetLen(0x0ad0, 11) // CA_OTP_CODE // Packet: 0x0ad1 -packetLen(0x0ad1, -1) +packetLen(0x0ad1, -1) // AC_LOGIN_OTP // Packet: 0x0ad2 packetLen(0x0ad2, 30) @@ -4288,7 +4288,7 @@ packetLen(0x0afa, 54) packetLen(0x0afb, -1) // ZC_AUTOSPELLLIST // Packet: 0x0afc -packetLen(0x0afc, 16) +packetLen(0x0afc, 16) // CZ_REQ_STYLE_CHANGE2 // Packet: 0x0afd packetLen(0x0afd, -1) // ZC_GUILD_POSITION @@ -4375,7 +4375,62 @@ packetLen(0x0b18, 4) // ZC_INVENTORY_EXPANSION_INFO packetLen(0x0b19, 2) // CZ_INVENTORY_EXPAND_REJECTED // Packet: 0x0b1a -packetLen(0x0b1a, 29) +packetLen(0x0b1a, 29) // ZC_USESKILL_ACK3 + +// Packet: 0x0b1b +#if PACKETVER >= 20190213 +packetLen(0x0b1b, 2) // ZC_ALT_PING +#endif + +// Packet: 0x0b1c +#if PACKETVER >= 20190227 +packetLen(0x0b1c, 2) // CZ_PING +#endif + +// Packet: 0x0b1d +#if PACKETVER >= 20190227 +packetLen(0x0b1d, 2) // ZC_PING +#endif + +// Packet: 0x0b1e +#if PACKETVER >= 20190227 +packetLen(0x0b1e, 10) +#endif + +// Packet: 0x0b1f +#if PACKETVER >= 20190306 +packetLen(0x0b1f, 10) +#endif + +// Packet: 0x0b20 +#if PACKETVER >= 20190403 +packetLen(0x0b20, 271) +#endif + +// Packet: 0x0b21 +#if PACKETVER >= 20190403 +packetLen(0x0b21, 13) +#elif PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b21, 10) +#endif + +// Packet: 0x0b22 +#if PACKETVER >= 20190403 +packetLen(0x0b22, 5) +#elif PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b22, 6) +#endif + +// Packet: 0x0b23 +#if PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b23, 10) +#endif #endif /* COMMON_PACKETS2019_LEN_MAIN_H */ diff --git a/src/common/packets/packets2019_len_re.h b/src/common/packets/packets2019_len_re.h index 134102bac..c43b65cd9 100644 --- a/src/common/packets/packets2019_len_re.h +++ b/src/common/packets/packets2019_len_re.h @@ -2,8 +2,8 @@ * This file is part of Hercules. * http://herc.ws - http://github.com/HerculesWS/Hercules * - * Copyright (C) 2019 Hercules Dev Team - * Copyright (C) 2019 Andrei Karas (4144) + * Copyright (C) 2018-2019 Hercules Dev Team + * Copyright (C) 2018-2019 Andrei Karas (4144) * * Hercules is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -3793,7 +3793,7 @@ packetLen(0x0a43, 85) // ZC_ADD_MEMBER_TO_GROUP packetLen(0x0a44, -1) // ZC_GROUP_LIST // Packet: 0x0a46 -packetLen(0x0a46, 14) +packetLen(0x0a46, 14) // CZ_REQ_STYLE_CHANGE // Packet: 0x0a47 packetLen(0x0a47, 3) // ZC_STYLE_CHANGE_RES @@ -4000,13 +4000,13 @@ packetLen(0x0a95, 4) packetLen(0x0a96, 61) // ZC_ADD_EXCHANGE_ITEM4 // Packet: 0x0a97 -packetLen(0x0a97, 8) // CZ_ALT_EQUIPMENT_EQUIP +packetLen(0x0a97, 8) // CZ_ALT_EQUIPMENT_ADD // Packet: 0x0a98 packetLen(0x0a98, 10) // ZC_ALT_EQUIPMENT_EQUIP // Packet: 0x0a99 -packetLen(0x0a99, 4) +packetLen(0x0a99, 4) // CZ_ALT_EQUIPMENT_REMOVE // Packet: 0x0a9a packetLen(0x0a9a, 10) // ZC_ALT_EQUIPMENT_REMOVE @@ -4015,10 +4015,10 @@ packetLen(0x0a9a, 10) // ZC_ALT_EQUIPMENT_REMOVE packetLen(0x0a9b, -1) // ZC_ALT_EQUIPMENT_ITEMS // Packet: 0x0a9c -packetLen(0x0a9c, 2) +packetLen(0x0a9c, 2) // CZ_ALT_EQUIPMENT_SWITCH // Packet: 0x0a9d -packetLen(0x0a9d, 4) +packetLen(0x0a9d, 4) // ZC_ALT_EQUIPMENT_SWITCH_ACK // Packet: 0x0a9e packetLen(0x0a9e, 2) @@ -4174,7 +4174,7 @@ packetLen(0x0acf, 68) // CA_LOGIN_OTP packetLen(0x0ad0, 11) // CA_OTP_CODE // Packet: 0x0ad1 -packetLen(0x0ad1, -1) +packetLen(0x0ad1, -1) // AC_LOGIN_OTP // Packet: 0x0ad2 packetLen(0x0ad2, 30) @@ -4294,7 +4294,7 @@ packetLen(0x0afa, 54) packetLen(0x0afb, -1) // ZC_AUTOSPELLLIST // Packet: 0x0afc -packetLen(0x0afc, 16) +packetLen(0x0afc, 16) // CZ_REQ_STYLE_CHANGE2 // Packet: 0x0afd packetLen(0x0afd, -1) // ZC_GUILD_POSITION @@ -4381,7 +4381,62 @@ packetLen(0x0b18, 4) // ZC_INVENTORY_EXPANSION_INFO packetLen(0x0b19, 2) // CZ_INVENTORY_EXPAND_REJECTED // Packet: 0x0b1a -packetLen(0x0b1a, 29) +packetLen(0x0b1a, 29) // ZC_USESKILL_ACK3 + +// Packet: 0x0b1b +#if PACKETVER >= 20190213 +packetLen(0x0b1b, 2) // ZC_ALT_PING +#endif + +// Packet: 0x0b1c +#if PACKETVER >= 20190220 +packetLen(0x0b1c, 2) // CZ_PING +#endif + +// Packet: 0x0b1d +#if PACKETVER >= 20190220 +packetLen(0x0b1d, 2) // ZC_PING +#endif + +// Packet: 0x0b1e +#if PACKETVER >= 20190227 +packetLen(0x0b1e, 10) +#endif + +// Packet: 0x0b1f +#if PACKETVER >= 20190306 +packetLen(0x0b1f, 10) +#endif + +// Packet: 0x0b20 +#if PACKETVER >= 20190403 +packetLen(0x0b20, 271) +#endif + +// Packet: 0x0b21 +#if PACKETVER >= 20190403 +packetLen(0x0b21, 13) +#elif PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b21, 10) +#endif + +// Packet: 0x0b22 +#if PACKETVER >= 20190403 +packetLen(0x0b22, 5) +#elif PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b22, 6) +#endif + +// Packet: 0x0b23 +#if PACKETVER >= 20190306 +// removed +#elif PACKETVER >= 20190227 +packetLen(0x0b23, 10) +#endif #endif /* COMMON_PACKETS2019_LEN_RE_H */ diff --git a/src/common/packets/packets2019_len_zero.h b/src/common/packets/packets2019_len_zero.h index 08e83f59f..85098505a 100644 --- a/src/common/packets/packets2019_len_zero.h +++ b/src/common/packets/packets2019_len_zero.h @@ -3787,7 +3787,7 @@ packetLen(0x0a43, 85) // ZC_ADD_MEMBER_TO_GROUP packetLen(0x0a44, -1) // ZC_GROUP_LIST // Packet: 0x0a46 -packetLen(0x0a46, 14) +packetLen(0x0a46, 14) // CZ_REQ_STYLE_CHANGE // Packet: 0x0a47 packetLen(0x0a47, 3) // ZC_STYLE_CHANGE_RES @@ -4168,7 +4168,7 @@ packetLen(0x0acf, 68) // CA_LOGIN_OTP packetLen(0x0ad0, 11) // CA_OTP_CODE // Packet: 0x0ad1 -packetLen(0x0ad1, -1) +packetLen(0x0ad1, -1) // AC_LOGIN_OTP // Packet: 0x0ad2 packetLen(0x0ad2, 30) @@ -4288,7 +4288,7 @@ packetLen(0x0afa, 54) packetLen(0x0afb, -1) // ZC_AUTOSPELLLIST // Packet: 0x0afc -packetLen(0x0afc, 16) +packetLen(0x0afc, 16) // CZ_REQ_STYLE_CHANGE2 // Packet: 0x0afd packetLen(0x0afd, -1) // ZC_GUILD_POSITION @@ -4375,11 +4375,46 @@ packetLen(0x0b18, 4) // ZC_INVENTORY_EXPANSION_INFO packetLen(0x0b19, 2) // CZ_INVENTORY_EXPAND_REJECTED // Packet: 0x0b1a -packetLen(0x0b1a, 29) +packetLen(0x0b1a, 29) // ZC_USESKILL_ACK3 // Packet: 0x0b1b #if PACKETVER >= 20190130 -packetLen(0x0b1b, 2) +packetLen(0x0b1b, 2) // ZC_ALT_PING +#endif + +// Packet: 0x0b1c +#if PACKETVER >= 20190220 +packetLen(0x0b1c, 2) // CZ_PING +#endif + +// Packet: 0x0b1d +#if PACKETVER >= 20190220 +packetLen(0x0b1d, 2) // ZC_PING +#endif + +// Packet: 0x0b1e +#if PACKETVER >= 20190313 +packetLen(0x0b1e, 10) +#endif + +// Packet: 0x0b1f +#if PACKETVER >= 20190313 +packetLen(0x0b1f, 10) +#endif + +// Packet: 0x0b20 +#if PACKETVER >= 20190327 +packetLen(0x0b20, 271) +#endif + +// Packet: 0x0b21 +#if PACKETVER >= 20190327 +packetLen(0x0b21, 13) +#endif + +// Packet: 0x0b22 +#if PACKETVER >= 20190327 +packetLen(0x0b22, 5) #endif diff --git a/src/common/socket.c b/src/common/socket.c index 95d8bf578..dc5b06da0 100644 --- a/src/common/socket.c +++ b/src/common/socket.c @@ -79,8 +79,6 @@ static struct socket_interface sockt_s; struct socket_interface *sockt; -static const char *SOCKET_CONF_FILENAME = "conf/common/socket.conf"; - #ifdef SEND_SHORTLIST // Add a fd to the shortlist so that it'll be recognized as a fd that needs // sending done on it. @@ -462,7 +460,7 @@ static int recv_to_fifo(int fd) socket_data_ci += len; } #endif // SHOW_SERVER_STATS - return 0; + return (int)len; } static int send_from_fifo(int fd) @@ -490,11 +488,12 @@ static int send_from_fifo(int fd) return 0; } - if( len > 0 ) + if (len > 0) { + sockt->session[fd]->wdata_tick = sockt->last_tick; // some data could not be transferred? // shift unsent data to the beginning of the queue - if( (size_t)len < sockt->session[fd]->wdata_size ) + if ((size_t)len < sockt->session[fd]->wdata_size) memmove(sockt->session[fd]->wdata, sockt->session[fd]->wdata + len, sockt->session[fd]->wdata_size - len); sockt->session[fd]->wdata_size -= len; @@ -648,9 +647,10 @@ static int make_listen_bind(uint32 ip, uint16 port) if(sockt->fd_max <= fd) sockt->fd_max = fd + 1; - create_session(fd, connect_client, null_send, null_parse); + create_session(fd, sockt->connect_client, null_send, null_parse); sockt->session[fd]->client_addr = 0; // just listens sockt->session[fd]->rdata_tick = 0; // disable timeouts on this socket + sockt->session[fd]->wdata_tick = 0; return fd; } @@ -733,6 +733,7 @@ static int create_session(int fd, RecvFunc func_recv, SendFunc func_send, ParseF sockt->session[fd]->func_send = func_send; sockt->session[fd]->func_parse = func_parse; sockt->session[fd]->rdata_tick = sockt->last_tick; + sockt->session[fd]->wdata_tick = sockt->last_tick; sockt->session[fd]->session_data = NULL; sockt->session[fd]->hdata = NULL; return 0; @@ -1505,7 +1506,7 @@ static bool socket_config_read(const char *filename, bool imported) // import should overwrite any previous configuration, so it should be called last if (libconfig->lookup_string(&config, "import", &import) == CONFIG_TRUE) { - if (strcmp(import, filename) == 0 || strcmp(import, SOCKET_CONF_FILENAME) == 0) { + if (strcmp(import, filename) == 0 || strcmp(import, sockt->SOCKET_CONF_FILENAME) == 0) { ShowWarning("socket_config_read: Loop detected! Skipping 'import'...\n"); } else { if (!socket_config_read(import, true)) @@ -1714,7 +1715,7 @@ static void socket_init(void) // Get initial local ips sockt->naddr_ = sockt->getips(sockt->addr_,16); - socket_config_read(SOCKET_CONF_FILENAME, false); + socket_config_read(sockt->SOCKET_CONF_FILENAME, false); #ifndef SOCKET_EPOLL // Select based Event Dispatcher: @@ -2143,6 +2144,8 @@ void socket_defaults(void) { sockt = &sockt_s; + sockt->SOCKET_CONF_FILENAME = "conf/common/socket.conf"; + sockt->fd_max = 0; /* */ sockt->stall_time = 60; @@ -2177,6 +2180,7 @@ void socket_defaults(void) /* */ sockt->flush = flush_fifo; sockt->flush_fifos = flush_fifos; + sockt->connect_client = connect_client; sockt->set_nonblocking = set_nonblocking; sockt->set_defaultparse = set_defaultparse; sockt->host2ip = host2ip; diff --git a/src/common/socket.h b/src/common/socket.h index 5e4251989..b20b0b07e 100644 --- a/src/common/socket.h +++ b/src/common/socket.h @@ -130,6 +130,7 @@ struct socket_data { size_t rdata_pos; uint32 last_head_size; time_t rdata_tick; // time of last recv (for detecting timeouts); zero when timeout is disabled + time_t wdata_tick; // time of last send (for detecting timeouts); RecvFunc func_recv; SendFunc func_send; @@ -178,6 +179,7 @@ struct socket_interface { time_t stall_time; time_t last_tick; + const char *SOCKET_CONF_FILENAME; /* */ uint32 addr_[16]; // ip addresses of local host (host byte order) int naddr_; // # of ip addresses @@ -212,6 +214,7 @@ struct socket_interface { /* */ void (*flush) (int fd); void (*flush_fifos) (void); + int (*connect_client) (int listen_fd); void (*set_nonblocking) (int fd, unsigned long yes); void (*set_defaultparse) (ParseFunc defaultparse); /* hostname/ip conversion functions */ |