From 2a2bee9c22d32704097d8fc45c5dabf5cdfb6406 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 9 Dec 2015 08:32:58 -0800 Subject: Basic server request bad_client template --- tools/codegen/core/gen_header_frame.py | 75 ++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100755 tools/codegen/core/gen_header_frame.py (limited to 'tools/codegen') diff --git a/tools/codegen/core/gen_header_frame.py b/tools/codegen/core/gen_header_frame.py new file mode 100755 index 0000000000..d063653411 --- /dev/null +++ b/tools/codegen/core/gen_header_frame.py @@ -0,0 +1,75 @@ +#!/usr/bin/env python2.7 +"""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) + -- cgit v1.2.3 From 2dd081955d2cc28630807092ef7f6fcccb6a80a4 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 9 Dec 2015 09:00:35 -0800 Subject: Add copyright --- tools/codegen/core/gen_header_frame.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'tools/codegen') diff --git a/tools/codegen/core/gen_header_frame.py b/tools/codegen/core/gen_header_frame.py index d063653411..96e6c67fa6 100755 --- a/tools/codegen/core/gen_header_frame.py +++ b/tools/codegen/core/gen_header_frame.py @@ -1,4 +1,34 @@ #!/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 -- cgit v1.2.3 From 934e9d72f8ba1fee6aa6e15372f5a5bdb89251d1 Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 9 Dec 2015 12:58:29 -0800 Subject: Re-legalize comma --- src/core/transport/metadata.c | 2 +- tools/codegen/core/gen_legal_metadata_characters.c | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) (limited to 'tools/codegen') diff --git a/src/core/transport/metadata.c b/src/core/transport/metadata.c index 4328bdd684..df05d1a302 100644 --- a/src/core/transport/metadata.c +++ b/src/core/transport/metadata.c @@ -711,7 +711,7 @@ int grpc_mdstr_is_legal_header(grpc_mdstr *s) { int grpc_mdstr_is_legal_nonbin_header(grpc_mdstr *s) { static const gpr_uint8 legal_header_bits[256 / 8] = { - 0x00, 0x00, 0x00, 0x00, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; return conforms_to(s, legal_header_bits); diff --git a/tools/codegen/core/gen_legal_metadata_characters.c b/tools/codegen/core/gen_legal_metadata_characters.c index 677fa5c155..c6658f46c6 100644 --- a/tools/codegen/core/gen_legal_metadata_characters.c +++ b/tools/codegen/core/gen_legal_metadata_characters.c @@ -72,7 +72,6 @@ int main(void) { clear(); for (i = 32; i <= 126; i++) { - if (i == ',') continue; legal(i); } dump(); -- cgit v1.2.3