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"); }
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); }
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); }