javaextensions/iapinfo/src.s60/iapinfoimpl.cpp
branchRCL_3
changeset 19 04becd199f91
--- /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);
+}