aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/channel/call_op_string.c141
-rw-r--r--src/core/transport/chttp2_transport.c15
2 files changed, 14 insertions, 142 deletions
diff --git a/src/core/channel/call_op_string.c b/src/core/channel/call_op_string.c
deleted file mode 100644
index 5f7e1be268..0000000000
--- a/src/core/channel/call_op_string.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *
- * 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.
- *
- */
-
-#include "src/core/channel/channel_stack.h"
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "src/core/support/string.h"
-#include <grpc/support/alloc.h>
-#include <grpc/support/useful.h>
-
-static void put_metadata(gpr_strvec *b, grpc_mdelem *md) {
- gpr_strvec_add(b, gpr_strdup(" key="));
- gpr_strvec_add(
- b, gpr_hexdump((char *)GPR_SLICE_START_PTR(md->key->slice),
- GPR_SLICE_LENGTH(md->key->slice), GPR_HEXDUMP_PLAINTEXT));
-
- gpr_strvec_add(b, gpr_strdup(" value="));
- gpr_strvec_add(b, gpr_hexdump((char *)GPR_SLICE_START_PTR(md->value->slice),
- GPR_SLICE_LENGTH(md->value->slice),
- GPR_HEXDUMP_PLAINTEXT));
-}
-
-static void put_metadata_list(gpr_strvec *b, grpc_metadata_batch md) {
- grpc_linked_mdelem *m;
- for (m = md.list.head; m != NULL; m = m->next) {
- put_metadata(b, m->md);
- }
- if (gpr_time_cmp(md.deadline, gpr_inf_future) != 0) {
- char *tmp;
- gpr_asprintf(&tmp, " deadline=%d.%09d", md.deadline.tv_sec,
- md.deadline.tv_nsec);
- gpr_strvec_add(b, tmp);
- }
-}
-
-char *grpc_call_op_string(grpc_call_op *op) {
- char *tmp;
- char *out;
-
- gpr_strvec b;
- gpr_strvec_init(&b);
-
- switch (op->dir) {
- case GRPC_CALL_DOWN:
- gpr_strvec_add(&b, gpr_strdup(">"));
- break;
- case GRPC_CALL_UP:
- gpr_strvec_add(&b, gpr_strdup("<"));
- break;
- }
- switch (op->type) {
- case GRPC_SEND_METADATA:
- gpr_strvec_add(&b, gpr_strdup("SEND_METADATA"));
- put_metadata_list(&b, op->data.metadata);
- break;
- case GRPC_SEND_MESSAGE:
- gpr_strvec_add(&b, gpr_strdup("SEND_MESSAGE"));
- break;
- case GRPC_SEND_PREFORMATTED_MESSAGE:
- gpr_strvec_add(&b, gpr_strdup("SEND_PREFORMATTED_MESSAGE"));
- break;
- case GRPC_SEND_FINISH:
- gpr_strvec_add(&b, gpr_strdup("SEND_FINISH"));
- break;
- case GRPC_REQUEST_DATA:
- gpr_strvec_add(&b, gpr_strdup("REQUEST_DATA"));
- break;
- case GRPC_RECV_METADATA:
- gpr_strvec_add(&b, gpr_strdup("RECV_METADATA"));
- put_metadata_list(&b, op->data.metadata);
- break;
- case GRPC_RECV_MESSAGE:
- gpr_strvec_add(&b, gpr_strdup("RECV_MESSAGE"));
- break;
- case GRPC_RECV_HALF_CLOSE:
- gpr_strvec_add(&b, gpr_strdup("RECV_HALF_CLOSE"));
- break;
- case GRPC_RECV_FINISH:
- gpr_strvec_add(&b, gpr_strdup("RECV_FINISH"));
- break;
- case GRPC_RECV_SYNTHETIC_STATUS:
- gpr_asprintf(&tmp, "RECV_SYNTHETIC_STATUS status=%d message='%s'",
- op->data.synthetic_status.status,
- op->data.synthetic_status.message);
- gpr_strvec_add(&b, tmp);
- break;
- case GRPC_CANCEL_OP:
- gpr_strvec_add(&b, gpr_strdup("CANCEL_OP"));
- break;
- }
- gpr_asprintf(&tmp, " flags=0x%08x", op->flags);
- gpr_strvec_add(&b, tmp);
- if (op->bind_pollset) {
- gpr_strvec_add(&b, gpr_strdup("bind_pollset"));
- }
-
- out = gpr_strvec_flatten(&b, NULL);
- gpr_strvec_destroy(&b);
-
- return out;
-}
-
-void grpc_call_log_op(char *file, int line, gpr_log_severity severity,
- grpc_call_element *elem, grpc_call_op *op) {
- char *str = grpc_call_op_string(op);
- gpr_log(file, line, severity, "OP[%s:%p]: %s", elem->filter->name, elem, str);
- gpr_free(str);
-}
diff --git a/src/core/transport/chttp2_transport.c b/src/core/transport/chttp2_transport.c
index 97e6bae4bb..46bed36ac4 100644
--- a/src/core/transport/chttp2_transport.c
+++ b/src/core/transport/chttp2_transport.c
@@ -538,6 +538,19 @@ static void init_transport(transport *t, grpc_transport_setup_callback setup,
push_setting(t, GRPC_CHTTP2_SETTINGS_MAX_CONCURRENT_STREAMS,
channel_args->args[i].value.integer);
}
+ } else if (0 == strcmp(channel_args->args[i].key,
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER)) {
+ if (channel_args->args[i].type != GRPC_ARG_INTEGER) {
+ gpr_log(GPR_ERROR, "%s: must be an integer",
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER);
+ } else if ((t->next_stream_id & 1) !=
+ (channel_args->args[i].value.integer & 1)) {
+ gpr_log(GPR_ERROR, "%s: low bit must be %d on %s",
+ GRPC_ARG_HTTP2_INITIAL_SEQUENCE_NUMBER, t->next_stream_id & 1,
+ t->is_client ? "client" : "server");
+ } else {
+ t->next_stream_id = channel_args->args[i].value.integer;
+ }
}
}
}
@@ -1783,7 +1796,7 @@ static int process_read(transport *t, gpr_slice slice) {
/* fallthrough */
case DTS_FH_5:
GPR_ASSERT(cur < end);
- t->incoming_stream_id = (((gpr_uint32)*cur) << 24) & 0x7f;
+ t->incoming_stream_id = (((gpr_uint32)*cur) & 0x7f) << 24;
if (++cur == end) {
t->deframe_state = DTS_FH_6;
return 1;