| 7862 | } |
| 7863 | |
| 7864 | void SendDataChunk(int playernum) { |
| 7865 | int outcount = 0; |
| 7866 | static uint8_t outdata[MAX_PACKET_SIZE]; |
| 7867 | static uint8_t readbuf[MAX_PACKET_SIZE]; |
| 7868 | int size; |
| 7869 | int dataread; |
| 7870 | int done = 0; |
| 7871 | // mprintf(0,"Sending a data chunk to %d.\n",playernum); |
| 7872 | // Read the next chunk of the file and send it! |
| 7873 | if ((DATA_CHUNK_SIZE + NetPlayers[playernum].file_xfer_pos) > |
| 7874 | (uint32_t)NetPlayers[playernum].file_xfer_cfile->size) { |
| 7875 | dataread = NetPlayers[playernum].file_xfer_cfile->size - NetPlayers[playernum].file_xfer_pos; |
| 7876 | // This is the end of the file |
| 7877 | mprintf(0, "End of file detected!\n"); |
| 7878 | done = 1; |
| 7879 | } else { |
| 7880 | dataread = DATA_CHUNK_SIZE; |
| 7881 | } |
| 7882 | |
| 7883 | try { |
| 7884 | cf_ReadBytes(readbuf, dataread, NetPlayers[playernum].file_xfer_cfile); |
| 7885 | } catch (cfile_error *cfe) { |
| 7886 | int t = cfe->read_write; // this is is here to fix compile warning |
| 7887 | // Woops, can't read the file, better error out! |
| 7888 | MultiCancelFile(playernum, NetPlayers[playernum].file_xfer_id, NetPlayers[playernum].file_xfer_who); |
| 7889 | Int3(); |
| 7890 | return; |
| 7891 | } |
| 7892 | |
| 7893 | if (done) { |
| 7894 | cfclose(NetPlayers[playernum].file_xfer_cfile); |
| 7895 | NetPlayers[playernum].file_xfer_cfile = NULL; |
| 7896 | NetPlayers[playernum].file_xfer_pos = 0; |
| 7897 | NetPlayers[playernum].file_xfer_flags = NETFILE_NONE; |
| 7898 | } |
| 7899 | // Send them the next chunk |
| 7900 | size = START_DATA(MP_FILE_DATA, outdata, &outcount); |
| 7901 | MultiAddUint(NetPlayers[playernum].file_xfer_total_len, outdata, &outcount); |
| 7902 | MultiAddUint(NetPlayers[playernum].file_xfer_pos, outdata, &outcount); |
| 7903 | MultiAddUshort(NetPlayers[playernum].file_xfer_id, outdata, &outcount); |
| 7904 | if (Netgame.local_role == LR_SERVER) |
| 7905 | MultiAddUshort(NetPlayers[playernum].file_xfer_who, outdata, &outcount); |
| 7906 | else |
| 7907 | MultiAddUshort(Player_num, outdata, &outcount); |
| 7908 | // MultiAddUshort (NetPlayers[playernum].file_xfer_who,outdata,&outcount); |
| 7909 | MultiAddUshort(dataread, outdata, &outcount); |
| 7910 | memcpy(outdata + outcount, readbuf, dataread); |
| 7911 | outcount += dataread; |
| 7912 | END_DATA(outcount, outdata, size); |
| 7913 | if (Netgame.local_role == LR_SERVER) { |
| 7914 | nw_SendReliable(NetPlayers[playernum].reliable_socket, outdata, outcount, true); |
| 7915 | } else { |
| 7916 | nw_SendReliable(NetPlayers[Player_num].reliable_socket, outdata, outcount, true); |
| 7917 | } |
| 7918 | NetPlayers[playernum].file_xfer_pos += dataread; |
| 7919 | } |
| 7920 | |
| 7921 | void MultiDoFileCancelled(uint8_t *data) { |
no test coverage detected