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;
}
bool DeployMonitor::fileDownload(MonitorWorker *mw, Properties &props)
{
	trace_enter();

	string fileName = props.getProperty("file.name");
	int fileSize = props.getInt("payloadSize");
	int rSize;
	unsigned char buf[FILE_BUF_SIZE];

	string filePath = createDeployPath(fileName);
	string mode("wb");
	OSFile f;

	trace("[fileDownload] filepath=" << filePath << ", fileSize==" << fileSize);

	if (f.open(filePath, mode) == false) {
		trace("File open error");
		mw->returnFail("deploy", "file.download", "File open error");
		return false;
	}

	int wlen = 0;
	try {
		while (fileSize > 0) {
			rSize = fileSize > FILE_BUF_SIZE ? FILE_BUF_SIZE : fileSize;
			rSize = mw->read(buf, rSize);
			wlen += f.write(buf, rSize);

			fileSize -= rSize;
		}

		mw->returnOK("deploy", "file.download", "ok");
		f.close();

		trace("[fileDownload] End : fileSize=" << fileSize << ", writeSize=" << wlen);

		return true;
	}
	catch (exception &ex) {
		mw->returnFail("deploy", "file.download", ex.what());
	}

	f.close();
	return false;
}