blob: 4443aba58a3be6e54400ac78f3ab546bcb8e5dea [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
murgatroid99d47946b2015-03-09 14:27:07 -070021#include <grpc/support/alloc.h>
Masood Malekghassemi701af602015-06-03 15:01:17 -070022#include <grpc/support/string_util.h>
Craig Tiller7c70b6c2017-01-23 07:48:42 -080023#include "src/core/lib/slice/slice_string_helpers.h"
Craig Tiller9533d042016-03-25 17:11:06 -070024#include "src/core/lib/support/string.h"
murgatroid99d47946b2015-03-09 14:27:07 -070025
murgatroid99d47946b2015-03-09 14:27:07 -070026static void add_metadata(gpr_strvec *b, const grpc_metadata *md, size_t count) {
27 size_t i;
Craig Tiller7c70b6c2017-01-23 07:48:42 -080028 if (md == NULL) {
29 gpr_strvec_add(b, gpr_strdup("(nil)"));
30 return;
31 }
Craig Tillerd6c98df2015-08-18 09:33:44 -070032 for (i = 0; i < count; i++) {
murgatroid99d47946b2015-03-09 14:27:07 -070033 gpr_strvec_add(b, gpr_strdup("\nkey="));
Craig Tiller7c70b6c2017-01-23 07:48:42 -080034 gpr_strvec_add(b, grpc_slice_to_c_string(md[i].key));
murgatroid99d47946b2015-03-09 14:27:07 -070035
36 gpr_strvec_add(b, gpr_strdup(" value="));
Craig Tiller7c70b6c2017-01-23 07:48:42 -080037 gpr_strvec_add(b,
38 grpc_dump_slice(md[i].value, GPR_DUMP_HEX | GPR_DUMP_ASCII));
murgatroid99d47946b2015-03-09 14:27:07 -070039 }
40}
41
42char *grpc_op_string(const grpc_op *op) {
43 char *tmp;
44 char *out;
45
46 gpr_strvec b;
47 gpr_strvec_init(&b);
48
49 switch (op->op) {
50 case GRPC_OP_SEND_INITIAL_METADATA:
51 gpr_strvec_add(&b, gpr_strdup("SEND_INITIAL_METADATA"));
52 add_metadata(&b, op->data.send_initial_metadata.metadata,
53 op->data.send_initial_metadata.count);
54 break;
55 case GRPC_OP_SEND_MESSAGE:
Mark D. Roth448c1f02017-01-25 10:44:30 -080056 gpr_asprintf(&tmp, "SEND_MESSAGE ptr=%p",
57 op->data.send_message.send_message);
murgatroid99d47946b2015-03-09 14:27:07 -070058 gpr_strvec_add(&b, tmp);
59 break;
60 case GRPC_OP_SEND_CLOSE_FROM_CLIENT:
61 gpr_strvec_add(&b, gpr_strdup("SEND_CLOSE_FROM_CLIENT"));
62 break;
63 case GRPC_OP_SEND_STATUS_FROM_SERVER:
Craig Tiller7c70b6c2017-01-23 07:48:42 -080064 gpr_asprintf(&tmp, "SEND_STATUS_FROM_SERVER status=%d details=",
65 op->data.send_status_from_server.status);
murgatroid99d47946b2015-03-09 14:27:07 -070066 gpr_strvec_add(&b, tmp);
Craig Tiller7c70b6c2017-01-23 07:48:42 -080067 if (op->data.send_status_from_server.status_details != NULL) {
68 gpr_strvec_add(&b, grpc_dump_slice(
69 *op->data.send_status_from_server.status_details,
70 GPR_DUMP_ASCII));
71 } else {
72 gpr_strvec_add(&b, gpr_strdup("(null)"));
73 }
murgatroid99d47946b2015-03-09 14:27:07 -070074 add_metadata(&b, op->data.send_status_from_server.trailing_metadata,
75 op->data.send_status_from_server.trailing_metadata_count);
76 break;
77 case GRPC_OP_RECV_INITIAL_METADATA:
78 gpr_asprintf(&tmp, "RECV_INITIAL_METADATA ptr=%p",
Mark D. Roth448c1f02017-01-25 10:44:30 -080079 op->data.recv_initial_metadata.recv_initial_metadata);
murgatroid99d47946b2015-03-09 14:27:07 -070080 gpr_strvec_add(&b, tmp);
81 break;
82 case GRPC_OP_RECV_MESSAGE:
Mark D. Roth448c1f02017-01-25 10:44:30 -080083 gpr_asprintf(&tmp, "RECV_MESSAGE ptr=%p",
84 op->data.recv_message.recv_message);
murgatroid99d47946b2015-03-09 14:27:07 -070085 gpr_strvec_add(&b, tmp);
86 break;
87 case GRPC_OP_RECV_STATUS_ON_CLIENT:
88 gpr_asprintf(&tmp,
89 "RECV_STATUS_ON_CLIENT metadata=%p status=%p details=%p",
90 op->data.recv_status_on_client.trailing_metadata,
91 op->data.recv_status_on_client.status,
92 op->data.recv_status_on_client.status_details);
93 gpr_strvec_add(&b, tmp);
94 break;
95 case GRPC_OP_RECV_CLOSE_ON_SERVER:
96 gpr_asprintf(&tmp, "RECV_CLOSE_ON_SERVER cancelled=%p",
97 op->data.recv_close_on_server.cancelled);
98 gpr_strvec_add(&b, tmp);
99 }
100 out = gpr_strvec_flatten(&b, NULL);
101 gpr_strvec_destroy(&b);
102
103 return out;
104}
105
106void grpc_call_log_batch(char *file, int line, gpr_log_severity severity,
107 grpc_call *call, const grpc_op *ops, size_t nops,
108 void *tag) {
109 char *tmp;
110 size_t i;
Craig Tillerd6c98df2015-08-18 09:33:44 -0700111 for (i = 0; i < nops; i++) {
murgatroid99d47946b2015-03-09 14:27:07 -0700112 tmp = grpc_op_string(&ops[i]);
Yuchen Zeng64c0e8d2016-06-10 11:19:51 -0700113 gpr_log(file, line, severity, "ops[%" PRIuPTR "]: %s", i, tmp);
murgatroid99d47946b2015-03-09 14:27:07 -0700114 gpr_free(tmp);
115 }
116}