blob: 535a3d328210c6df21f14840796d10154c6d36f8 [file] [log] [blame]
murgatroid99d47946b2015-03-09 14:27:07 -07001/*
2 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02003 * Copyright 2015 gRPC authors.
murgatroid99d47946b2015-03-09 14:27:07 -07004 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02005 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
murgatroid99d47946b2015-03-09 14:27:07 -07008 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +02009 * http://www.apache.org/licenses/LICENSE-2.0
murgatroid99d47946b2015-03-09 14:27:07 -070010 *
Jan Tattermusch7897ae92017-06-07 22:57:36 +020011 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
murgatroid99d47946b2015-03-09 14:27:07 -070016 *
17 */
18
Craig Tiller9533d042016-03-25 17:11:06 -070019#include "src/core/lib/surface/call.h"
murgatroid99d47946b2015-03-09 14:27:07 -070020
Yash Tibrewalfcd26bc2017-09-25 15:08:28 -070021#include <inttypes.h>
22
murgatroid99d47946b2015-03-09 14:27:07 -070023#include <grpc/support/alloc.h>
Masood Malekghassemi701af602015-06-03 15:01:17 -070024#include <grpc/support/string_util.h>
Craig Tiller7c70b6c2017-01-23 07:48:42 -080025#include "src/core/lib/slice/slice_string_helpers.h"
Craig Tiller9533d042016-03-25 17:11:06 -070026#include "src/core/lib/support/string.h"
murgatroid99d47946b2015-03-09 14:27:07 -070027
Craig Tillerbaa14a92017-11-03 09:09:36 -070028static void add_metadata(gpr_strvec* b, const grpc_metadata* md, size_t count) {
murgatroid99d47946b2015-03-09 14:27:07 -070029 size_t i;
Craig Tiller4782d922017-11-10 09:53:21 -080030 if (md == nullptr) {
Craig Tiller7c70b6c2017-01-23 07:48:42 -080031 gpr_strvec_add(b, gpr_strdup("(nil)"));
32 return;
33 }
Craig Tillerd6c98df2015-08-18 09:33:44 -070034 for (i = 0; i < count; i++) {
murgatroid99d47946b2015-03-09 14:27:07 -070035 gpr_strvec_add(b, gpr_strdup("\nkey="));
Craig Tiller7c70b6c2017-01-23 07:48:42 -080036 gpr_strvec_add(b, grpc_slice_to_c_string(md[i].key));
murgatroid99d47946b2015-03-09 14:27:07 -070037
38 gpr_strvec_add(b, gpr_strdup(" value="));
Craig Tiller7c70b6c2017-01-23 07:48:42 -080039 gpr_strvec_add(b,
40 grpc_dump_slice(md[i].value, GPR_DUMP_HEX | GPR_DUMP_ASCII));
murgatroid99d47946b2015-03-09 14:27:07 -070041 }
42}
43
Craig Tillerbaa14a92017-11-03 09:09:36 -070044char* grpc_op_string(const grpc_op* op) {
45 char* tmp;
46 char* out;
murgatroid99d47946b2015-03-09 14:27:07 -070047
48 gpr_strvec b;
49 gpr_strvec_init(&b);
50
51 switch (op->op) {
52 case GRPC_OP_SEND_INITIAL_METADATA:
53 gpr_strvec_add(&b, gpr_strdup("SEND_INITIAL_METADATA"));
54 add_metadata(&b, op->data.send_initial_metadata.metadata,
55 op->data.send_initial_metadata.count);
56 break;
57 case GRPC_OP_SEND_MESSAGE:
Mark D. Roth448c1f02017-01-25 10:44:30 -080058 gpr_asprintf(&tmp, "SEND_MESSAGE ptr=%p",
59 op->data.send_message.send_message);
murgatroid99d47946b2015-03-09 14:27:07 -070060 gpr_strvec_add(&b, tmp);
61 break;
62 case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
63 gpr_strvec_add(&b, gpr_strdup("SEND_CLOSE_FROM_CLIENT"));
64 break;
65 case GRPC_OP_SEND_STATUS_FROM_SERVER:
Craig Tiller7c70b6c2017-01-23 07:48:42 -080066 gpr_asprintf(&tmp, "SEND_STATUS_FROM_SERVER status=%d details=",
67 op->data.send_status_from_server.status);
murgatroid99d47946b2015-03-09 14:27:07 -070068 gpr_strvec_add(&b, tmp);
Craig Tiller4782d922017-11-10 09:53:21 -080069 if (op->data.send_status_from_server.status_details != nullptr) {
Craig Tiller7c70b6c2017-01-23 07:48:42 -080070 gpr_strvec_add(&b, grpc_dump_slice(
71 *op->data.send_status_from_server.status_details,
72 GPR_DUMP_ASCII));
73 } else {
74 gpr_strvec_add(&b, gpr_strdup("(null)"));
75 }
murgatroid99d47946b2015-03-09 14:27:07 -070076 add_metadata(&b, op->data.send_status_from_server.trailing_metadata,
77 op->data.send_status_from_server.trailing_metadata_count);
78 break;
79 case GRPC_OP_RECV_INITIAL_METADATA:
80 gpr_asprintf(&tmp, "RECV_INITIAL_METADATA ptr=%p",
Mark D. Roth448c1f02017-01-25 10:44:30 -080081 op->data.recv_initial_metadata.recv_initial_metadata);
murgatroid99d47946b2015-03-09 14:27:07 -070082 gpr_strvec_add(&b, tmp);
83 break;
84 case GRPC_OP_RECV_MESSAGE:
Mark D. Roth448c1f02017-01-25 10:44:30 -080085 gpr_asprintf(&tmp, "RECV_MESSAGE ptr=%p",
86 op->data.recv_message.recv_message);
murgatroid99d47946b2015-03-09 14:27:07 -070087 gpr_strvec_add(&b, tmp);
88 break;
89 case GRPC_OP_RECV_STATUS_ON_CLIENT:
90 gpr_asprintf(&tmp,
91 "RECV_STATUS_ON_CLIENT metadata=%p status=%p details=%p",
92 op->data.recv_status_on_client.trailing_metadata,
93 op->data.recv_status_on_client.status,
94 op->data.recv_status_on_client.status_details);
95 gpr_strvec_add(&b, tmp);
96 break;
97 case GRPC_OP_RECV_CLOSE_ON_SERVER:
98 gpr_asprintf(&tmp, "RECV_CLOSE_ON_SERVER cancelled=%p",
99 op->data.recv_close_on_server.cancelled);
100 gpr_strvec_add(&b, tmp);
101 }
Craig Tiller4782d922017-11-10 09:53:21 -0800102 out = gpr_strvec_flatten(&b, nullptr);
murgatroid99d47946b2015-03-09 14:27:07 -0700103 gpr_strvec_destroy(&b);
104
105 return out;
106}
107
Craig Tillerbaa14a92017-11-03 09:09:36 -0700108void grpc_call_log_batch(const char* file, int line, gpr_log_severity severity,
109 grpc_call* call, const grpc_op* ops, size_t nops,
110 void* tag) {
111 char* tmp;
murgatroid99d47946b2015-03-09 14:27:07 -0700112 size_t i;
Craig Tillerd6c98df2015-08-18 09:33:44 -0700113 for (i = 0; i < nops; i++) {
murgatroid99d47946b2015-03-09 14:27:07 -0700114 tmp = grpc_op_string(&ops[i]);
Yuchen Zeng64c0e8d2016-06-10 11:19:51 -0700115 gpr_log(file, line, severity, "ops[%" PRIuPTR "]: %s", i, tmp);
murgatroid99d47946b2015-03-09 14:27:07 -0700116 gpr_free(tmp);
117 }
118}