|
|
|
@ -41,110 +41,86 @@ |
|
|
|
|
#include <grpc/support/alloc.h> |
|
|
|
|
#include <grpc/support/useful.h> |
|
|
|
|
|
|
|
|
|
#define MAX_APPEND 1024 |
|
|
|
|
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)); |
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
size_t cap; |
|
|
|
|
size_t len; |
|
|
|
|
char *buffer; |
|
|
|
|
} buf; |
|
|
|
|
|
|
|
|
|
static void bprintf(buf *b, const char *fmt, ...) { |
|
|
|
|
va_list arg; |
|
|
|
|
if (b->len + MAX_APPEND > b->cap) { |
|
|
|
|
b->cap = GPR_MAX(b->len + MAX_APPEND, b->cap * 3 / 2); |
|
|
|
|
b->buffer = gpr_realloc(b->buffer, b->cap); |
|
|
|
|
} |
|
|
|
|
va_start(arg, fmt); |
|
|
|
|
b->len += vsprintf(b->buffer + b->len, fmt, arg); |
|
|
|
|
va_end(arg); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void bputs(buf *b, const char *s) { |
|
|
|
|
size_t slen = strlen(s); |
|
|
|
|
if (b->len + slen + 1 > b->cap) { |
|
|
|
|
b->cap = GPR_MAX(b->len + slen + 1, b->cap * 3 / 2); |
|
|
|
|
b->buffer = gpr_realloc(b->buffer, b->cap); |
|
|
|
|
} |
|
|
|
|
strcat(b->buffer, s); |
|
|
|
|
b->len += slen; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void put_metadata(buf *b, grpc_mdelem *md) { |
|
|
|
|
char *txt; |
|
|
|
|
|
|
|
|
|
txt = gpr_hexdump((char *)GPR_SLICE_START_PTR(md->key->slice), |
|
|
|
|
GPR_SLICE_LENGTH(md->key->slice), GPR_HEXDUMP_PLAINTEXT); |
|
|
|
|
bputs(b, " key="); |
|
|
|
|
bputs(b, txt); |
|
|
|
|
gpr_free(txt); |
|
|
|
|
|
|
|
|
|
txt = gpr_hexdump((char *)GPR_SLICE_START_PTR(md->value->slice), |
|
|
|
|
GPR_SLICE_LENGTH(md->value->slice), GPR_HEXDUMP_PLAINTEXT); |
|
|
|
|
bputs(b, " value="); |
|
|
|
|
bputs(b, txt); |
|
|
|
|
gpr_free(txt); |
|
|
|
|
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)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
char *grpc_call_op_string(grpc_call_op *op) { |
|
|
|
|
buf b = {0, 0, 0}; |
|
|
|
|
char *tmp; |
|
|
|
|
char *out; |
|
|
|
|
|
|
|
|
|
gpr_strvec b; |
|
|
|
|
gpr_strvec_init(&b); |
|
|
|
|
|
|
|
|
|
switch (op->dir) { |
|
|
|
|
case GRPC_CALL_DOWN: |
|
|
|
|
bprintf(&b, ">"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup(">")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_CALL_UP: |
|
|
|
|
bprintf(&b, "<"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("<")); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
switch (op->type) { |
|
|
|
|
case GRPC_SEND_METADATA: |
|
|
|
|
bprintf(&b, "SEND_METADATA"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("SEND_METADATA")); |
|
|
|
|
put_metadata(&b, op->data.metadata); |
|
|
|
|
break; |
|
|
|
|
case GRPC_SEND_DEADLINE: |
|
|
|
|
bprintf(&b, "SEND_DEADLINE %d.%09d", op->data.deadline.tv_sec, |
|
|
|
|
gpr_asprintf(&tmp, "SEND_DEADLINE %d.%09d", op->data.deadline.tv_sec, |
|
|
|
|
op->data.deadline.tv_nsec); |
|
|
|
|
gpr_strvec_add(&b, tmp); |
|
|
|
|
break; |
|
|
|
|
case GRPC_SEND_START: |
|
|
|
|
bprintf(&b, "SEND_START pollset=%p", op->data.start.pollset); |
|
|
|
|
gpr_asprintf(&tmp, "SEND_START pollset=%p", op->data.start.pollset); |
|
|
|
|
gpr_strvec_add(&b, tmp); |
|
|
|
|
break; |
|
|
|
|
case GRPC_SEND_MESSAGE: |
|
|
|
|
bprintf(&b, "SEND_MESSAGE"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("SEND_MESSAGE")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_SEND_FINISH: |
|
|
|
|
bprintf(&b, "SEND_FINISH"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("SEND_FINISH")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_REQUEST_DATA: |
|
|
|
|
bprintf(&b, "REQUEST_DATA"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("REQUEST_DATA")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_METADATA: |
|
|
|
|
bprintf(&b, "RECV_METADATA"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("RECV_METADATA")); |
|
|
|
|
put_metadata(&b, op->data.metadata); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_DEADLINE: |
|
|
|
|
bprintf(&b, "RECV_DEADLINE %d.%09d", op->data.deadline.tv_sec, |
|
|
|
|
gpr_asprintf(&tmp, "RECV_DEADLINE %d.%09d", op->data.deadline.tv_sec, |
|
|
|
|
op->data.deadline.tv_nsec); |
|
|
|
|
gpr_strvec_add(&b, tmp); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_END_OF_INITIAL_METADATA: |
|
|
|
|
bprintf(&b, "RECV_END_OF_INITIAL_METADATA"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("RECV_END_OF_INITIAL_METADATA")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_MESSAGE: |
|
|
|
|
bprintf(&b, "RECV_MESSAGE"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("RECV_MESSAGE")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_HALF_CLOSE: |
|
|
|
|
bprintf(&b, "RECV_HALF_CLOSE"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("RECV_HALF_CLOSE")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_RECV_FINISH: |
|
|
|
|
bprintf(&b, "RECV_FINISH"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("RECV_FINISH")); |
|
|
|
|
break; |
|
|
|
|
case GRPC_CANCEL_OP: |
|
|
|
|
bprintf(&b, "CANCEL_OP"); |
|
|
|
|
gpr_strvec_add(&b, gpr_strdup("CANCEL_OP")); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
bprintf(&b, " flags=0x%08x", op->flags); |
|
|
|
|
gpr_asprintf(&tmp, " flags=0x%08x", op->flags); |
|
|
|
|
gpr_strvec_add(&b, tmp); |
|
|
|
|
|
|
|
|
|
out = gpr_strvec_flatten(&b); |
|
|
|
|
gpr_strvec_destroy(&b); |
|
|
|
|
|
|
|
|
|
return b.buffer; |
|
|
|
|
return out; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void grpc_call_log_op(char *file, int line, gpr_log_severity severity, |
|
|
|
|