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;
}
예제 #2
0
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
    }