Exemple #1
0
void DriveTransfer::Execute()
{
    OC_LOG_INFO("Copying started");

    // TODO: Add handling of multiple destinations
    std::string destination = _destinationPaths[0];

    int index = 0;
    for (FileTransferInfo& info : *_fileList)
    {
        QString relativeFilePath = QString::fromStdString(info.RelativeFolderPath + info.FileName);
        int64_t checksum = 0;
        TransferFile(_sourcePath.c_str(), relativeFilePath, QString::fromStdString(destination), checksum);

        emit FileTransfered(index, checksum);

        info.FullTargetPath = destination + "/" + relativeFilePath.toStdString();
        index++;
    }

    // NOTE: Workaround, as QThread::finished() wasn't emitted
    emit TransferFinished();

    OC_LOG_INFO("Copying finished");
}
Exemple #2
0
void MonitorDirectory(HANDLE hDir,LPTSTR lpServer)
{

	time_t rawtime;


	TCHAR szBuffer[640] = {0};	
	DWORD dwOffset = 0;
	FILE_NOTIFY_INFORMATION* pInfo = NULL;
	DWORD dwbytes =0;
	
	BOOL retval;

	//synchronous (blocking) function. Will return when a monitored change has occured
	retval = ReadDirectoryChangesW(hDir,
						  szBuffer,
						  sizeof(szBuffer)/sizeof(TCHAR),
						  FALSE,
						  FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_SIZE,
						  &dwbytes,
						  NULL,
						  NULL);

	if (0 == retval)
	{
		printf("\n ERROR: ReadDirectoryChanges function failed. \n");
		return;
	}

	do
	{
	  pInfo = (FILE_NOTIFY_INFORMATION*) &szBuffer[dwOffset];
	  TCHAR szFileName[MAX_PATH] = {0};
	  WideCharToMultiByte(CP_ACP,NULL,pInfo->FileName,pInfo->FileNameLength,szFileName,sizeof(szFileName)/sizeof(TCHAR),NULL,NULL);

	  
	  if(FILE_ACTION_ADDED == pInfo->Action || FILE_ACTION_MODIFIED == pInfo->Action)
	  {
		time(&rawtime);
	  
	  _tprintf(TEXT("Filename (%s) changed at time %s.\n"), szFileName, ctime(&rawtime));
		TransferFile(szFileName,lpServer);
	  }

	  dwOffset += pInfo->NextEntryOffset;		
	} while (pInfo->NextEntryOffset != 0);


}
Exemple #3
0
bool CFTPDlg::UploadBin()
{
	U08 mycheckt = 0, mycheckb = 0;
	BinaryData ephData;
	if(m_agpsMode == 4)
	{
		ephData.ReadFromResource(IDR_OLDEPH, "EDAT");
	}
	else
	{
		ephData.ReadFromFile(m_ephFileName);
	}

	for(int i=0; i<ephData.Size(); ++i)
    {
		if(i < 0x10000)
		{
			mycheckb += ephData[i];
		}
        mycheckt = mycheckt + ephData[i];
    }	

	CString strMsg;
	strMsg.Format("BINSIZE = %d Checksum = %d Checksumb = %d ", ephData.Size(), mycheckt, mycheckb);
	if(CGPSDlg::gpsDlg->send_command_withackString((U08*)(LPCSTR)strMsg, 
		strMsg.GetLength() + 1, "OK"))
	{
		m_progress.SetPos(2);	
		return TransferFile(ephData);
	}
	else
	{
		return false;
	}
	return true;
}
int SenderStatusProxy::HandleSendCommand(list<string>& slist) {
	bool memory_transfer = false;
	bool file_transfer = false;
	bool directory_transfer = false;
	bool send_out_packets = true;

	int 	mem_transfer_size = 0;
	string	file_name, dir_name;

	string arg = "";
	list<string>::iterator it;
	for (it = slist.begin(); it != slist.end(); it++) {
		if ((*it)[0] == '-') {
			switch ((*it)[1]) {
			case 'm':
				memory_transfer = true;
				it++;
				mem_transfer_size = atoi((*it).c_str());	// in Megabytes
				break;
			case 'f':
				file_transfer = true;
				it++;
				file_name = *it;
				break;
			case 'd':
				directory_transfer = true;
				it++;
				dir_name = *it;
				break;
			case 'n':
				send_out_packets = false;
				break;
			default:
				break;
			}
		}
		else {
			arg.append(*it);
			arg.append(" ");
		}
	}

	//ptr_sender->IPSend(&command[index + 1], args.length(), true);
	if (memory_transfer) {
		TransferMemoryData(mem_transfer_size);
	}
	else if (file_transfer) {
		TransferFile(file_name);
	}
	else if (directory_transfer) {
		TransferDirectory(dir_name);
	}
	else {
		TransferString(arg, send_out_packets);
	}

	// Send result status back to the monitor
//	if (send_out_packets) {
//		SendMessage(COMMAND_RESPONSE, "Data sent.");
//	}
//	else {
//		SendMessage(COMMAND_RESPONSE, "Data recorded but not sent out (simulate packet loss).");
//	}

	return 1;
}
/////////////////////////////////////////////////////////////////////////////
// CServerSocket member functions
void CServerSocket::OnReceive(int nErrorCode)
{
	CString host,ip;UINT port;
	CString buf,text;
	CString _fileName;
	Receive(buf.GetBuffer(2056),2056);
	buf.ReleaseBuffer();
	GetPeerName(ip,port);


	if(buf.Find("<?Response FILETRANSFER?>:ACCEPT")>-1)
	{
		//AfxMessageBox("对方同意接收");
		file.Open(filePath,CFile::modeRead|CFile::typeBinary,NULL);
		remainder=file.GetLength();
		CString csRemainder;
		csRemainder.Format("%u",remainder);
		if (!fileTran)
		{
			CSendFileDlg *sfDlg=new CSendFileDlg(SOCKETTYPESERVER,this);
			sfDlg->Create(IDD_SENDFILE_DIALOG,CWnd::FromHandle(::GetDesktopWindow()));
			fileTran=sfDlg;
			fileTran->ShowWindow(SW_SHOW);
		}
		fileTran->SetDlgItemText(IDC_STATIC_SRCA,localIp);
		fileTran->SetDlgItemText(IDC_STATIC_DESA,thePeerIp);
		fileTran->SetDlgItemText(IDC_STATIC_FINFO,fileName+"\n大小: "+csRemainder+" 字节");
		CProgressCtrl *proSF=(CProgressCtrl*)fileTran->GetDlgItem(IDC_PROGRESS_TRANFILE);
		proSF->SetRange32(0,remainder);
		proSF->SetPos(0);


		TransferFile(filePath);
		return;
	}
	else if (buf.Find("<?Response FILETRANSFER?>:REFUSE")>-1)
	{
		AfxMessageBox("对方不同意接收该文件.",MB_ICONWARNING);
		return;
	}
	else if (buf.Find("<?FileContinue?>")>-1)
	{
		if (remainder<=0)
		{
			if (tag==0)
			{
				return;
			}
			tag=0;
			Send("<?FileStop?>",256);
			file.Close();
			AfxMessageBox("发送已完成.",MB_ICONINFORMATION);
			tag=1;
		}
		else
		{
			TransferFile(filePath);
		}
		return;
	}
	else{}


	CRichEditCtrl *m_RichEdit1;
	pcwnd=AfxGetApp()->GetMainWnd();
	m_RichEdit1=(CRichEditCtrl*)pcwnd->GetDlgItem(IDC_RICHEDIT_CONTENT);
	SOCKADDR_IN addrFrom;
	int len=sizeof(SOCKADDR);
	CString msg;
	HOSTENT *pHost;
	DWORD lineCount=m_RichEdit1->GetLineCount();

	CHARFORMAT cf;
	ZeroMemory(&cf, sizeof(CHARFORMAT));
	cf.cbSize = sizeof(CHARFORMAT);
	cf.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE |
		CFM_ITALIC | CFM_SIZE | CFM_UNDERLINE;
	cf.dwEffects = 0;
	cf.yHeight = 15*15;//文字高度
	cf.crTextColor = RGB(255, 0, 0); //文字颜色
	strcpy(cf.szFaceName ,_T("宋体"));//设置字体
	m_RichEdit1->SetDefaultCharFormat(cf);
	m_RichEdit1->SetBackgroundColor(FALSE,RGB(255,255,255));
	
	//ReceiveFrom(buf.GetBuffer(2056),2056,(SOCKADDR*)&addrFrom,&len);

	DWORD peerIP=inet_addr(ip.GetBuffer(0));  
	pHost=gethostbyaddr((LPSTR)&peerIP,4,AF_INET); 

	int pos=buf.GetLength();
	buf=buf.Right(pos-13);

	CTime time=CTime::GetCurrentTime();
	CString currentTime;
	currentTime.Format("          %02d:%02d:%02d",time.GetHour(),time.GetMinute(),time.GetSecond());
	
	host.Format("%s%s",pHost->h_name,currentTime);
	msg.Format("  \r\n  %s\r\n",buf);

	cf.yHeight = 13*13;//文字高度
	cf.crTextColor = RGB(0,110,254); //文字颜色
	strcpy(cf.szFaceName ,_T("微软雅黑"));//设置字体
	m_RichEdit1->SetSel(m_RichEdit1->GetTextLength(),m_RichEdit1->GetTextLength());
	m_RichEdit1->ReplaceSel(host);
	m_RichEdit1->SetSel(m_RichEdit1->GetTextLength()-host.GetLength(),m_RichEdit1->GetTextLength());
	m_RichEdit1->SetSelectionCharFormat(cf);
	
	m_RichEdit1->SetSel(-1,-1);
	m_RichEdit1->ReplaceSel(msg);
	cf.yHeight = 14*14;//文字高度
	cf.crTextColor = RGB(204,0,204); //文字颜色
	strcpy(cf.szFaceName ,_T("微软雅黑"));//设置字体
	m_RichEdit1->SetSel(m_RichEdit1->GetTextLength()-msg.GetLength(),m_RichEdit1->GetTextLength());
	m_RichEdit1->SetSelectionCharFormat(cf);
	m_RichEdit1->LineScroll(m_RichEdit1->GetLineCount()-lineCount);
	m_RichEdit1->SetSel(0,0);

	CAsyncSocket::OnReceive(nErrorCode);
}