next up previous contents index
Next: Header Up: C++ Teilbereich Previous: C++ Teilbereich

Implementierung

#include <jni.h>
#include "jni_nativeBase.h"
#include <stdio.h>
#include <common/tools/tls_files.h>
#include "d:\\tis\\source\\admin\\sxa\\sxa.h"
#include "d:\\tis\\source\\admin\\sxa\\sxa_routines.h"

extern void *thePointerToIt ;
extern void **theNextElement ;
extern VArray theNodes;
extern VArray theDispatchers;
extern MsgBase* theMsgBase;
extern bool theResult ;
extern BArray gpRegisteredTypes;

/*
 * Class:     jni_nativeBase
 * Method:    getIntNative
 * Signature: ([I)I
 */
JNIEXPORT jint JNICALL Java_jni_nativeBase_getIntNative
  (JNIEnv *env, jclass, jintArray intArray) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  varBindPtr->name.idLength = env->GetArrayLength(intArray);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0);
  ResolveVarBind(varBindPtr,ASN_RFC1157_GETREQUEST);
  return varBindPtr->value.asnValue.number;
}

/*
 * Class:     jni_nativeBase
 * Method:    getStringNative
 * Signature: ([I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jni_nativeBase_getStringNative
(JNIEnv *env, jclass, jintArray intArray) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  char returnString[128];
  varBindPtr->name.idLength = env->GetArrayLength(intArray);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0);
  ResolveVarBind(varBindPtr,ASN_RFC1157_GETREQUEST);
  sprintf(returnString, "%s", varBindPtr->value.asnValue.string.stream);
  return env->NewStringUTF(returnString);
}

/*
 * Class:     jni_nativeBase
 * Method:    getNextIntNative
 * Signature: ([[I)I
 */
JNIEXPORT jint JNICALL Java_jni_nativeBase_getNextIntNative
(JNIEnv *env, jclass, jobjectArray objArray, jint oidIndex) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  // Read the incoming OID
  jintArray xxx = (jintArray) env->GetObjectArrayElement(objArray, oidIndex);
  varBindPtr->name.idLength = env->GetArrayLength(xxx);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(xxx,0);
  // Send the GETNEXT Request
  ResolveVarBind(varBindPtr,ASN_RFC1157_GETNEXTREQUEST);
  // Update OID for next GETNEXT-Request
  jobjectArray yyy = (jobjectArray)env->NewIntArray(varBindPtr->name.idLength);
  env->SetIntArrayRegion((jintArray)yyy,0,varBindPtr->name.idLength,(long*)varBindPtr->name.ids);
  env->SetObjectArrayElement(objArray,oidIndex,yyy);
  // attention: watch out for memory leaks!
  //Return Integer Value of assigned MIB-Variable
  return (int) varBindPtr->value.asnValue.number;
}

/*
 * Class:     jni_nativeBase
 * Method:    getNextStringNative
 * Signature: ([[I)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_jni_nativeBase_getNextStringNative
(JNIEnv *env, jclass, jobjectArray objArray, jint oidIndex) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  char returnString[128];
  // Read the incoming OID
  jintArray xxx = (jintArray) env->GetObjectArrayElement(objArray, oidIndex);
  varBindPtr->name.idLength = env->GetArrayLength(xxx);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(xxx,0);
  // Send the GETNEXT Request
  ResolveVarBind(varBindPtr,ASN_RFC1157_GETNEXTREQUEST);
  // Update OID for next GETNEXT-Request
  jobjectArray yyy = (jobjectArray)env->NewIntArray(varBindPtr->name.idLength);
  env->SetIntArrayRegion((jintArray)yyy,0,varBindPtr->name.idLength,(long*)varBindPtr->name.ids);
  env->SetObjectArrayElement(objArray,oidIndex,yyy);
  // attention: watch out for memory leaks!
  //Return Integer Value of assigned MIB-Variable
  sprintf(returnString, "%s", varBindPtr->value.asnValue.string.stream);
  return env->NewStringUTF(returnString);
}

/*
 * Class:     jni_nativeBase
 * Method:    setNative
 * Signature: ([II)V
 */
