FileTransferAPIPtr FileManagerAPI::copy(std::string const &sourceUrl, std::string const &targetUrl, FB::JSObjectPtr const &callback) { FBLOG_DEBUG("FileManagerAPI::copy", "this=" << this << "\t" << "sourceUrl=" << sourceUrl << "\t" << "targetUrl=" << targetUrl << "\t" << "callback=" << callback); FB::URI sourceUri(sourceUrl); FB::URI targetUri(targetUrl); if(FileManagerAPI::isHttp(sourceUri) && FileManagerAPI::isHttp(targetUri)) { FBLOG_DEBUG("FileManagerAPI::copy", "Can't copy two Remote resources"); callback->InvokeAsync("", FB::variant_list_of(false)("Can't copy two Remote resources")); return FileTransferAPIPtr(); } if(FileManagerAPI::isInternal(targetUri)) { FBLOG_DEBUG("FileManagerAPI::copy", "Can't copy file into Internal resources"); callback->InvokeAsync("", FB::variant_list_of(false)("Can't copy file into Internal resources")); return FileTransferAPIPtr(); } if(FileManagerAPI::isHttp(sourceUri) && !isSameHost(sourceUri)) { FBLOG_DEBUG("FileManagerAPI::copy", "Can't use different host with remote resource (XSS)"); callback->InvokeAsync("", FB::variant_list_of(false)("Can't use different host with remote resource (XSS)")); return FileTransferAPIPtr(); } if(FileManagerAPI::isHttp(targetUri) && !isSameHost(targetUri)) { FBLOG_DEBUG("FileManagerAPI::copy", "Can't use different host with remote resource (XSS)"); callback->InvokeAsync("", FB::variant_list_of(false)("Can't use different host with remote resource (XSS)")); return FileTransferAPIPtr(); } FileTransferAPIPtr fileTransfer = getFactory()->getFileTransfer(sourceUri, targetUri, callback); return fileTransfer; }
DMAD_EXPORT_C void CDmAdEngine::CopyCommandL(const TDesC8& aTargetUri, const TDesC8& aTargetLuid, const TDesC8& aSourceUri, const TDesC8& aSourceLuid, const TDesC8& aType, TInt aStatusRef) { TRACE("CDmAdEngine::CopyCommandL"); DEBUG_LOG1(_L8("aTargetUri = %S"), &aTargetUri); DEBUG_LOG1(_L8("aTargetLuid = %S"), &aTargetLuid); DEBUG_LOG1(_L8("aSourceUri = %S"), &aSourceUri); DEBUG_LOG1(_L8("aSourceLuid = %S"), &aSourceLuid); DEBUG_LOG1(_L8("aType = %S"), &aType); DEBUG_LOG1(_L("aStatusRef = %d"), aStatusRef); TInt err = KErrNone; TPtrC8 sourceUri(TDmAdUtil::RemoveDotSlash(aSourceUri)); TInt status = KErrNone; CBufBase* object = 0; TRAP(err, status = DoFetchLeafObjectL(sourceUri, aSourceLuid, aType, object)); if (err != KErrNone) { iCallBack->SetStatusL(aStatusRef, err); return; } if (status != KErrNone) { delete object; iCallBack->SetStatusL(aStatusRef, status); return; } CleanupStack::PushL(object); DEBUG_LOG(_L("object:")); DEBUG_LOG_HEX(object->Ptr(0)); TPtrC8 targetUri(TDmAdUtil::RemoveDotSlash(aTargetUri)); TRAP(err, DoUpdateLeafObjectL(targetUri, aTargetLuid, object->Ptr(0), aType, aStatusRef)); if (err != KErrNone) { iCallBack->SetStatusL(aStatusRef, err); } CleanupStack::PopAndDestroy(); // object }