|
|
|
@ -47,6 +47,7 @@ typedef struct { |
|
|
|
|
} call_data; |
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
grpc_mdelem *status; |
|
|
|
|
grpc_mdelem *message; |
|
|
|
|
} channel_data; |
|
|
|
|
|
|
|
|
@ -57,6 +58,7 @@ static void call_op(grpc_call_element *elem, grpc_call_element *from_elem, |
|
|
|
|
|
|
|
|
|
switch (op->type) { |
|
|
|
|
case GRPC_SEND_START: |
|
|
|
|
grpc_call_recv_metadata(elem, grpc_mdelem_ref(channeld->status)); |
|
|
|
|
grpc_call_recv_metadata(elem, grpc_mdelem_ref(channeld->message)); |
|
|
|
|
grpc_call_stream_closed(elem); |
|
|
|
|
break; |
|
|
|
@ -93,18 +95,22 @@ static void init_channel_elem(grpc_channel_element *elem, |
|
|
|
|
const grpc_channel_args *args, grpc_mdctx *mdctx, |
|
|
|
|
int is_first, int is_last) { |
|
|
|
|
channel_data *channeld = elem->channel_data; |
|
|
|
|
char status[12]; |
|
|
|
|
|
|
|
|
|
GPR_ASSERT(is_first); |
|
|
|
|
GPR_ASSERT(is_last); |
|
|
|
|
|
|
|
|
|
channeld->message = grpc_mdelem_from_strings(mdctx, "grpc-message", |
|
|
|
|
"Rpc sent on a lame channel."); |
|
|
|
|
gpr_ltoa(GRPC_STATUS_UNKNOWN, status); |
|
|
|
|
channeld->status = grpc_mdelem_from_strings(mdctx, "grpc-status", status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void destroy_channel_elem(grpc_channel_element *elem) { |
|
|
|
|
channel_data *channeld = elem->channel_data; |
|
|
|
|
|
|
|
|
|
grpc_mdelem_unref(channeld->message); |
|
|
|
|
grpc_mdelem_unref(channeld->status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static const grpc_channel_filter lame_filter = { |
|
|
|
|