diff options
Diffstat (limited to 'tools/codegen')
-rwxr-xr-x | tools/codegen/core/gen_header_frame.py | 105 | ||||
-rw-r--r-- | tools/codegen/core/gen_legal_metadata_characters.c | 2 | ||||
-rwxr-xr-x | tools/codegen/core/gen_server_registered_method_bad_client_test_body.py | 76 | ||||
-rwxr-xr-x | tools/codegen/core/gen_static_metadata.py | 2 |
4 files changed, 184 insertions, 1 deletions
diff --git a/tools/codegen/core/gen_header_frame.py b/tools/codegen/core/gen_header_frame.py new file mode 100755 index 0000000000..96e6c67fa6 --- /dev/null +++ b/tools/codegen/core/gen_header_frame.py @@ -0,0 +1,105 @@ +#!/usr/bin/env python2.7 + +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Read from stdin a set of colon separated http headers: + :path: /foo/bar + content-type: application/grpc + Write a set of strings containing a hpack encoded http2 frame that + represents said headers.""" + +import json +import sys + +# parse input, fill in vals +vals = [] +for line in sys.stdin: + line = line.strip() + if line == '': continue + if line[0] == '#': continue + key_tail, value = line[1:].split(':') + key = (line[0] + key_tail).strip() + value = value.strip() + vals.append((key, value)) + +# generate frame payload binary data +payload_bytes = [[]] # reserve space for header +payload_len = 0 +for key, value in vals: + payload_line = [] + payload_line.append(0x10) + assert(len(key) <= 126) + payload_line.append(len(key)) + payload_line.extend(ord(c) for c in key) + assert(len(value) <= 126) + payload_line.append(len(value)) + payload_line.extend(ord(c) for c in value) + payload_len += len(payload_line) + payload_bytes.append(payload_line) + +# fill in header +payload_bytes[0].extend([ + (payload_len >> 16) & 0xff, + (payload_len >> 8) & 0xff, + (payload_len) & 0xff, + # header frame + 0x01, + # flags + 0x04, + # stream id + 0x00, + 0x00, + 0x00, + 0x01 +]) + +hex_bytes = [ord(c) for c in "abcdefABCDEF0123456789"] + +def esc_c(line): + out = "\"" + last_was_hex = False + for c in line: + if 32 <= c < 127: + if c in hex_bytes and last_was_hex: + out += "\"\"" + if c != ord('"'): + out += chr(c) + else: + out += "\\\"" + last_was_hex = False + else: + out += "\\x%02x" % c + last_was_hex = True + return out + "\"" + +# dump bytes +for line in payload_bytes: + print esc_c(line) + diff --git a/tools/codegen/core/gen_legal_metadata_characters.c b/tools/codegen/core/gen_legal_metadata_characters.c index 677fa5c155..3c9e1c7619 100644 --- a/tools/codegen/core/gen_legal_metadata_characters.c +++ b/tools/codegen/core/gen_legal_metadata_characters.c @@ -68,11 +68,11 @@ int main(void) { for (i = '0'; i <= '9'; i++) legal(i); legal('-'); legal('_'); + legal('.'); dump(); clear(); for (i = 32; i <= 126; i++) { - if (i == ',') continue; legal(i); } dump(); diff --git a/tools/codegen/core/gen_server_registered_method_bad_client_test_body.py b/tools/codegen/core/gen_server_registered_method_bad_client_test_body.py new file mode 100755 index 0000000000..76c98767e6 --- /dev/null +++ b/tools/codegen/core/gen_server_registered_method_bad_client_test_body.py @@ -0,0 +1,76 @@ +#!/usr/bin/env python2.7 + +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +def esc_c(line): + out = "\"" + last_was_hex = False + for c in line: + if 32 <= c < 127: + if c in hex_bytes and last_was_hex: + out += "\"\"" + if c != ord('"'): + out += chr(c) + else: + out += "\\\"" + last_was_hex = False + else: + out += "\\x%02x" % c + last_was_hex = True + return out + "\"" + +done = set() + +for message_length in range(0, 3): + for send_message_length in range(0, message_length + 1): + payload = [ + 0, + (message_length >> 24) & 0xff, + (message_length >> 16) & 0xff, + (message_length >> 8) & 0xff, + (message_length) & 0xff + ] + send_message_length * [0] + for frame_length in range(0, len(payload) + 1): + is_end = frame_length == len(payload) and send_message_length == message_length + frame = [ + (frame_length >> 16) & 0xff, + (frame_length >> 8) & 0xff, + (frame_length) & 0xff, + 0, + 1 if is_end else 0, + 0, 0, 0, 1 + ] + payload[0:frame_length] + text = esc_c(frame) + if text not in done: + print 'GRPC_RUN_BAD_CLIENT_TEST(verifier_%s, PFX_STR %s, %s);' % ( + 'succeeds' if is_end else 'fails', + text, + '0' if is_end else 'GRPC_BAD_CLIENT_DISCONNECT') + done.add(text) diff --git a/tools/codegen/core/gen_static_metadata.py b/tools/codegen/core/gen_static_metadata.py index 86cb4143f8..3e47d7f6d5 100755 --- a/tools/codegen/core/gen_static_metadata.py +++ b/tools/codegen/core/gen_static_metadata.py @@ -50,6 +50,8 @@ CONFIG = [ 'host', 'grpc-message', 'grpc-status', + 'census', + 'census-bin', '', ('grpc-status', '0'), ('grpc-status', '1'), |