summaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
authorMichal Cmarada <mcmarada@cisco.com>2019-05-03 08:45:38 +0200
committerMichal Cmarada <mcmarada@cisco.com>2019-05-03 08:45:38 +0200
commit6fc28b0523978a6eca6d7d6ce12b6807bf6492c0 (patch)
tree3909990ccbf27b7b451290b85f7a23eae00f9526 /java
parent9acf8c452014a098113c06d74383633bfb6677d5 (diff)
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 <mcmarada@cisco.com>
Diffstat (limited to 'java')
-rw-r--r--java/jvpp-common/string_t.h68
-rw-r--r--java/jvpp-core/jvpp_core.c29
-rw-r--r--java/jvpp-core/jvpp_core.h29
-rwxr-xr-xjava/jvpp/gen/jvppgen/jvpp_model.py2
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