JNIEXPORT void JNICALL Java_jni_nativeBase_setNative___3II
(JNIEnv *env, jclass, jintArray intArray, jint newInt) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  varBindPtr->name.idLength = env->GetArrayLength(intArray);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0);
  varBindPtr->value.asnType = ASN_INTEGER;
  varBindPtr->value.asnValue.number = newInt;
  ResolveVarBind(varBindPtr,ASN_RFC1157_SETREQUEST);
}

/*
 * Class:     jni_nativeBase
 * Method:    setNative
 * Signature: ([ILjava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_jni_nativeBase_setNative___3ILjava_lang_String_2
(JNIEnv *env, jclass, jintArray intArray, jstring newString) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
  const char* pStr = env->GetStringUTFChars(newString,0);
  varBindPtr->name.idLength = env->GetArrayLength(intArray);
  varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0);
  varBindPtr->value.asnType = ASN_OCTETSTRING;
  varBindPtr->value.asnValue.string.stream = (unsigned char*) pStr;
  varBindPtr->value.asnValue.string.length = env->GetStringLength(newString);
  ResolveVarBind(varBindPtr,ASN_RFC1157_SETREQUEST);
  env->ReleaseStringUTFChars(newString, pStr);
}

/*
 * Class:     jni_nativeBase
 * Method:    removeNative
 * Signature: ([I)V
 */
JNIEXPORT void JNICALL Java_jni_nativeBase_removeNative
(JNIEnv *env, jclass, jintArray intArray) {
  RFC1157VarBind* varBindPtr = (RFC1157VarBind*) calloc(1,sizeof(RFC1157VarBind));
   varBindPtr->name.idLength = env->GetArrayLength(intArray);
   varBindPtr->name.ids = (unsigned int*) env->GetIntArrayElements(intArray,0);
   varBindPtr->value.asnType = ASN_INTEGER;
   varBindPtr->value.asnValue.number = SNMP_NULL;
   ResolveVarBind(varBindPtr,ASN_RFC1157_SETREQUEST);
}

/*
 * Class:     jni_nativeBase
 * Method:    buildCAsnNodeStructure
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_jni_nativeBase_buildCAsnNodeStructure
(JNIEnv *, jclass) {
  char path[MAX_FILENAME_LENGTH];
  FILE* mibFile ;
  char nextLine[256] ;
  VString* words ;
  UINT min_oid[] = { 1, 1}; 
  AsnObjectIdentifier a_small_oid = { OID_SIZEOF(min_oid), min_oid };
  UINT max_oid[] = { 1, 9}; //
  AsnObjectIdentifier a_big_oid = { OID_SIZEOF(max_oid), max_oid };
  InitializeCriticalSection(&gAlarmMailerCritSect);  // alarm mailer
  SetTypeRegistry(&gpRegisteredTypes);
  if (!CfgGetFileRoot("\\config\\tis_mib.mdf", path, sizeof(path)))
    exit(1)
    mibFile = fopen(path, "rt") ;
    if (mibFile != NULL) {
      // Start node list with lowest possible OID
      thePointerToIt = new CAsnNode(a_small_oid) ;
      if (0 == thePointerToIt) {
        theResult = false ;
      } else {
        theNextElement = (void**)theNodes.Append() ;
        *theNextElement = thePointerToIt ;
      }
      while (0 != fgets(nextLine,256,mibFile)) {
        words = LineToWords(nextLine) ;
        if (*(words[0]) != 0) {}
        if (words[0] == "NODE") {
          thePointerToIt = new CAsnNode(words) ;
          if (0 == thePointerToIt) {
            theResult = false ;
          } else {
            static_cast<CAsnNode*>(thePointerToIt)->Log() ;
            theNextElement = (void**)theNodes.Append() ;
            *theNextElement = thePointerToIt ;
          }
        } else if (words[0] == "DISPATCHER") {
          thePointerToIt = new CDispatcherProperties(words) ;
          if (0 == thePointerToIt) {
            theResult = false ;
          } else {
            static_cast<CDispatcherProperties*>(thePointerToIt)->Log() ;
            theNextElement = (void**)theDispatchers.Append() ;
            *theNextElement = thePointerToIt ;
          }
        }
        fclose(mibFile) ;
      } else {
        theResult = false ;
      }
    InitDispatch();
    InitDispIPC();
}

next up previous contents index
Next: Header Up: C++ Teilbereich Previous: C++ Teilbereich

Beispielbenutzer SuSE Linux 6.0
Sun May 9 21:16:36 MEST 1999