static grpc_mdstr *user_agent_from_args(grpc_mdctx *mdctx, const grpc_channel_args *args) { gpr_strvec v; size_t i; int is_first = 1; char *tmp; grpc_mdstr *result; gpr_strvec_init(&v); for (i = 0; args && i < args->num_args; i++) { if (0 == strcmp(args->args[i].key, GRPC_ARG_PRIMARY_USER_AGENT_STRING)) { if (args->args[i].type != GRPC_ARG_STRING) { gpr_log(GPR_ERROR, "Channel argument '%s' should be a string", GRPC_ARG_PRIMARY_USER_AGENT_STRING); } else { if (!is_first) gpr_strvec_add(&v, gpr_strdup(" ")); is_first = 0; gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string)); } } } gpr_asprintf(&tmp, "%sgrpc-c/%s (%s)", is_first ? "" : " ", grpc_version_string(), GPR_PLATFORM_STRING); is_first = 0; gpr_strvec_add(&v, tmp); for (i = 0; args && i < args->num_args; i++) { if (0 == strcmp(args->args[i].key, GRPC_ARG_SECONDARY_USER_AGENT_STRING)) { if (args->args[i].type != GRPC_ARG_STRING) { gpr_log(GPR_ERROR, "Channel argument '%s' should be a string", GRPC_ARG_SECONDARY_USER_AGENT_STRING); } else { if (!is_first) gpr_strvec_add(&v, gpr_strdup(" ")); is_first = 0; gpr_strvec_add(&v, gpr_strdup(args->args[i].value.string)); } } } tmp = gpr_strvec_flatten(&v, NULL); gpr_strvec_destroy(&v); result = grpc_mdstr_from_string(mdctx, tmp, 0); gpr_free(tmp); return result; }
/* Version info */ GPR_EXPORT const char *GPR_CALLTYPE grpcsharp_version_string() { return grpc_version_string(); }