afx_msg LRESULT CBroadGrdDlg::OnUserRecvfrompcie(WPARAM wParam, LPARAM lParam) { if(pcieReceiver->qBuff.empty()) return 0; //WaitForSingleObject(pcieReceiver->queue_Mutex, INFINITE); PACKET packet=pcieReceiver->qBuff.front(); pcieReceiver->qBuff.pop(); //ReleaseMutex(pcieReceiver->queue_Mutex); SoftwareCommendHeadr* header=(SoftwareCommendHeadr*)(packet.buf+1); switch(header->function) { case Func_DeliverConfig: { Cmd_DeliverConfig* cmd=(Cmd_DeliverConfig*)header; recvFile(cmd->frameID,cmd->frameSize,cmd->endFlag,cmd->data); return 0; } break; default: break; } //caper->sendPacket(0,HWND_Master,(u_char*)lParam,packet.len); return 0; }
int main(int argc, char *argv[]) { int sockfd; int r; struct sockaddr_in servaddr; sockfd = socket(AF_INET,SOCK_DGRAM,0); /*create a socket*/ /*init servaddr*/ bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); //bind address and port to socket* if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) == -1) { perror("bind error"); exit(-1); } //r = fcntl(sockfd, F_GETFL, 0); //fcntl(sockfd, F_SETFL, r & ~O_NONBLOCK); recvFile(argv[1],sockfd); return 0; }
void handleOrder(porder po,char* path,int cfd) { // printf("path:%s\n",path); if(ORDER_PWD == po->order) { data tbuf; memset(&tbuf,0,sizeof(tbuf)); recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len)); recvN(cfd,tbuf.buf,tbuf.len); printf("%s\n",tbuf.buf); } else if(ORDER_LS == po->order) { data tbuf; memset(&tbuf,0,sizeof(tbuf)); recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len)); recvN(cfd,tbuf.buf,tbuf.len); printf("%-5s%-20s%-10s\n","type","name","size"); printf("%s\n",tbuf.buf); } else if(ORDER_CD == po->order) { data tbuf; memset(&tbuf,0,sizeof(tbuf)); recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len)); recvN(cfd,tbuf.buf,tbuf.len); printf("%s\n",tbuf.buf); } else if(ORDER_PUTS == po->order) { sendFile(cfd,path,po->info); } else if(ORDER_GETS == po->order) { recvFile(cfd,path,po->info); } else if(ORDER_RM == po->order) { data tbuf; memset(&tbuf,0,sizeof(tbuf)); tbuf.len = strlen(po->info); strcpy(tbuf.buf,po->info); sendN(cfd,(char*)&tbuf,tbuf.len+sizeof(tbuf.len)); memset(&tbuf,0,sizeof(tbuf)); recvN(cfd,(char*)&tbuf.len,sizeof(tbuf.len)); recvN(cfd,tbuf.buf,tbuf.len); printf("%s\n",tbuf.buf); } else if(ORDER_EXIT == po->order) { printf("bye bye!\n"); close(cfd); exit(0); } else { printf("command not found\n"); } }
int serverAddToWallet(BIO *conn, int clientid, EVP_PKEY *clientKey, EVP_PKEY *bankKey) { //receive the cloud dollar file if(recvFile(conn, TEMP_DOLLAR_FILENAME) == -1) return -1; //receive the signature char signature[BUFFER_SIZE]; int status = readPacket(conn, signature, sizeof(signature)); if ( status == -1 ) return -1; int sigSize = status; //verify the cloud dollar is real (signed by the bank and right string) int verified = verifyCloudDollar(TEMP_DOLLAR_FILENAME, bankKey); if(verified < 0) { printf("\tReceived an INVALID cloud dollar.\n"); //inform user of probelm writeInt(conn, -2); return 0; } else printf("\tRecieved a valid cloud dollar.\n"); int serial; int amount; int user; status = getDollarData(TEMP_DOLLAR_FILENAME, &serial, &amount, &user); //verify the user signed the cloud dollar verified = verifyFile(TEMP_DOLLAR_FILENAME, (unsigned char*)signature, sigSize, clientKey); if(!verified) { printf("\tReceived INVALID signature for the cloud dollar.\n"); //infomr user of promebl writeInt(conn, -3); return 0; } else printf("\tReceived a valid signature from %d\n", clientid); //all valid, so up their balance int balance = getBalance(clientid); status = updateBalance(clientid, balance + amount); if(status == -1) { //inform user writeInt(conn, -1); return -1; } //inform user of success if(writeInt(conn, amount) == -1) return -1; return amount; }
int main(int argc, char *argv[]) { int sockfd, connfd; int r, len; char buf[100]; struct sockaddr_in servaddr, cliaddr; sockfd = socket(AF_INET, SOCK_STREAM, 0); /*create a socket*/ /*init servaddr*/ bzero(&servaddr,sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = htonl(INADDR_ANY); servaddr.sin_port = htons(SERV_PORT); //bind address and port to socket* if(bind(sockfd,(struct sockaddr *)&servaddr,sizeof(servaddr)) == -1) { perror("bind error"); exit(-1); } if(listen(sockfd, 1024) == -1){ perror("listen error"); exit(-1); } // a easy way to serve the clients for(;;){ len = sizeof(cliaddr); connfd = accept(sockfd, (struct sockaddr *)&cliaddr, &len); if(connfd == -1){ perror("listen error."); exit(-1); } printf("Connection from %s, port \n", inet_ntop(AF_INET, &cliaddr.sin_addr, buf, sizeof(buf)), ntohs(cliaddr.sin_port)); recvFile("temp", connfd); close(connfd); } return 0; }
void ProtocolDataTransfer::run() { switch (m_SocketMode) { case Slave: if (accept() == -1) { return; } break; case Active: if (connectTo() == -1) { return; } break; default: return; } switch (m_Protocol) { case DoSendFile: sendFile(); break; case DoRecvFile: recvFile(); break; case DoSendDir: sendDir(); break; case DoRecvDir: recvDir(); break; case DoSendList: sendList(); break; case DoRecvList: recvList(); break; } }
int main(int argc, char *argv[]) { if (argc < 3 || argc > 4) { fprintf(stderr, "to run server: host port\nto run client: host port filePath\n"); return 1; } struct sigaction intSignal; intSignal.sa_handler = intHandler; sigaction(SIGINT, &intSignal, NULL); if (argc == 3) recvFile(argv[1], atoi(argv[2])); else sendFile(argv[1], atoi(argv[2]), argv[3]); return 0; }
void* waitMain(void* param){ while(1){ stdinFlag = MAIN; if(callFlag == OFF) printf("1. 電話を掛ける\n"); printf("2. ファイル送信\n"); printf("3. ファイル受信\n"); printf("4. チャット待ち受け(未実装)\n"); printf("5. チャット接続(未実装)\n"); if(callFlag == OFF) printf("6. 終了\n"); if(callFlag == ON) printf("9. 電話を切る\n"); char c[1]; scanf("%s", c); if(c[0]=='1'){ pthread_cancel(udpServThread); stdinFlag = OTHER; startCallPhone(); break; } else if(c[0]=='2'){ sendFile(); } else if(c[0]=='3'){ recvFile(); } else if(c[0]=='4'){ startChatServe(); } else if(c[0]=='5'){ startChatClient(); } else if(c[0]=='6'){ pthread_cancel(udpServThread); break; } else if(c[0]=='9'){ callFlag = OFF; break; } else printf("incorrect input %s\n", c); } }
int serverUploadFile(BIO *conn, int clientid) { //receive the filesize int fileSize = readInt(conn); if(fileSize == -1) return -1; //the upload costs $1 per MEGABYTE int cost = fileSize / MEGABYTE; if(fileSize % MEGABYTE != 0) ++cost; //check user has the balance for a file of this size int userBalance = getBalance(clientid); int response = 0; if(userBalance == -1) response = -1; else if(userBalance < cost) response = cost - userBalance; else response = 0; //inform user of whether we are going ahead or not int status = writeInt(conn, response); if(response != 0) return response; if(status < 0) return status; char userDirectory[BUFFER_SIZE]; snprintf(userDirectory, sizeof(userDirectory), "./%s/%d/", SERVER_FILE_FOLDER, clientid); if(chdir(userDirectory) != 0) { perror("serverUploadFile"); return -1; } //receive the file, save it with whatever name the client uses status = recvFile(conn, NULL); if(chdir("../../") != 0) { perror("serverUploadFile"); return -1; } //update their balance if(updateBalance(clientid, userBalance - cost) == -1) return -1; return 1; }
/* Download the file with the given name from the server. If decrypt is 0 * then the file will not be decrypted, and will be left in TEMP_ENCRYPTED_FILENAME. * If decrypt is not 0 then the file will be decrypted according to the clients * records and saved under its original name. */ int clientDownloadFile(BIO *conn, char *filename, int decrypt) { //trigger the server to call serverDownloadFile() if(writeInt(conn, DOWNLOAD_FILE_CODE) == -1) return -1; //send the server the filename we want to download if ( writeString(conn, filename) < 1 ) return -1; int status = readInt(conn); if(status == -1) { printf("No such file %s\n", filename); return 0; } //receive the encrypted file, save to temporary file status = recvFile(conn, TEMP_ENCRYPTED_FILENAME); if ( status < 0 ) return -1; if ( status == 5 ) return 5; //if no decryption requested quit early if(!decrypt) return 0; //otherwise check our records to decrypt this file FILERECORD *r = getRecord(filename); if(r == NULL) { printf("No record stored for this file, so no decryption performed.\n"); return -1; } //decrypt the file, and save with it's original name status = decryptFile(TEMP_ENCRYPTED_FILENAME, filename, r->key, r->iv); if ( status < 0 ) return -1; unlink(TEMP_ENCRYPTED_FILENAME); printf("Successfully downloaded %s\n", filename); return 0; }
//收到的数据格式为前4个字节表示header的长度,后面是header //header第0个字节为标志位,第0位为1表示更新lib,第1位为1表示更新app;第2位为reset标志位。 //如果lib标志位为1,接下来四个字节表示lib 文件名的长度,然后是文件名,接着是32字节的md5,然后是lib文件大小,最后是新版本的version code。app相关数据是一样的格式 //接收完头部,然后接收更新的文件,并写到文件中去 //接收完文件,发送一个更新成功与否的响应(但是不关心是否发送成功) static int recvData(int fd,int* flagPtr) { if(fd == -1) return -1; int ret; int left; char* msg = "acceptFile"; FILE* newVer; char updateFlag = 0; int lib_head_size,app_head_size; lib_head_size = app_head_size = 0; int lib_size = 0; int app_size = 0; int head_len = 0;//表示head的长度 char header[HEADER_MAX] = {0};//第0个字节第0位为1表示更新lib,第1位为1表示更新app //char lib_md5[MD5_MAX] = {0}; //char app_md5[MD5_MAX] = {0}; //char lib_name[FILE_NAME_MAX] = {0}; //char app_name[FILE_NAME_MAX] = {0}; char* ptr = header; ret = recv(fd,&head_len,4,0); if(ret <= 0) { perror("recv head_len"); return -1; } printf("recv head len=%d\n",head_len); do { ret = recv(fd,ptr,head_len,0); if(ret <= 0)//等于0的情况是对方主动关闭 { perror("recv header"); return -1; } head_len -= ret; ptr += ret; //send(fd,msg,strlen(msg),0) } while (head_len > 0); updateFlag = header[0]; *flagPtr = updateFlag; ptr = header+1; printf("updateFlag=%d\n",updateFlag); if(updateFlag & 0x04) { char cmd[64] = {0}; strcpy(cmd,"rm -f /etc/SNIP39/wpa_supplicant.conf /etc/init.d/uid /etc/init.d/hashid"); system(cmd); printf("reset success\n"); } if(updateFlag & 0x01) { //格式:文件名长度+文件名+md5+文件大小+新版本code int lib_file_len = 0; memcpy(&lib_file_len,ptr,INT_LEN); ptr += INT_LEN; //printf("lib_file_name_len=%d,",lib_file_len); memcpy(cmdLibHeader.file_name,ptr,lib_file_len); cmdLibHeader.file_name[lib_file_len] = '\0'; //printf("file_name=%s,",cmdLibHeader.file_name); ptr += lib_file_len; memcpy(cmdLibHeader.md5,ptr,MD5_MAX-1); cmdLibHeader.md5[MD5_MAX-1] = '\0'; //printf("lib_md5=%s,",cmdLibHeader.md5); ptr += MD5_MAX-1; memcpy(&lib_size,ptr,INT_LEN); cmdLibHeader.file_size = lib_size; //printf("lib_file_size=%d,",lib_size); ptr += INT_LEN; memcpy(&cmdLibHeader.version_code,ptr,INT_LEN); //printf("lib new code=%d\n",cmdLibHeader.version_code); ptr += INT_LEN; printf("lib name=%s,size=%dBytes,new version code=%d\n",cmdLibHeader.file_name,lib_size,cmdLibHeader.version_code); } if(updateFlag & 0x02) { int app_file_len = 0; memcpy(&app_file_len,ptr,INT_LEN); ptr += INT_LEN; //printf("app_file_name_len=%d,",app_file_len); memcpy(cmdAppHeader.file_name,ptr,app_file_len); cmdAppHeader.file_name[app_file_len] = '\0'; //printf("file_name=%s,",cmdAppHeader.file_name); ptr += app_file_len; memcpy(cmdAppHeader.md5,ptr,MD5_MAX-1); cmdAppHeader.md5[MD5_MAX-1] = '\0'; //printf("app_md5=%s,",cmdAppHeader.md5); ptr += MD5_MAX-1; memcpy(&app_size,ptr,INT_LEN); cmdAppHeader.file_size = app_size; //printf("app_file_size=%d,",app_size); ptr += INT_LEN; memcpy(&cmdAppHeader.version_code,ptr,INT_LEN); //printf("app new code=%d\n",cmdAppHeader.version_code); printf("app name=%s,size=%dBytes,new version code=%d\n",cmdAppHeader.file_name,app_size,cmdAppHeader.version_code); } int successFlag = 0;//0表示全部升级成功,否则,哪个标志位为1就表示哪个失败 if(updateFlag & 0x01) { ret = recvFile(fd,&cmdLibHeader); if(ret != 0) { successFlag |= 0x01; send(fd,&successFlag,INT_LEN,0);//不关心发送是否成功,直接升级 return -1; } } if(updateFlag & 0x02) { ret = recvFile(fd,&cmdAppHeader); if(ret != 0) { successFlag |= 0x02; send(fd,&successFlag,INT_LEN,0);//不关心发送是否成功,直接升级 return -1; } } send(fd,&successFlag,INT_LEN,0);//不关心发送是否成功,直接升级 return 0; }
int main(int argc,char **argv) { double wts, wte, all_s, all_e, calc_total=0, calc_head;; wts = get_wall_time(); ROT::SysInit(); setParam(argc, argv); wte = get_wall_time(); calc_head = wte - wts;; int sock0 = prepSSock(); while(1){ CPBWT::Server s; std::ifstream ifs; std::ofstream ofs; calc_total = calc_head; // all_s = get_wall_time(); int sock = acceptSSock(sock0); std::string file = tmp_dir_path + "c2s_pos"; recvFile(sock, (char *)file.c_str()); //receive positions from client all_s = get_wall_time(); wts = get_wall_time(); ifs.open(file.c_str(), std::ios::binary); int qlen, tmp; ifs >> qlen; while(1){ ifs >> tmp; if(tmp == -1){ break; } s.pos.push_back(tmp); } ifs.close(); std::cerr<<"read db\n"; int n=pbwt_n, m=pbwt_m; // DB size s.readPBWT(m,n,infile); s.makeLUTable(); file = tmp_dir_path + "param"; ofs.open(file.c_str(), std::ios::binary); // std::cerr<<s.v_length<<"\n"; ofs << s.samples <<"\n"; ofs << s.v_length <<"\n"; ofs << s.B0 <<"\n"; ofs << s.L0 <<"\n"; ofs << s.L1 <<"\n"; ofs.close(); wte = get_wall_time(); calc_total += wte - wts; sendFile(sock, (char *)file.c_str()); //send db parameters to client std::cerr<<"set db param, pubkey\n"; file = key_dir_path + "c2s_pubkey"; recvFile(sock, (char *)file.c_str()); //receive pubkey from client s.core = core; s.setParam(file); std::string queryf = tmp_dir_path + "squeryf"; std::string queryg = tmp_dir_path + "squeryg"; std::string resultf = tmp_dir_path + "sresultf"; std::string resultg = tmp_dir_path + "sresultg"; std::string ismatch = tmp_dir_path + "sismatch"; #ifdef DEBUG // std::string q = "1010101010"; std::string q = "1010101010111111111111111"; int select = 0; int f=select*(s.samples+1),g=(select+1)*(s.samples+1)-1; int blk = s.B0*s.L1; int zero = '0'; f += ('1'-zero)*blk; // fix query for debug g += ('1'-zero)*blk; std::cerr<<"f="<<f<<", g="<<g<<" ,ln="<<g-f<<"\n"; #endif for(int i=0;i<qlen;i++){ wts = get_wall_time(); std::cerr<<"round: "<<i<<"\n"; DBG_PRT("update table\n"); s.updtLUTable(); #ifdef DEBUG f=s.retV(f); g=s.retV(g); #endif int ranf0, ranf1, rang0, rang1; #pragma omp parallel #pragma omp sections { #pragma omp section { DBG_PRT("get resultf\n"); ranf0 = rand(); ranf1 = rand(); // ranf0=0; ranf1=0; //for debug if(i+1 == qlen){ ranf0=0; ranf1=0; } } #pragma omp section { DBG_PRT("get resultg\n"); rang0 = rand(); rang1 = rand(); // rang0=0; rang1=0; //for debug if(i+1 == qlen){ rang0=0; rang1=0; } } } wte = get_wall_time(); calc_total += wte - wts; DBG_PRT("recv queries\n"); recvFile(sock, (char *)queryf.c_str()); //receive query f from client recvFile(sock, (char *)queryg.c_str()); //receive query g from client wts = get_wall_time(); DBG_PRT("f:main server\n"); s.setPrevFr(); s.getOrgQuery(queryf, 0); s.getResult(queryf, ranf0, ranf1); s.storePrevFr(); s.makeResFile(resultf); DBG_PRT("g:main server\n"); s.setPrevGr(); s.getOrgQuery(queryg, 1); s.getResult(queryg, rang0, rang1); s.storePrevGr(); s.makeResFile(resultg); if(epsilon==0){ s.makeIsLongest(ismatch); }else{ s.makeIsELongest(ismatch, epsilon); } wte = get_wall_time(); calc_total += wte - wts; DBG_PRT("send results\n"); sendFile(sock, (char *)resultf.c_str()); //send result f to client sendFile(sock, (char *)resultg.c_str()); //send result g to client sendFile(sock, (char *)ismatch.c_str()); //send ismatch to client for(int j=0;j<s.pos.size();j++){ s.pos[j]++; } #ifdef DEBUG if(i+1 != qlen){ f += (q[i+1]-zero)*blk; g += (q[i+1]-zero)*blk; std::cerr<<"k="<<i+1<<", f="<<f<<", g="<<g<<", ln="<<g-f<<"\n"; } #endif } closeSock(sock); all_e = get_wall_time(); // std::cerr<<"server(Wall): "<<calc_total<<", "<<all_e-all_s<<"\n"; std::cerr<<"server(Wall): "<<all_e-all_s<<"\n"; } return(0); }
void ClientThread::analizeCommand(QByteArray &bytearray){ QString userName; if (bytearray.contains("USER")) { QRegExp rx("^USER\\s(.*)"); rx.indexIn(bytearray); userName = rx.cap(1); mUser = User::getUser(userName); sendString(FTPProtocol::getInstance()->getResponse(331)); return; } if (bytearray.contains("PASS")) { QRegExp rx("^PASS\\s(.*)"); rx.indexIn(bytearray); QString pass = rx.cap(1); if (mUser.isNull()) { sendString(FTPProtocol::getInstance()->getResponse(503,"PASS send before USER")); } else { if (mUser.auth(pass)) { // logged in sendString(FTPProtocol::getInstance()->getResponse(230)); setAuthenticated(true); if (ftpFileSystem != NULL) delete ftpFileSystem; ftpFileSystem = new FtpFileSystem(mUser.getFolder(), mUser.getFileAccess()); } else { // incorrect sendString(FTPProtocol::getInstance()->getResponse(530)); } } return; } if (isAuthenticated()) { // RNFR -> RNTO sequence if (mRenameBeginned){ if (bytearray.contains("RNTO")){ QRegExp rx("^RNTO\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString newName = rx.cap(1); mRenameBeginned = false; if (ftpFileSystem->rename(mRenameOldName, newName)) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } sendString(FTPProtocol::getInstance()->getResponse(503)); return; } if (bytearray.contains("SYST")){ QString syst("Windows Type : L8"); sendString(FTPProtocol::getInstance()->getResponse(215, syst)); return; } if (bytearray.contains("FEAT")){ QString syst("211-Features:\n\rMDTM\n\rREST STREAM\n\rSIZE\n\rMLST type*;size*;modify*;\n\rMLSD\n\rUTF8\n\rCLNT\n\rMFMT\n\r211 End"); sendString(syst); return; } if (bytearray.contains("HELP")){ QString syst("HELP OK"); sendString(FTPProtocol::getInstance()->getResponse(214, syst)); return; } if (bytearray.contains("PWD")){ sendString(FTPProtocol::getInstance()->getResponse(257, toEncoding("\""+ftpFileSystem->getWorkingDirectory()+"\""))); return; } if (bytearray.contains("OPTS")){ QRegExp rx("^OPTS ([\\w\\s]+)"); rx.indexIn(bytearray); QRegExp rx2("^UTF8 (\\w+)"); rx2.indexIn(rx.cap(1)); if (rx2.cap(1) == "ON") { mIsUTF8 = true; } if (rx2.cap(1) == "OFF") { mIsUTF8 = false; } sendString(FTPProtocol::getInstance()->getResponse(200)); return; } if (bytearray.contains("TYPE")){ // set transfer type QRegExp rx("^TYPE (\\w)( (\\w))?"); rx.indexIn(bytearray); qDebug() << "type" << rx.cap(1) << rx.cap(3); mType = rx.cap(1); sendString(FTPProtocol::getInstance()->getResponse(200)); return; if (mType == "I") { sendString(FTPProtocol::getInstance()->getResponse(200)); } else { sendString(FTPProtocol::getInstance()->getResponse(550)); } return; } if (bytearray.contains("PORT")){ mIsActiveMode = true; QRegExp rx("^PORT (\\d+),(\\d+),(\\d+),(\\d+),(\\d+),(\\d+)"); rx.indexIn(bytearray); int p1,p2; QString buf(rx.cap(5)); bool flag; p1 = rx.cap(5).toInt(&flag); p2 = rx.cap(6).toInt(&flag); QString addr = rx.cap(1)+"."+rx.cap(2)+"."+rx.cap(3)+"."+rx.cap(4); active_addr = addr; active_port = p1*256+p2; sendString(FTPProtocol::getInstance()->getResponse(200, "Port ok")); return; } if (bytearray.contains("LIST")){ sendString(FTPProtocol::getInstance()->getResponse(150)); sendList(); sendString(FTPProtocol::getInstance()->getResponse(226)); return; } if (bytearray.contains("QUIT")){ sendString(FTPProtocol::getInstance()->getResponse(221)); closeconnection(); return; } if (bytearray.contains("CDUP")){ if (ftpFileSystem->cdUp()) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } if (bytearray.contains("CWD")){ QRegExp rx("^CWD\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString subFolder = rx.cap(1); if (ftpFileSystem->changeDir(subFolder)) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } if (bytearray.contains("RETR")){ QRegExp rx("^RETR\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString filename = rx.cap(1); QString fullFileName = ftpFileSystem->getFileRead(filename); if (fullFileName != NULL) { sendString(FTPProtocol::getInstance()->getResponse(150)); sendFile(fullFileName); } else { sendString(FTPProtocol::getInstance()->getResponse(550,"Permission denied")); } return; } if (bytearray.contains("STOR")){ QRegExp rx("^STOR\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString filename = rx.cap(1); QString fullFileName = ftpFileSystem->getFileWrite(filename); if (fullFileName != NULL) { sendString(FTPProtocol::getInstance()->getResponse(150)); recvFile(fullFileName); } else { sendString(FTPProtocol::getInstance()->getResponse(550,"Permission denied")); } return; } if (bytearray.contains("RMD")){ QRegExp rx("^RMD\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString filename = rx.cap(1); if (ftpFileSystem->removeDir(filename)) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } if (bytearray.contains("DELE")){ QRegExp rx("^DELE\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString filename = rx.cap(1); if (ftpFileSystem->deleteFile(filename)) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } if (bytearray.contains("MKD")){ QRegExp rx("^MKD\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString dirName = rx.cap(1); if (ftpFileSystem->mkDir(dirName)) sendString(FTPProtocol::getInstance()->getResponse(250)); else sendString(FTPProtocol::getInstance()->getResponse(550)); return; } if (bytearray.contains("PASV")){ mIsActiveMode = false; selectPassivePort(); return; } if (bytearray.contains("SIZE")){ QRegExp rx("^SIZE\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString fileName = rx.cap(1); qint64 size; if (ftpFileSystem->getSize(fileName, &size)) { sendString(FTPProtocol::getInstance()->getResponse(250, QString::number(size))); } else { sendString(FTPProtocol::getInstance()->getResponse(550)); } return; } if (bytearray.contains("MDTM")){ QRegExp rx("^MDTM\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); QString fileName = rx.cap(1); QString sdate = ftpFileSystem->getLastModified(fileName); if (sdate != NULL) { sendString(FTPProtocol::getInstance()->getResponse(250, sdate)); } else { sendString(FTPProtocol::getInstance()->getResponse(550)); } return; } if (bytearray.contains("RNFR")){ QRegExp rx("^RNFR\\s(.*)"); rx.indexIn(fromEncoding(bytearray)); mRenameOldName = rx.cap(1); if (ftpFileSystem->exist(mRenameOldName) && ftpFileSystem->isWritable(mRenameOldName)) { sendString(FTPProtocol::getInstance()->getResponse(350)); mRenameBeginned = true; } else sendString(FTPProtocol::getInstance()->getResponse(550, "Permission denied")); return; } sendString(FTPProtocol::getInstance()->getResponse(500)); } else sendString(FTPProtocol::getInstance()->getResponse(530)); }