Print Error Message If RakNet Fails To Start
This commit is contained in:
parent
a9830c3bba
commit
a925463fdf
@ -1,5 +1,8 @@
|
||||
# Changelog
|
||||
|
||||
**2.1.5**
|
||||
* Print Error Message If RakNet Fails To Start
|
||||
|
||||
**2.1.4**
|
||||
* Fix RakNet::RakString Security Bug
|
||||
|
||||
|
@ -23,7 +23,7 @@ void _overwrite_calls(const char *file, int line, void *start, void *target);
|
||||
void _overwrite(const char *file, int line, void *start, void *target);
|
||||
#define overwrite(start, target) _overwrite(__FILE__, __LINE__, start, target);
|
||||
|
||||
void _patch(const char *file, int line, void *start, unsigned char patch[]);
|
||||
void _patch(const char *file, int line, void *start, unsigned char patch[4]);
|
||||
#define patch(start, patch) _patch(__FILE__, __LINE__, start, patch);
|
||||
|
||||
void _patch_address(const char *file, int line, void *start, void *target);
|
||||
|
@ -389,6 +389,24 @@ static uint32_t RakNetInstance_peer_property_offset = 0x4; // RakNet::RakPeer *
|
||||
|
||||
// RakNet::RakPeer
|
||||
|
||||
typedef enum {
|
||||
RAKNET_STARTED = 0,
|
||||
RAKNET_ALREADY_STARTED,
|
||||
INVALID_SOCKET_DESCRIPTORS,
|
||||
INVALID_MAX_CONNECTIONS,
|
||||
SOCKET_FAMILY_NOT_SUPPORTED,
|
||||
SOCKET_PORT_ALREADY_IN_USE,
|
||||
SOCKET_FAILED_TO_BIND,
|
||||
SOCKET_FAILED_TEST_SEND,
|
||||
PORT_CANNOT_BE_ZERO,
|
||||
FAILED_TO_CREATE_NETWORK_THREAD,
|
||||
COULD_NOT_GENERATE_GUID,
|
||||
STARTUP_OTHER_FAILURE
|
||||
} RakNet_StartupResult;
|
||||
typedef RakNet_StartupResult (*RakNet_RakPeer_Startup_t)(unsigned char *rak_peer, unsigned short maxConnections, unsigned char *socketDescriptors, uint32_t socketDescriptorCount, int32_t threadPriority);
|
||||
static RakNet_RakPeer_Startup_t RakNet_RakPeer_Startup = (RakNet_RakPeer_Startup_t) 0xe1654;
|
||||
static void *RakNet_RakPeer_Startup_vtable_addr = (void *) 0x135438;
|
||||
|
||||
typedef struct RakNet_SystemAddress (*RakNet_RakPeer_GetSystemAddressFromGuid_t)(unsigned char *rak_peer, struct RakNet_RakNetGUID guid);
|
||||
static uint32_t RakNet_RakPeer_GetSystemAddressFromGuid_vtable_offset = 0xd0;
|
||||
|
||||
|
@ -142,7 +142,7 @@ void _overwrite(const char *file, int line, void *start, void *target) {
|
||||
#endif
|
||||
|
||||
// Patch Instruction
|
||||
void _patch(const char *file, int line, void *start, unsigned char patch[]) {
|
||||
void _patch(const char *file, int line, void *start, unsigned char patch[4]) {
|
||||
if (((uint32_t) start) % 4 != 0) {
|
||||
ERR("%s", "Invalid Address");
|
||||
}
|
||||
@ -171,6 +171,6 @@ void _patch(const char *file, int line, void *start, unsigned char patch[]) {
|
||||
// Patch Address
|
||||
void _patch_address(const char *file, int line, void *start, void *target) {
|
||||
uint32_t addr = (uint32_t) target;
|
||||
unsigned char patch_data[4] = {addr & 0xff, (addr >> 8) & 0xff, (addr >> 16) & 0xff, (addr >> 24) & 0xff};
|
||||
unsigned char *patch_data = (unsigned char *) &addr;
|
||||
_patch(file, line, start, patch_data);
|
||||
}
|
||||
|
@ -74,6 +74,39 @@ static unsigned char *RakNet_RakString_injection(unsigned char *rak_string, cons
|
||||
return (*RakNet_RakString)(rak_string, "%s", format);
|
||||
}
|
||||
|
||||
// Print Error Message If RakNet Startup Fails
|
||||
static char *RAKNET_ERROR_NAMES[] = {
|
||||
"Success",
|
||||
"Already Started",
|
||||
"Invalid Socket Descriptors",
|
||||
"Invalid Max Connections",
|
||||
"Socket Family Not Supported",
|
||||
"Part Already In Use",
|
||||
"Failed To Bind Port",
|
||||
"Failed Test Send",
|
||||
"Port Cannot Be 0",
|
||||
"Failed To Create Network Thread",
|
||||
"Couldn't Generate GUID",
|
||||
"Unknown"
|
||||
};
|
||||
#ifdef MCPI_SERVER_MODE
|
||||
#define PRINT_RAKNET_STARTUP_FAILURE ERR
|
||||
#else
|
||||
#define PRINT_RAKNET_STARTUP_FAILURE WARN
|
||||
#endif
|
||||
static RakNet_StartupResult RakNetInstance_host_RakNet_RakPeer_Startup_injection(unsigned char *rak_peer, unsigned short maxConnections, unsigned char *socketDescriptors, uint32_t socketDescriptorCount, int32_t threadPriority) {
|
||||
// Call Original Method
|
||||
RakNet_StartupResult result = (*RakNet_RakPeer_Startup)(rak_peer, maxConnections, socketDescriptors, socketDescriptorCount, threadPriority);
|
||||
|
||||
// Print Error
|
||||
if (result != RAKNET_STARTED) {
|
||||
PRINT_RAKNET_STARTUP_FAILURE("Failed To Start RakNet: %s", RAKNET_ERROR_NAMES[result]);
|
||||
}
|
||||
|
||||
// Return
|
||||
return result;
|
||||
}
|
||||
|
||||
// Init
|
||||
void init_misc() {
|
||||
if (feature_has("Remove Invalid Item Background", 0)) {
|
||||
@ -93,7 +126,10 @@ void init_misc() {
|
||||
patch_address(LoginPacket_read_vtable_addr, (void *) LoginPacket_read_injection);
|
||||
|
||||
// Fix RakNet::RakString Security Bug
|
||||
overwrite_calls((void *) RakNet_RakString, RakNet_RakString_injection);
|
||||
overwrite_calls((void *) RakNet_RakString, (void *) RakNet_RakString_injection);
|
||||
|
||||
// Print Error Message If RakNet Startup Fails
|
||||
overwrite_call((void *) 0x73778, (void *) RakNetInstance_host_RakNet_RakPeer_Startup_injection);
|
||||
|
||||
// Init C++
|
||||
_init_misc_cpp();
|
||||
|
@ -83,8 +83,8 @@ static void start_world(unsigned char *minecraft) {
|
||||
if (!only_generate) {
|
||||
// Open Port
|
||||
int port = get_server_properties().get_int("port", DEFAULT_PORT);
|
||||
(*Minecraft_hostMultiplayer)(minecraft, port);
|
||||
INFO("Listening On: %i", port);
|
||||
(*Minecraft_hostMultiplayer)(minecraft, port);
|
||||
}
|
||||
|
||||
// Open ProgressScreen
|
||||
|
Loading…
Reference in New Issue
Block a user