|
|
|
@ -554,21 +554,6 @@ static int prepare_application_metadata(grpc_call *call, int count, |
|
|
|
|
int i; |
|
|
|
|
grpc_metadata_batch *batch = |
|
|
|
|
&call->metadata_batch[0 /* is_receiving */][is_trailing]; |
|
|
|
|
if (prepend_extra_metadata) { |
|
|
|
|
if (call->send_extra_metadata_count == 0) { |
|
|
|
|
prepend_extra_metadata = 0; |
|
|
|
|
} else { |
|
|
|
|
for (i = 0; i < call->send_extra_metadata_count; i++) { |
|
|
|
|
GRPC_MDELEM_REF(call->send_extra_metadata[i].md); |
|
|
|
|
} |
|
|
|
|
for (i = 1; i < call->send_extra_metadata_count; i++) { |
|
|
|
|
call->send_extra_metadata[i].prev = &call->send_extra_metadata[i - 1]; |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < call->send_extra_metadata_count - 1; i++) { |
|
|
|
|
call->send_extra_metadata[i].next = &call->send_extra_metadata[i + 1]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < count; i++) { |
|
|
|
|
grpc_metadata *md = &metadata[i]; |
|
|
|
|
grpc_linked_mdelem *l = (grpc_linked_mdelem *)&md->internal_data; |
|
|
|
@ -579,14 +564,37 @@ static int prepare_application_metadata(grpc_call *call, int count, |
|
|
|
|
GRPC_MDSTR_LENGTH(l->md->key))) { |
|
|
|
|
gpr_log(GPR_ERROR, "attempt to send invalid metadata key: %s", |
|
|
|
|
grpc_mdstr_as_c_string(l->md->key)); |
|
|
|
|
return 0; |
|
|
|
|
break; |
|
|
|
|
} else if (!grpc_is_binary_header(grpc_mdstr_as_c_string(l->md->key), |
|
|
|
|
GRPC_MDSTR_LENGTH(l->md->key)) && |
|
|
|
|
!grpc_header_nonbin_value_is_legal( |
|
|
|
|
grpc_mdstr_as_c_string(l->md->value), |
|
|
|
|
GRPC_MDSTR_LENGTH(l->md->value))) { |
|
|
|
|
gpr_log(GPR_ERROR, "attempt to send invalid metadata value"); |
|
|
|
|
return 0; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (i != count) { |
|
|
|
|
for (int j = 0; j <= i; j++) { |
|
|
|
|
grpc_metadata *md = &metadata[i]; |
|
|
|
|
grpc_linked_mdelem *l = (grpc_linked_mdelem *)&md->internal_data; |
|
|
|
|
GRPC_MDELEM_UNREF(l->md); |
|
|
|
|
} |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
if (prepend_extra_metadata) { |
|
|
|
|
if (call->send_extra_metadata_count == 0) { |
|
|
|
|
prepend_extra_metadata = 0; |
|
|
|
|
} else { |
|
|
|
|
for (i = 0; i < call->send_extra_metadata_count; i++) { |
|
|
|
|
GRPC_MDELEM_REF(call->send_extra_metadata[i].md); |
|
|
|
|
} |
|
|
|
|
for (i = 1; i < call->send_extra_metadata_count; i++) { |
|
|
|
|
call->send_extra_metadata[i].prev = &call->send_extra_metadata[i - 1]; |
|
|
|
|
} |
|
|
|
|
for (i = 0; i < call->send_extra_metadata_count - 1; i++) { |
|
|
|
|
call->send_extra_metadata[i].next = &call->send_extra_metadata[i + 1]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
for (i = 1; i < count; i++) { |
|
|
|
|