From 6fc28b0523978a6eca6d7d6ce12b6807bf6492c0 Mon Sep 17 00:00:00 2001 From: Michal Cmarada Date: Fri, 3 May 2019 08:45:38 +0200 Subject: fix vpp string type api implementation - separate static string functions to string_t.h library - ignore string limit value for now. We would need to create wrapper class for string to support max length in java. API example: [ "string", "version", { "limit": 32 } ] Change-Id: I60a8a2c56397d54d49544551dc91733e12a0a0ea Signed-off-by: Michal Cmarada --- java/jvpp-common/string_t.h | 68 +++++++++++++++++++++++++++++++++++++ java/jvpp-core/jvpp_core.c | 29 +--------------- java/jvpp-core/jvpp_core.h | 29 ---------------- java/jvpp/gen/jvppgen/jvpp_model.py | 2 ++ 4 files changed, 71 insertions(+), 57 deletions(-) create mode 100644 java/jvpp-common/string_t.h (limited to 'java') 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 +#include + +#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 #include #include +#include // 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 #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 -- cgit 1.2.3-korg