void CSendFile::Transmit() { m_file = CreateFile(m_sbFilename.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_SEQUENTIAL_SCAN, NULL); if(m_file != INVALID_HANDLE_VALUE) { LARGE_INTEGER li; if(GetFileSizeEx(m_file, &li)) { m_filesize = li.QuadPart; int len = 0; char *pMsg = MakeFileStart(m_timestamp, m_filesize, FindStrRightOf(m_sbFilename, _T('\\'), true), &len); m_pNetwork->Send(pMsg, len); unsigned char *buffer = new unsigned char[FILE_PAYLOAD_SIZE]; SecureZeroMemory(buffer, sizeof(unsigned char) * FILE_PAYLOAD_SIZE); DWORD bytesRead = 1; len = 0; unsigned long sequence = 0; while(ReadFile(m_file, buffer, FILE_PAYLOAD_SIZE, &bytesRead, NULL) && bytesRead) { if(bytesRead == 0)break; len = bytesRead; pMsg = MakeFileData(m_timestamp, sequence++, buffer, false, &len); m_pNetwork->Send(pMsg, len); Sleep(2); } pMsg = MakeFileEnd(m_timestamp, &len); m_pNetwork->Send(pMsg, len); delete [] buffer; } else m_filesize = 0; } }
bool SendTransaction::RequestId() { QByteArray fileData; MakeFileData(fileData); if (!TransmitMessage(State::Request::REQUEST_PERMISSION, fileData)) { emit TransmissionFailed(State::Error::ID_RECEIVING_FAILED); return false; } Message msg; if (!ReceiveMessage(msg)) { emit TransmissionFailed(State::Error::ID_RECEIVING_FAILED); return false; } if (msg.state == State::Response::TRANSMISSION_DECLINED) { emit TransmissionCancelled(); return false; } if (msg.state != State::Response::RESP_ID) { emit TransmissionFailed(State::Error::ID_RECEIVING_FAILED); return false; } MakePeerData(msg, addr_, port_); id_ = msg.id; return true; }
void CSendFile::SendMissedPacket(unsigned long seq, unsigned long ip) { LARGE_INTEGER li = {}; li.QuadPart = seq * FILE_PAYLOAD_SIZE; if(SetFilePointerEx(m_file, li, NULL, FILE_BEGIN)) { unsigned char *buffer = new unsigned char[FILE_PAYLOAD_SIZE]; DWORD read = 0; if(ReadFile(m_file, buffer, FILE_PAYLOAD_SIZE, &read, 0) && read) { int len = read; char * msg = MakeFileData(m_timestamp, seq, buffer, true, &len); m_pNetwork->Send(msg, len, ip); } } }