diff -r f5050f1da672 -r 04becd199f91 javacommons/gcfbase/src.s60/uri.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javacommons/gcfbase/src.s60/uri.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,79 @@ +/* +* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: URI parser specific to symbian +* +*/ + + + + +#include "turi.h" +#include "com_nokia_mj_impl_gcf_utils_URI.h" +#include "jstringutils.h" +#include "s60commonutils.h" + +using namespace java::util; + +JNIEXPORT jstring JNICALL Java_com_nokia_mj_impl_gcf_utils_URI__1parse +(JNIEnv* aJni, jobject, jstring aUriString, jint aUriPortion, + jstring aParameterName, jintArray aErrorCache) +{ + JStringUtils uriString(*aJni, aUriString); + TUri uri; + TInt error = uri.Parse(uriString); + TPtrC uriPart(KNullDesC()); + if (error == KErrNone) + { + switch (aUriPortion) + { + case com_nokia_mj_impl_gcf_utils_URI_PROTOCOL: + uriPart.Set(uri.Scheme()); + break; + case com_nokia_mj_impl_gcf_utils_URI_HOST: + uriPart.Set(uri.Host()); + break; + case com_nokia_mj_impl_gcf_utils_URI_PORT: + uriPart.Set(uri.Port()); + break; + case com_nokia_mj_impl_gcf_utils_URI_PATH: + uriPart.Set(uri.Path()); + break; + case com_nokia_mj_impl_gcf_utils_URI_PARAMETER: + { + JStringUtils parameterName(*aJni, aParameterName); + error = uri.GetParameterValue(parameterName, uriPart); + break; + } + case com_nokia_mj_impl_gcf_utils_URI_QUERY: + uriPart.Set(uri.Query()); + break; + default: + __ASSERT_DEBUG(EFalse, User::Invariant()); + } + } + jstring result = NULL; + // Return an empty string if the parameter value is not found + if (error == KErrNone) + { + result = S60CommonUtils::NativeToJavaString(*aJni, uriPart); + } + else + { + // Cache the error code in the array, as we can't return it + aJni->SetIntArrayRegion(aErrorCache, 0, 1, &error); + } + return result; +} + +