--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javaextensions/iapinfo/src.s60/iapinfoimpl.cpp Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,277 @@
+/*
+* Copyright (c) 2008 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:
+ *
+*/
+
+
+#include <cmmanager.h>
+#include <cmdestination.h>
+#include "jni.h"
+#include "stringbuffer.h"
+#include "com_nokia_mid_iapinfo_IAPInfoImpl.h"
+#include "logger.h"
+
+using namespace CommsDat;
+using namespace CMManager;
+using namespace java::util;
+
+_LIT(KSelector, ";");
+_LIT(KIDSelector, ",");
+
+jstring CreateJavaString(JNIEnv* aJNI, const HBufC* aString);
+jobjectArray GetDestinationNetworksL(JNIEnv * aJNI);
+jstring GetDestinationNetworkByIdL(JNIEnv* aJNI, jint aID);
+jstring GetDestinationNetworkByNameL(JNIEnv *aJNI, jstring aJName);
+void throwException(JNIEnv* aJNI, TInt aErrorCode);
+
+///////////////////////////////////////////////////////////////////////////////
+// Method: _getDestinationNetworks
+// Signature: ()I
+///////////////////////////////////////////////////////////////////////////////
+JNIEXPORT jobjectArray JNICALL Java_com_nokia_mid_iapinfo_IAPInfoImpl__1getDestinationNetworks
+(JNIEnv * aJNI, jclass)
+{
+ jobjectArray Object = NULL;
+ TInt err = KErrNone;
+ TRAP(err, Object = GetDestinationNetworksL(aJNI));
+ if (err != KErrNone)
+ {
+ throwException(aJNI, err);
+ return NULL;
+ }
+ return Object;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+//GetDestinationNetworksL
+// @param JNIEnv
+///////////////////////////////////////////////////////////////////////////////
+jobjectArray GetDestinationNetworksL(JNIEnv * aJNI)
+{
+
+ RCmManager localCmManagerExt;
+ LOG(EJavaIapInfo, EInfo,"using RCMManager");
+ localCmManagerExt.OpenL();
+ RArray<TUint32> destIdArray;
+ localCmManagerExt.AllDestinationsL(destIdArray);
+
+ //allocate the String array
+ TInt array_size = destIdArray.Count();
+ jobjectArray jarray = aJNI->NewObjectArray(array_size, aJNI->FindClass(
+ "java/lang/String"), aJNI->NewStringUTF(""));
+ for (TInt i = 0; i < destIdArray.Count(); i++)
+ {
+ StringBuffer* Buffer;
+ Buffer = StringBuffer::NewL();
+ CleanupStack::PushL(Buffer);
+ RCmDestination dest = localCmManagerExt.DestinationL(destIdArray[i]);
+ CleanupClosePushL(dest);
+ TUint32 ID = dest.Id();
+ Buffer->Append(ID);
+ Buffer->Append(KSelector);
+ HBufC* destName = dest.NameLC();
+ Buffer->Append(destName);
+ Buffer->Append(KSelector);
+ for (TInt j = 0; j < dest.ConnectionMethodCount(); j++)
+ {
+ TUint32 iapId =
+ dest.ConnectionMethodL(j).GetIntAttributeL(ECmIapId);
+ Buffer->Append(iapId);
+ Buffer->Append(KIDSelector);
+ }
+ aJNI->SetObjectArrayElement(jarray, i, CreateJavaString(aJNI,
+ Buffer->GetString()));
+ CleanupStack::PopAndDestroy(2);//destName, dest
+ CleanupStack::PopAndDestroy(1); // destroy the Buffer object
+ }//end for
+ localCmManagerExt.Close();
+
+ return jarray;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// Class: com_nokia_mid_iapinfo_IAPInfoImpl
+// Method: _getDestinationNetworkById
+// Signature: ()I
+///////////////////////////////////////////////////////////////////////////////
+JNIEXPORT jstring JNICALL Java_com_nokia_mid_iapinfo_IAPInfoImpl__1getDestinationNetworkById
+(JNIEnv* aJNI, jclass, jint aID)
+{
+ jstring Object = NULL;
+ TInt err = KErrNone;
+ TRAP(err, Object = GetDestinationNetworkByIdL(aJNI, aID));
+ if (err != KErrNone)
+ {
+ throwException(aJNI, err);
+ return NULL;
+ }
+ return Object;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// GetDestinationNetworkByIdL
+//
+// @param JNIEnv
+// @param jint aID
+//
+///////////////////////////////////////////////////////////////////////////////
+jstring GetDestinationNetworkByIdL(JNIEnv* aJNI, jint aID)
+{
+ RCmManager localCmManagerExt;
+ LOG(EJavaIapInfo, EInfo,"using RCMManager");
+ localCmManagerExt.OpenL();
+ //read all destinations
+ RArray<TUint32> destIdArray;
+ localCmManagerExt.AllDestinationsL(destIdArray);
+ StringBuffer* Buffer = StringBuffer::NewL();
+ CleanupStack::PushL(Buffer);
+ for (TInt i = 0; i < destIdArray.Count(); i++)
+ {
+ RCmDestination DestinationNetwork = localCmManagerExt.DestinationL(
+ destIdArray[i]);
+ CleanupClosePushL(DestinationNetwork);
+ //check the id.
+ TUint32 ID = DestinationNetwork.Id();
+ if (ID == aID)
+ {
+ Buffer->Append(ID);
+ Buffer->Append(KSelector);
+ //Destination network is found, add value to stringbuffer
+ HBufC* Name = DestinationNetwork.NameLC();
+ Buffer->Append(Name);
+ Buffer->Append(KSelector);
+ //get the ids of the Access points
+ for (TInt j = 0; j < DestinationNetwork.ConnectionMethodCount(); j++)
+ {
+ TUint32
+ iapId =
+ DestinationNetwork.ConnectionMethodL(j).GetIntAttributeL(
+ ECmIapId);
+ Buffer->Append(iapId);
+ Buffer->Append(KIDSelector);
+ }
+ CleanupStack::PopAndDestroy(1);//Name
+ i = destIdArray.Count(); //to exit
+ }
+ CleanupStack::PopAndDestroy(1); // DestinationNetwork
+ }
+
+ jstring ReturnString = CreateJavaString(aJNI, Buffer->GetString());
+ CleanupStack::PopAndDestroy(1);//Buffer
+ localCmManagerExt.Close();
+
+ return ReturnString;
+}
+/*
+ * Class: com_nokia_mid_iapinfo_IAPInfoImpl
+ * Method: _getDestinationNetworkByName
+ */
+JNIEXPORT jstring JNICALL Java_com_nokia_mid_iapinfo_IAPInfoImpl__1getDestinationNetworkByName
+(JNIEnv *aJNI, jclass, jstring aJName)
+{
+ jstring Object = NULL;
+ TInt err = KErrNone;
+ TRAP(err, Object = GetDestinationNetworkByNameL(aJNI, aJName));
+ if (err != KErrNone)
+ {
+ throwException(aJNI, err);
+ return NULL;
+ }
+ return Object;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// GetDestinationNetworkByNameL
+//
+// @param JNIEnv
+// @param aJName
+//
+///////////////////////////////////////////////////////////////////////////////
+jstring GetDestinationNetworkByNameL(JNIEnv *aJNI, jstring aJName)
+{
+ RCmManager localCmManagerExt;
+ LOG(EJavaIapInfo, EInfo,"using RCMManager");
+ localCmManagerExt.OpenL();
+ //read all destinations
+ RArray<TUint32> destIdArray;
+ localCmManagerExt.AllDestinationsL(destIdArray);
+ StringBuffer* Buffer = StringBuffer::NewL();
+ CleanupStack::PushL(Buffer);
+ HBufC* SearchString = Buffer->CreateHBufCFromJavaStringLC(aJNI, aJName);
+ for (TInt i = 0; i < destIdArray.Count(); i++)
+ {
+ RCmDestination DestinationNetwork = localCmManagerExt.DestinationL(
+ destIdArray[i]);
+ CleanupClosePushL(DestinationNetwork);
+ //check the id.
+ TUint32 ID = DestinationNetwork.Id();
+ HBufC* DNName = DestinationNetwork.NameLC();
+ if (DNName->Des().Compare(SearchString->Des()) == 0)
+ {
+ Buffer->Append(ID);
+ Buffer->Append(KSelector);
+ //Destination network is found, add value to stringbuffer
+ Buffer->Append(DNName);
+ Buffer->Append(KSelector);
+ //get the ids of the Access points
+ for (TInt j = 0; j < DestinationNetwork.ConnectionMethodCount(); j++)
+ {
+ TUint32
+ iapId =
+ DestinationNetwork.ConnectionMethodL(j).GetIntAttributeL(
+ ECmIapId);
+ Buffer->Append(iapId);
+ Buffer->Append(KIDSelector);
+ }//end for
+ i = destIdArray.Count();//to terminate for
+ }//end if
+ CleanupStack::PopAndDestroy(1);// DNName
+ CleanupStack::PopAndDestroy(1); // DestinationNetwork
+ }//end for
+ jstring ReturnString = CreateJavaString(aJNI, Buffer->GetString());
+ CleanupStack::PopAndDestroy(1);// SearchString
+ CleanupStack::PopAndDestroy(1);// Buffer
+ localCmManagerExt.Close();
+
+ return ReturnString;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// CreateJavaString Creates a java string from HBufC object
+//
+// @param JNIEnv
+// @param HBufC
+///////////////////////////////////////////////////////////////////////////////
+jstring CreateJavaString(JNIEnv* aJNI, const HBufC* aString)
+{
+ jstring str = aJNI->NewString(aString->Ptr(), aString->Length());
+ return str;
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// CreateJavaString Method to throw a java exception
+// @param JNIEnv* aJNI
+// @param TInt aErrorCode The error code
+///////////////////////////////////////////////////////////////////////////////
+void throwException(JNIEnv* aJNI, TInt aErrorCode)
+{
+ jclass clsException = aJNI->FindClass(
+ "com/nokia/mid/iapinfo/IAPInfoException");
+ TBuf8<40> buf;
+ buf.Append(_L("Native error: "));
+ buf.AppendNum(aErrorCode);
+ const char *temp = (const char *) buf.PtrZ();
+ aJNI->ThrowNew(clsException, temp);
+}