| 578 | } |
| 579 | |
| 580 | NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_ERROR(Packet &p) |
| 581 | { |
| 582 | static const StringID network_error_strings[] = { |
| 583 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_GENERAL |
| 584 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_DESYNC |
| 585 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_SAVEGAME_FAILED |
| 586 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_CONNECTION_LOST |
| 587 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_ILLEGAL_PACKET |
| 588 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_NEWGRF_MISMATCH |
| 589 | STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_NOT_AUTHORIZED |
| 590 | STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_NOT_EXPECTED |
| 591 | STR_NETWORK_ERROR_WRONG_REVISION, // NETWORK_ERROR_WRONG_REVISION |
| 592 | STR_NETWORK_ERROR_LOSTCONNECTION, // NETWORK_ERROR_NAME_IN_USE |
| 593 | STR_NETWORK_ERROR_WRONG_PASSWORD, // NETWORK_ERROR_WRONG_PASSWORD |
| 594 | STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_COMPANY_MISMATCH |
| 595 | STR_NETWORK_ERROR_KICKED, // NETWORK_ERROR_KICKED |
| 596 | STR_NETWORK_ERROR_CHEATER, // NETWORK_ERROR_CHEATER |
| 597 | STR_NETWORK_ERROR_SERVER_FULL, // NETWORK_ERROR_FULL |
| 598 | STR_NETWORK_ERROR_TOO_MANY_COMMANDS, // NETWORK_ERROR_TOO_MANY_COMMANDS |
| 599 | STR_NETWORK_ERROR_TIMEOUT_PASSWORD, // NETWORK_ERROR_TIMEOUT_PASSWORD |
| 600 | STR_NETWORK_ERROR_TIMEOUT_COMPUTER, // NETWORK_ERROR_TIMEOUT_COMPUTER |
| 601 | STR_NETWORK_ERROR_TIMEOUT_MAP, // NETWORK_ERROR_TIMEOUT_MAP |
| 602 | STR_NETWORK_ERROR_TIMEOUT_JOIN, // NETWORK_ERROR_TIMEOUT_JOIN |
| 603 | STR_NETWORK_ERROR_INVALID_CLIENT_NAME, // NETWORK_ERROR_INVALID_CLIENT_NAME |
| 604 | STR_NETWORK_ERROR_NOT_ON_ALLOW_LIST, // NETWORK_ERROR_NOT_ON_ALLOW_LIST |
| 605 | STR_NETWORK_ERROR_SERVER_ERROR, // NETWORK_ERROR_NO_AUTHENTICATION_METHOD_AVAILABLE |
| 606 | }; |
| 607 | static_assert(lengthof(network_error_strings) == NETWORK_ERROR_END); |
| 608 | |
| 609 | NetworkErrorCode error = (NetworkErrorCode)p.Recv_uint8(); |
| 610 | |
| 611 | Debug(net, 9, "Client::Receive_SERVER_ERROR(): error={}", error); |
| 612 | |
| 613 | StringID err = STR_NETWORK_ERROR_LOSTCONNECTION; |
| 614 | if (error < (ptrdiff_t)lengthof(network_error_strings)) err = network_error_strings[error]; |
| 615 | /* In case of kicking a client, we assume there is a kick message in the packet if we can read one byte */ |
| 616 | if (error == NETWORK_ERROR_KICKED && p.CanReadFromPacket(1)) { |
| 617 | ShowErrorMessage(GetEncodedString(err), |
| 618 | GetEncodedString(STR_NETWORK_ERROR_KICK_MESSAGE, p.Recv_string(NETWORK_CHAT_LENGTH)), |
| 619 | WL_CRITICAL); |
| 620 | } else { |
| 621 | ShowErrorMessage(GetEncodedString(err), {}, WL_CRITICAL); |
| 622 | } |
| 623 | |
| 624 | /* Perform an emergency save if we had already entered the game */ |
| 625 | if (this->status == STATUS_ACTIVE) ClientNetworkEmergencySave(); |
| 626 | |
| 627 | return NETWORK_RECV_STATUS_SERVER_ERROR; |
| 628 | } |
| 629 | |
| 630 | NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CHECK_NEWGRFS(Packet &p) |
| 631 | { |
nothing calls this directly
no test coverage detected