This is an automated email from the ASF dual-hosted git repository.

bbender pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-native.git


The following commit(s) were added to refs/heads/develop by this push:
     new 8db8059  GEODE-9054: Parse ADD_PDX_TYPE message from client in gnmsg 
(#773)
8db8059 is described below

commit 8db8059c9f1183fd00761660899ac78740cb8065
Author: Blake Bender <[email protected]>
AuthorDate: Tue Mar 30 08:50:03 2021 -0700

    GEODE-9054: Parse ADD_PDX_TYPE message from client in gnmsg (#773)
---
 tools/gnmsg/client_messages.py | 60 ++++++++++++++++++++++++++++--------------
 tools/gnmsg/read_parts.py      | 53 +++++++++++++++++++++++++++++++++++++
 tools/gnmsg/server_messages.py | 33 +++++------------------
 3 files changed, 99 insertions(+), 47 deletions(-)

diff --git a/tools/gnmsg/client_messages.py b/tools/gnmsg/client_messages.py
index c4bb65c..0463046 100644
--- a/tools/gnmsg/client_messages.py
+++ b/tools/gnmsg/client_messages.py
@@ -17,20 +17,19 @@ import sys
 import json
 
 from read_values import (
-    read_number_from_hex_string,
+    call_reader_function,
+    parse_key_or_value,
     read_byte_value,
-    read_number_from_hex_string,
-    read_short_value,
-    read_number_from_hex_string,
+    read_cacheable,
     read_int_value,
+    read_jmutf8_string_value,
     read_long_value,
+    read_short_value,
     read_string_value,
-    read_jmutf8_string_value,
-    read_number_from_hex_string,
-    call_reader_function,
-    read_cacheable,
-    parse_key_or_value,
+    read_unsigned_byte_value,
 )
+from read_parts import read_object_header, read_int_part
+from numeric_conversion import decimal_string_to_hex_string, int_to_hex_string
 
 CHARS_IN_MESSAGE_HEADER = 34
 
@@ -403,25 +402,46 @@ def read_key_set(properties, message_bytes, offset):
     (properties["Region"], offset) = parse_region_part(message_bytes, offset)
 
 
+def read_object_as_raw_bytes(message_bytes, offset):
+    raw_bytes_part, offset = read_object_header(message_bytes, offset)
+
+    bytes_string = ""
+    for i in range(raw_bytes_part["Size"]):
+        if i:
+            bytes_string += " "
+        byte_val, offset = call_reader_function(
+            message_bytes, offset, read_unsigned_byte_value
+        )
+        bytes_string += decimal_string_to_hex_string(str(byte_val))
+    raw_bytes_part["Bytes"] = bytes_string
+    return raw_bytes_part, offset
+
+
+def read_add_pdx_type_message(properties, message_bytes, offset):
+    properties["PdxType"], offset = read_object_as_raw_bytes(message_bytes, 
offset)
+    properties["TypeId"], offset = read_int_part(message_bytes, offset)
+
+
 client_message_parsers = {
-    "PUT": read_put_message,
-    "REQUEST": read_request_message,
+    "ADD_PDX_TYPE": read_add_pdx_type_message,
+    "CLOSECQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
     "CLOSE_CONNECTION": read_close_connection_message,
     "CONTAINS_KEY": read_contains_key_message,
     "DESTROY": read_destroy_message,
-    "GET_CLIENT_PARTITION_ATTRIBUTES": 
read_get_client_partition_attributes_message,
-    "GET_CLIENT_PR_METADATA": read_get_client_pr_metadata_message,
-    "QUERY": read_query_message,
-    "USER_CREDENTIAL_MESSAGE": read_user_credential_message,
     "EXECUTECQ_MSG_TYPE": read_executecq_msg_type_message,
     "EXECUTECQ_WITH_IR_MSG_TYPE": read_executecq_with_ir_msg_type_message,
-    "STOPCQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
-    "CLOSECQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
+    "EXECUTE_FUNCTION": read_execute_function_message,
     "GET_ALL_70": read_get_all_70_message,
-    "KEY_SET": read_key_set,
-    "GET_PDX_ID_FOR_TYPE": read_get_pdx_id_for_type_message,
+    "GET_CLIENT_PARTITION_ATTRIBUTES": 
read_get_client_partition_attributes_message,
+    "GET_CLIENT_PR_METADATA": read_get_client_pr_metadata_message,
     "GET_FUNCTION_ATTRIBUTES": read_get_function_attributes_message,
-    "EXECUTE_FUNCTION": read_execute_function_message,
+    "GET_PDX_ID_FOR_TYPE": read_get_pdx_id_for_type_message,
+    "KEY_SET": read_key_set,
+    "PUT": read_put_message,
+    "QUERY": read_query_message,
+    "REQUEST": read_request_message,
+    "STOPCQ_MSG_TYPE": read_stopcq_or_closecq_msg_type_message,
+    "USER_CREDENTIAL_MESSAGE": read_user_credential_message,
 }
 
 
diff --git a/tools/gnmsg/read_parts.py b/tools/gnmsg/read_parts.py
new file mode 100644
index 0000000..4d9d12a
--- /dev/null
+++ b/tools/gnmsg/read_parts.py
@@ -0,0 +1,53 @@
+#!/usr/local/bin/python3
+
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+from read_values import (
+    call_reader_function,
+    parse_key_or_value,
+    read_byte_value,
+    read_cacheable,
+    read_int_value,
+    read_short_value,
+    read_unsigned_byte_value,
+    read_unsigned_vl,
+    read_string_value,
+)
+from numeric_conversion import int_to_hex_string
+
+
+def read_object_header(message_bytes, offset):
+    object_base = {}
+    (object_base["Size"], offset) = call_reader_function(
+        message_bytes, offset, read_int_value
+    )
+    (object_base["IsObject"], offset) = call_reader_function(
+        message_bytes, offset, read_byte_value
+    )
+    return object_base, offset
+
+
+def read_object_part(message_bytes, offset):
+    object_part, offset = read_object_header(message_bytes, offset)
+
+    offset += 2 * object_part["Size"]
+    return object_part, offset
+
+
+def read_int_part(message_bytes, offset):
+    int_part, offset = read_object_header(message_bytes, offset)
+
+    int_value, offset = call_reader_function(message_bytes, offset, 
read_int_value)
+    int_part["Value"] = int_to_hex_string(int_value)
+    return int_part, offset
diff --git a/tools/gnmsg/server_messages.py b/tools/gnmsg/server_messages.py
index 29771b6..a4616ae 100644
--- a/tools/gnmsg/server_messages.py
+++ b/tools/gnmsg/server_messages.py
@@ -24,6 +24,7 @@ from read_values import (
     read_unsigned_vl,
     read_string_value,
 )
+from read_parts import read_object_header, read_object_part, read_int_part
 from numeric_conversion import decimal_string_to_hex_string, int_to_hex_string
 from gnmsg_globals import global_protocol_state
 from enum import IntFlag
@@ -76,17 +77,6 @@ def read_partition_attributes(properties, message_bytes, 
offset):
         # TODO: parse part 3 if it is not partition resolver but list of 
partition attributes
 
 
-def read_object_header(message_bytes, offset):
-    object_base = {}
-    (object_base["Size"], offset) = call_reader_function(
-        message_bytes, offset, read_int_value
-    )
-    (object_base["IsObject"], offset) = call_reader_function(
-        message_bytes, offset, read_byte_value
-    )
-    return object_base, offset
-
-
 def read_bytes_part(message_bytes, offset):
     bytes_part, offset = read_object_header(message_bytes, offset)
 
@@ -100,14 +90,6 @@ def read_bytes_part(message_bytes, offset):
     return bytes_part, offset
 
 
-def read_int_part(message_bytes, offset):
-    int_part, offset = read_object_header(message_bytes, offset)
-
-    int_value, offset = call_reader_function(message_bytes, offset, 
read_int_value)
-    int_part["Value"] = decimal_string_to_hex_string(str(int_value))
-    return int_part, offset
-
-
 def read_old_value_part(message_bytes, offset):
     old_value_part, offset = read_object_header(message_bytes, offset)
 
@@ -123,13 +105,6 @@ def read_old_value_part(message_bytes, offset):
     return old_value_part, offset
 
 
-def read_object_part(message_bytes, offset):
-    object_part, offset = read_object_header(message_bytes, offset)
-
-    offset += 2 * object_part["Size"]
-    return object_part, offset
-
-
 def read_put_reply(properties, message_bytes, offset):
     (properties["Bytes"], offset) = read_bytes_part(message_bytes, offset)
     (properties["Flags"], offset) = read_int_part(message_bytes, offset)
@@ -271,14 +246,18 @@ def read_destroy_reply(properties, message_bytes, offset):
             message_bytes, offset
         )
 
+
 def read_exception_msg(properties, message_bytes, offset):
-    (properties["SerializedJavaObjectPart"], offset) = 
read_object_part(message_bytes, offset)
+    (properties["SerializedJavaObjectPart"], offset) = read_object_part(
+        message_bytes, offset
+    )
     object_part, offset = read_object_header(message_bytes, offset)
     (object_part["ExceptionMessageAndCallstack"], offset) = read_string_value(
         message_bytes, object_part["Size"], offset
     )
     properties["StringRepresentationPart"] = object_part
 
+
 server_message_parsers = {
     "CONTAINS_KEY_RESPONSE": read_contains_key_response,
     "DESTROY_REPLY": read_destroy_reply,

Reply via email to