466 return NETWORK_RECV_STATUS_SAVEGAME; |
466 return NETWORK_RECV_STATUS_SAVEGAME; |
467 } |
467 } |
468 |
468 |
469 _frame_counter = _frame_counter_server = _frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p); |
469 _frame_counter = _frame_counter_server = _frame_counter_max = NetworkRecv_uint32(MY_CLIENT, p); |
470 |
470 |
471 _network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING; |
|
472 _network_join_kbytes = 0; |
471 _network_join_kbytes = 0; |
473 _network_join_kbytes_total = NetworkRecv_uint32(MY_CLIENT, p) / 1024; |
472 _network_join_kbytes_total = NetworkRecv_uint32(MY_CLIENT, p) / 1024; |
474 InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0); |
473 |
|
474 /* If the network connection has been closed due to loss of connection |
|
475 * or when _network_join_kbytes_total is 0, the join status window will |
|
476 * do a division by zero. When the connection is lost, we just return |
|
477 * that. If kbytes_total is 0, the packet must be malformed as a |
|
478 * savegame less than 1 kilobyte is practically impossible. */ |
|
479 if (MY_CLIENT->has_quit) return NETWORK_RECV_STATUS_CONN_LOST; |
|
480 if (_network_join_kbytes_total == 0) return NETWORK_RECV_STATUS_MALFORMED_PACKET; |
|
481 |
|
482 _network_join_status = NETWORK_JOIN_STATUS_DOWNLOADING; |
|
483 InvalidateWindow(WC_NETWORK_STATUS_WINDOW, 0); |
475 |
484 |
476 // The first packet does not contain any more data |
485 // The first packet does not contain any more data |
477 return NETWORK_RECV_STATUS_OKAY; |
486 return NETWORK_RECV_STATUS_OKAY; |
478 } |
487 } |
479 |
488 |