bool RealmSocket::recv(char *buf, size_t len) { bool ret = recv_soft(buf, len); if (ret) recv_skip(len); return ret; }
/// Cancel patch transfer bool AuthSocket::_HandleXferCancel() { DEBUG_LOG("Entering _HandleXferCancel"); recv_skip(1); close_connection(); return true; }
/// Cancel patch transfer bool AuthSocket::_HandleXferCancel() { DEBUG_LOG("Entering _HandleXferCancel"); recv_skip(1); CloseSocket(); return true; }
/// Accept patch transfer bool AuthSocket::_HandleXferAccept() { DEBUG_LOG("Entering _HandleXferAccept"); recv_skip(1); InitPatch(); return true; }
/// %Realm List command handler bool AuthSocket::_HandleRealmList() { DEBUG_LOG("Entering _HandleRealmList"); if (recv_len() < 5) return false; recv_skip(5); ///- Get the user id (else close the connection) // No SQL injection (escaped user name) QueryResult* result = LoginDatabase.PQuery("SELECT id,sha_pass_hash FROM account WHERE username = '******'", _safelogin.c_str()); if (!result) { sLog.outError("[ERROR] user %s tried to login and we cannot find him in the database.", _login.c_str()); close_connection(); return false; } uint32 id = (*result)[0].GetUInt32(); std::string rI = (*result)[1].GetCppString(); delete result; ///- Update realm list if need sRealmList.UpdateIfNeed(); ///- Circle through realms in the RealmList and construct the return packet (including # of user characters in each realm) ByteBuffer pkt; LoadRealmlist(pkt, id); ByteBuffer hdr; hdr << (uint8) CMD_REALM_LIST; hdr << (uint16)pkt.size(); hdr.append(pkt); send((char const*)hdr.contents(), hdr.size()); return true; }
/// Resume patch transfer bool AuthSocket::_HandleXferResume() { DEBUG_LOG("Entering _HandleXferResume"); if (recv_len() < 9) return false; recv_skip(1); uint64 start_pos; recv((char*)&start_pos, 8); if (patch_ == ACE_INVALID_HANDLE) { close_connection(); return false; } ACE_OFF_T file_size = ACE_OS::filesize(patch_); if (file_size == -1 || start_pos >= (uint64)file_size) { close_connection(); return false; } if (ACE_OS::lseek(patch_, start_pos, SEEK_SET) == -1) { close_connection(); return false; } InitPatch(); return true; }