bool DeployMonitor::fileUploadTwoWay(MonitorWorker *mw, Properties &props) { trace_enter(); string fileName = props.getProperty("file.name"); string filePath = getDeployPath(fileName); trace("filepath=" << filePath); OSFile f; string mode("rb"); if (f.open(filePath, mode) == false) { mw->returnFail("deploy", "file.download", "File open error"); return false; } unsigned char buf[FILE_BUF_SIZE]; int fileSize; int rSize; fileSize = f.sizeOf(); trace("[fileUpload] filepath=" << filePath << ", fileSize=" << fileSize); int wlen = 0; try { while (fileSize > 0) { rSize = fileSize > FILE_BUF_SIZE ? FILE_BUF_SIZE : fileSize; rSize = f.read(buf, rSize); if (rSize <= 0) break; mw->writeString("ver=1.0;target=deploy;cmd=file.upload;success=ok;ret=ok;payloadSize=" + StringUtil::intToStr(rSize) + "\n"); wlen += mw->write(buf, rSize); fileSize -= rSize; trace("[fileUpload] Write done : fileSize=" << fileSize << ", writeSize=" << wlen); mw->readLine((char *) buf, FILE_BUF_SIZE); } f.close(); mw->writeString("ver=1.0;target=deploy;cmd=file.upload;success=ok;ret=ok;payloadSize=0\n"); trace("[fileUpload] End : fileSize=" << fileSize << ", writeSize=" << wlen); return true; } catch (exception &ex) { log_error(ex.what()); } f.close(); return false; }