diff options
-rw-r--r-- | java/jvpp-common/string_t.h | 68 | ||||
-rw-r--r-- | java/jvpp-core/jvpp_core.c | 29 | ||||
-rw-r--r-- | java/jvpp-core/jvpp_core.h | 29 | ||||
-rwxr-xr-x | java/jvpp/gen/jvppgen/jvpp_model.py | 2 |
4 files changed, 71 insertions, 57 deletions
diff --git a/java/jvpp-common/string_t.h b/java/jvpp-common/string_t.h new file mode 100644 index 0000000..8a2b3cc --- /dev/null +++ b/java/jvpp-common/string_t.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2019 Cisco and/or its affiliates. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <jni.h> +#include <vlibapi/api_types.h> + +#ifndef JVPP_STRING_T_H +#define JVPP_STRING_T_H + +#endif //JVPP_STRING_T_H + +// +// /** +// * Returns the length of jstring as size_t +// */ +static size_t jstr_length(JNIEnv *env, jstring string) +{ + return ((int) (*env)->GetStringUTFLength(env, string)); +} + +// /** +// * Host to network byte order conversion for string type. Converts String in Java to VPP string type. +// * typedef struct +// * { +// * u32 length; +// * u8 buf[0]; +// * } __attribute__ ((packed)) vl_api_string_t; +// */ +static void _host_to_net_string(JNIEnv * env, jstring javaString, vl_api_string_t * vl_api_string) +{ + const char *nativeString; + // prevent null, which causes jni to crash + if (NULL != javaString) { + nativeString = (*env)->GetStringUTFChars(env, javaString, 0); + } else{ + nativeString = ""; + } + + vl_api_to_api_string(jstr_length(env, javaString) + 1, nativeString, vl_api_string); + + (*env)->ReleaseStringUTFChars(env, javaString, nativeString); +} + +// +// /** +// * Network to host byte order conversion for string type. Converts VPP string type to String in Java +// * typedef struct +// * { +// * u32 length; +// * u8 buf[0]; +// * } __attribute__ ((packed)) vl_api_string_t; +// */ +static jstring _net_to_host_string(JNIEnv * env, const vl_api_string_t * _net) +{ + return (*env)->NewStringUTF(env, (char *)_net->buf); +} diff --git a/java/jvpp-core/jvpp_core.c b/java/jvpp-core/jvpp_core.c index da8ab09..618793a 100644 --- a/java/jvpp-core/jvpp_core.c +++ b/java/jvpp-core/jvpp_core.c @@ -25,6 +25,7 @@ #include <vlibmemory/api.h> #include <jni.h> #include <jvpp_core.h> +#include <jvpp-common/string_t.h> // TODO: generate jvpp_plugin_name.c files (or at least reuse plugin's main structure) @@ -106,31 +107,3 @@ void JNI_OnUnload(JavaVM *vm, void *reserved) { } delete_class_references(env); } - - -static void _host_to_net_string(JNIEnv * env, jstring javaString, vl_api_string_t * vl_api_string) -{ - const char *nativeString; - // prevent null, which causes jni to crash - if (NULL != javaString) { - nativeString = (*env)->GetStringUTFChars(env, javaString, 0); - } else{ - nativeString = ""; - } - - vl_api_to_api_string(jstr_length(env, javaString) + 1, nativeString, vl_api_string); - - (*env)->ReleaseStringUTFChars(env, javaString, nativeString); -} - - -static jstring _net_to_host_string(JNIEnv * env, const vl_api_string_t * _net) -{ - return (*env)->NewStringUTF(env, (char *)_net->buf); -} - - -static size_t jstr_length(JNIEnv *env, jstring string) -{ - return ((int) (*env)->GetStringUTFLength(env, string)); -} diff --git a/java/jvpp-core/jvpp_core.h b/java/jvpp-core/jvpp_core.h index 032dd33..f310096 100644 --- a/java/jvpp-core/jvpp_core.h +++ b/java/jvpp-core/jvpp_core.h @@ -19,32 +19,3 @@ #include <vlibapi/api_types.h> #endif //VPP_JVPP_CORE_H - -// /** -// * Host to network byte order conversion for string type. Converts String in Java to VPP string type. -// * typedef struct -// * { -// * u32 length; -// * u8 buf[0]; -// * } __attribute__ ((packed)) vl_api_string_t; -// */ -static void _host_to_net_string(JNIEnv * env, jstring javaString, vl_api_string_t * vl_api_string); - - -// -// /** -// * Network to host byte order conversion for string type. Converts VPP string type to String in Java -// * typedef struct -// * { -// * u32 length; -// * u8 buf[0]; -// * } __attribute__ ((packed)) vl_api_string_t; -// */ -static jstring _net_to_host_string(JNIEnv * env, const vl_api_string_t * _net); - - -// -// /** -// * Returns the length of jstring as size_t -// */ -static size_t jstr_length(JNIEnv *env, jstring string); diff --git a/java/jvpp/gen/jvppgen/jvpp_model.py b/java/jvpp/gen/jvppgen/jvpp_model.py index c83b045..1b406ba 100755 --- a/java/jvpp/gen/jvppgen/jvpp_model.py +++ b/java/jvpp/gen/jvppgen/jvpp_model.py @@ -579,6 +579,8 @@ class JVppModel(object): type_name = _extract_type_name(field[0]) if type_name in self._types_by_name: + if field[0] == "string": + return Field(field[1], self._types_by_name[type_name]) if len(field) > 2: # Array field array_len_field = None |