13d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby/* 23d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Copyright (C) 2014 The Android Open Source Project 33d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 43d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Licensed under the Apache License, Version 2.0 (the "License"); 53d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * you may not use this file except in compliance with the License. 63d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * You may obtain a copy of the License at 73d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 83d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * http://www.apache.org/licenses/LICENSE-2.0 93d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * 103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * Unless required by applicable law or agreed to in writing, software 113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * distributed under the License is distributed on an "AS IS" BASIS, 123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * See the License for the specific language governing permissions and 143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby * limitations under the License. 153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby */ 163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "DmtJavaPluginManager.h" 183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "DmtJavaPluginNode.h" 193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "DmtJavaPluginCommon.h" 203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include "DmtJavaMethod.h" 213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <android_runtime/AndroidRuntime.h> 233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#include <stdlib.h> 253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#define DECLARE_METHOD(method, methodName, methodParam) \ 273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaMethod method(mEnv, mJavaPluginManager, (methodName), (methodParam)); \ 283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!method.isFound()) \ 293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { \ 303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get %s() method\n", (methodName)); \ 313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; \ 323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#define DECLARE_STRING(obj, str) \ 353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJString obj(mEnv, mEnv->NewStringUTF(str)); \ 363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!obj) \ 373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { \ 383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to create jstring %s\n", (!str ? "" : str)); \ 393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; \ 403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby#define CHECK_EXCEPTION(retcode) \ 433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mEnv->ExceptionCheck()) \ 443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { \ 453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("An exception is thrown\n"); \ 463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby (retcode) = SYNCML_DM_FAIL; \ 473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtJavaPluginManager::DmtJavaPluginManager(const char* pPath, DMStringMap& mapParameters) 503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby : mEnv(NULL), mJavaPluginManager(mEnv), mIsInitialized(false) 513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!InitJNIEnv() || 533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby !InitJavaPluginManager() || 543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby !InitJavaPlugin(pPath, mapParameters)) 553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to init DmtJavaPluginManager!\n"); 573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return; 583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mIsInitialized = true; 613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambyDmtJavaPluginManager::~DmtJavaPluginManager() 643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (InitJNIEnv() && mEnv != NULL && mJavaPluginManager != NULL) 663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby ReleasePluginManager(); 683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambybool DmtJavaPluginManager::InitJNIEnv() 723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby JavaVM* jvm = android::AndroidRuntime::getJavaVM(); 743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (jvm != NULL) 753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return jvm->GetEnv((void**)&mEnv, JNI_VERSION_1_6) == JNI_OK; 773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby JavaVMOption options[1]; 803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby memset(&options, 0, sizeof(options)); 813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby options[0].optionString = "-Djava.class.path=/system/framework/com.android.omadm.plugin.jar:/system/framework/com.android.omadm.plugin.dev.jar"; 833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby JavaVMInitArgs initArgs; 853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby memset(&initArgs, 0, sizeof(initArgs)); 863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby initArgs.version = JNI_VERSION_1_6; 883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby initArgs.options = options; 893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby initArgs.nOptions = 1; 903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby initArgs.ignoreUnrecognized = JNI_TRUE; 913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Create new JVM\n"); 933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return JNI_CreateJavaVM(&jvm, &mEnv, &initArgs) == JNI_OK; 943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambybool DmtJavaPluginManager::InitJavaPluginManager() 973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaMethod constructor(mEnv,"com/android/omadm/plugin/impl/DmtPluginManager", "<init>", "()V"); 993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!constructor.isFound()) 1003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject localPluginManager(mEnv, mEnv->NewObject(constructor.getClass(), constructor.getMethodID())); 1053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!localPluginManager) 1063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to create new object for DmtPluginManager!\n"); 1083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mJavaPluginManager.assignValue(localPluginManager.getValue(), mEnv); 1123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return (mJavaPluginManager != NULL); 1143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambybool DmtJavaPluginManager::InitJavaPlugin(const char* pPath, DMStringMap& mapParameters) 1173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 1183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pPath == NULL) 1193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Path is null\n"); 1213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaMethod javaMethod(mEnv, mJavaPluginManager, "initJavaPlugin", "(Ljava/lang/String;[Ljava/lang/String;)Z"); 1253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!javaMethod.isFound()) 1263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get loadJavaPlugin()\n"); 1283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJString objPath(mEnv, mEnv->NewStringUTF(pPath)); 1323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJClass classString(mEnv, mEnv->FindClass("java/lang/String")); 1333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObjectArray objStrArray(mEnv, mEnv->NewObjectArray(mapParameters.size() * 2, classString, NULL)); 1343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!objPath || !classString || !objStrArray) 1353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to create jstring or jobjectArray\n"); 1373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby int i = 0; 1413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (DMStringMap::POS it = mapParameters.begin(); it != mapParameters.end(); it++) 1423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJString name(mEnv, mEnv->NewStringUTF(mapParameters.get_key(it).c_str())); 1443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJString value(mEnv, mEnv->NewStringUTF(mapParameters.get_value(it).c_str())); 1453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!name || !value) 1463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to create string for name or value\n"); 1483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return false; 1493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mEnv->SetObjectArrayElement(objStrArray, i , name); 1513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mEnv->SetObjectArrayElement(objStrArray, i + 1, value); 1523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby i += 2; 1543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby jboolean isInitialized = mEnv->CallBooleanMethod(mJavaPluginManager, javaMethod, 1573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby objPath.getValue(), objStrArray.getValue()); 1583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return (!mEnv->ExceptionCheck() && isInitialized); 1593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hambyvoid DmtJavaPluginManager::ReleasePluginManager() 1623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 1633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaMethod javaMethod(mEnv, mJavaPluginManager, "release", "()V"); 1643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!javaMethod.isFound()) { 1653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to get release() method\n"); 1663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return; 1673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mEnv->CallVoidMethod(mJavaPluginManager, javaMethod); 1703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 1713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::GetDmtNodeValue(jint& type, 1733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby char*& pValue, 1743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const DmtData& data) 1753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 1763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMString dmStringValue; 1773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = data.GetString(dmStringValue); 1793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (retcode != SYNCML_DM_SUCCESS) 1803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to get string value\n"); 1823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 1833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pStringValue = dmStringValue.c_str(); 1863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby size_t size = strlen(pStringValue) + 1; 1883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pValue = new char[size]; 1903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!pValue) { 1913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to allocate memory\n"); 1923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 1933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 1943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby strcpy(pValue, pStringValue); 1963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 1973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby switch (data.GetType()) 1983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 1993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_NULL: 2003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_NULL; 2013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_STRING: 2043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_STRING; 2053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_INT: 2083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_INT; 2093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_BOOL: 2123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_BOOL; 2133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_BIN: 2163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_BIN; 2173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_DATE: 2203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_DATE; 2213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_TIME: 2243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_TIME; 2253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case SYNCML_DM_DATAFORMAT_FLOAT: 2283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby type = JAVA_SYNCML_DM_DATAFORMAT_FLOAT; 2293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby default: 2323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Unsupported DmtData type=%d!\n", data.GetType()); 2333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby delete[] pValue; 2343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pValue = NULL; 2353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 2363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_SUCCESS; 2393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 2403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::SetDmtNodeValue(const char* pType, 2423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pValue, 2433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData& data) 2443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 2453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pType == NULL) 2463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 2473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get value type\n"); 2483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 2493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby switch (atoi(pType)) 2523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 2533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_NULL: 2543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(NULL, SYNCML_DM_DATAFORMAT_NULL); 2553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_STRING: 2583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_STRING); 2593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_INT: 2623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_INT); 2633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_BOOL: 2663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_BOOL); 2673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_BIN: 2703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetBinary((UINT8*)pValue, strlen(pValue)); 2713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_DATE: 2743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_DATE); 2753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_TIME: 2783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_TIME); 2793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_FLOAT: 2823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetString(pValue, SYNCML_DM_DATAFORMAT_FLOAT); 2833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 2843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 2853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby case JAVA_SYNCML_DM_DATAFORMAT_NODE: 2863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 2873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMStringVector vec; 2883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pValue != NULL && *pValue != 0) 2893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 2903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* nodeNameBegin = pValue; 2913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* nodeNameEnd = strchr(nodeNameBegin, '\n'); 2923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby while (nodeNameEnd != NULL) 2933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 2943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMString dmNodeName(nodeNameBegin, nodeNameEnd - nodeNameBegin); 2953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby vec.push_back(dmNodeName); 2963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeNameBegin = nodeNameEnd + 1; 2973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby nodeNameEnd = strchr(nodeNameBegin, '\n'); 2983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 2993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby data.SetNodeValue(vec); 3013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby break; 3033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby default: 3053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Unsupported value type\n"); 3063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_SUCCESS; 3093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 3103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::SetServerID(PDmtTree pTree) 3123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 3133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 3143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 3163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "setServerID", "(Ljava/lang/String;)V"); 3203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objServerID, pTree->GetPrincipal().getName().c_str()); 3213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby mEnv->CallVoidMethod(mJavaPluginManager, javaMethod, objServerID.getValue()); 3233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_SUCCESS; 3243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 3253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::SetNodeValue(const char* pPath, const DmtData& data) 3273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 3283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 3293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 3313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "setNodeValue", "(Ljava/lang/String;ILjava/lang/String;)I"); 3353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby jint type = 0; 3373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby char* pValue = NULL; 3383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = GetDmtNodeValue(type, pValue, data); 3393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (retcode != SYNCML_DM_SUCCESS) 3403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get node value\n"); 3423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 3433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath , pPath); 3463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objValue, (pValue == NULL ? "" : pValue)); 3473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pValue == NULL) { 3483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby delete[] pValue; 3493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pValue = NULL; 3503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, objPath.getValue(), type, objValue.getValue()); 3533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 3543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 3553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 3563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::GetNodeValue(const char* pPath, DmtData& data) 3583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 3593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 3603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 3623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "getNodeValue", "(Ljava/lang/String;)[Ljava/lang/String;"); 3663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath, pPath); 3673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* The getNodeValue return objStrArray with 2 elements. */ 3693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby /* The first element is value type and the second is the value. */ 3703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObjectArray objStrArray(mEnv); 3713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby objStrArray = static_cast<jobjectArray>(mEnv->CallObjectMethod(mJavaPluginManager, 3723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby javaMethod, 3733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby (jstring)objPath)); 3743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mEnv->ExceptionCheck() || !objStrArray) 3753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Got an error for getNodeValue()\n"); 3773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mEnv->GetArrayLength(objStrArray) != 2) 3813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (mEnv->GetArrayLength(objStrArray) == 1) { 3833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objStatus(mEnv, mEnv->GetObjectArrayElement(objStrArray, 0)); 3843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!objStatus) 3853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pStatus = mEnv->GetStringUTFChars((jstring)objStatus.getValue(), NULL); 3873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = atoi(pStatus); 3883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 3893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Array size is not 2!\n"); 3913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 3923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 3933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 3943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objType(mEnv, mEnv->GetObjectArrayElement(objStrArray, 0)); 3953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objValue(mEnv, mEnv->GetObjectArrayElement(objStrArray, 1)); 3963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!objType || !objValue) 3973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 3983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get value type or value object\n"); 3993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pType = mEnv->GetStringUTFChars((jstring)objType.getValue(), NULL); 4033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pValue = mEnv->GetStringUTFChars((jstring)objValue.getValue(), NULL); 4043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SetDmtNodeValue(pType, pValue, data); 4063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 4073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::CreateInteriorNode(const char* pPath) 4093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 4103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 4113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 4133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "createInteriorNode", "(Ljava/lang/String;)I"); 4173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath, pPath); 4183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, objPath.getValue()); 4203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 4213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 4223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 4233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::CreateLeafNode(const char* pPath, const DmtData& data) 4253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 4263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 4273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 4293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "createLeafNode", "(Ljava/lang/String;ILjava/lang/String;)I"); 4333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby jint type = 0; 4353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby char* pValue = NULL; 4363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = GetDmtNodeValue(type, pValue, data); 4373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (retcode != SYNCML_DM_SUCCESS) 4383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to get node value\n"); 4403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 4413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath, pPath); 4443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objValue, (pValue == NULL ? "" : pValue)); 4453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pValue != NULL) { 4463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby delete[] pValue; 4473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pValue = NULL; 4483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, objPath.getValue(), type, objValue.getValue()); 4513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 4523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 4533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 4543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::RenameNode(const char* pPath, const char* pNewNodeName) 4563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 4573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 4583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 4603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "renameNode", "(Ljava/lang/String;Ljava/lang/String;)I"); 4643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath, pPath); 4653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objNewNodeName, pNewNodeName); 4663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, 4683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby objPath.getValue(), objNewNodeName.getValue()); 4693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 4703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 4713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 4723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::DeleteNode(const char* pPath) 4743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 4753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 4763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 4783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "deleteNode", "(Ljava/lang/String;)I"); 4823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objPath, pPath); 4833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, objPath.getValue()); 4853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 4863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 4873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 4883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::Commit() 4903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 4913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 4923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 4933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 4943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 4953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 4963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "commit", "()I"); 4983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 4993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod); 5003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 5013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 5023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 5033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::ExecuteNode(const char* pArgs, 5053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pCorrelator, 5063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby PDmtTree pTree, 5073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DMString& results) 5083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 5093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby results = ""; 5103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pArgs == NULL || pTree == NULL) /*|| pCorrelator == NULL*/ 5123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("A parameter is null\n"); 5143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5163d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5173d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!mIsInitialized) 5183d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5193d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Plug-in is not initialized\n"); 5203d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5213d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5223d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5233d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = SetServerID(pTree); 5243d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (retcode != SYNCML_DM_SUCCESS) 5253d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5263d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to set ServerID\n"); 5273d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 5283d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5293d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5303d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 5313d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5323d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 5333d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5343d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5353d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5363d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "executeNode", "(Ljava/lang/String;Ljava/lang/String;)I"); 5373d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objArgs, pArgs); 5383d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_STRING(objCorrelator, (pCorrelator == NULL ? "" : pCorrelator) ); 5393d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5403d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby retcode = mEnv->CallIntMethod(mJavaPluginManager, javaMethod, objArgs.getValue(), objCorrelator.getValue()); 5413d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby CHECK_EXCEPTION(retcode); 5423d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 5433d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 5443d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5453d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake HambySYNCML_DM_RET_STATUS_T DmtJavaPluginManager::BuildPluginTree(PDmtJavaPluginTree pTree) 5463d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby{ 5473d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pTree == NULL) 5483d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5493d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Tree is NULL\n"); 5503d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5513d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5523d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5533d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!mIsInitialized) 5543d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5553d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Plug-in is not initialized\n"); 5563d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5573d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5583d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5593d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if(!InitJNIEnv()) 5603d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5613d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Init JNI Env failed...\n"); 5623d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5633d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5643d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5653d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DECLARE_METHOD(javaMethod, "getNodes", "()[Ljava/lang/String;"); 5663d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5673d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObjectArray objStrArray(mEnv); 5683d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby objStrArray = (jobjectArray)(mEnv->CallObjectMethod(mJavaPluginManager, javaMethod)); 5693d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!objStrArray) 5703d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5713d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Fail to get nodes\n"); 5723d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5733d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5743d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5753d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if ((mEnv->GetArrayLength(objStrArray) % 3) != 0) 5763d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5773d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Array count is invalid!\n"); 5783d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5793d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5803d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5813d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby for (int i = 0; i < mEnv->GetArrayLength(objStrArray); i += 3) 5823d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5833d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objPath(mEnv, mEnv->GetObjectArrayElement(objStrArray, i)); 5843d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objType(mEnv, mEnv->GetObjectArrayElement(objStrArray, i + 1)); 5853d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJObject objValue(mEnv, mEnv->GetObjectArrayElement(objStrArray, i + 2)); 5863d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (!objPath || !objType || !objValue) 5873d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5883d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to parse array, iteration:%d\n", i); 5893d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5903d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 5913d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 5923d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pPath = mEnv->GetStringUTFChars((jstring)objPath.getValue(), NULL); 5933d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pType = mEnv->GetStringUTFChars((jstring)objType.getValue(), NULL); 5943d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby const char* pValue = mEnv->GetStringUTFChars((jstring)objValue.getValue(), NULL); 5953d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (pPath == NULL || pType == NULL || pValue == NULL) 5963d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 5973d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtJavaPlugin_Debug("Failed to convert to string, iteration:%d\n", i); 5983d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_FAIL; 5993d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 6003d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 6013d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby DmtData data; 6023d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 6033d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby SYNCML_DM_RET_STATUS_T retcode = SetDmtNodeValue(pType, pValue, data); 6043d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby if (retcode != SYNCML_DM_SUCCESS) 6053d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby { 6063d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return retcode; 6073d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 6083d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 6093d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby PDmtJavaPluginNode pNode = new DmtJavaPluginNode(pTree, pPath, data); 6103d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 6113d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby pTree->SetNode(pPath, static_cast<PDmtNode>(pNode)); 6123d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby } 6133d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby 6143d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby return SYNCML_DM_SUCCESS; 6153d91e7ce47853dc4e6ec7e1fc675c3d1585e3c51Jake Hamby} 616