Esempio n. 1
0
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;
}
Esempio n. 3
0
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);
		}
	}
}