void grpc_httpcli_post(const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_httpcli_response_cb on_response, void *user_data) { internal_request *req; if (g_post_override && g_post_override(request, body_bytes, body_size, deadline, on_response, user_data)) { return; } req = gpr_malloc(sizeof(internal_request)); memset(req, 0, sizeof(*req)); req->request_text = grpc_httpcli_format_post_request(request, body_bytes, body_size); grpc_httpcli_parser_init(&req->parser); req->on_response = on_response; req->user_data = user_data; req->deadline = deadline; req->use_ssl = request->use_ssl; if (req->use_ssl) { req->host = gpr_strdup(request->host); } grpc_resolve_address(request->host, req->use_ssl ? "https" : "http", on_resolved, req); }
void grpc_httpcli_post(grpc_httpcli_context *context, grpc_pollset *pollset, const grpc_httpcli_request *request, const char *body_bytes, size_t body_size, gpr_timespec deadline, grpc_httpcli_response_cb on_response, void *user_data) { internal_request *req; char *name; if (g_post_override && g_post_override(request, body_bytes, body_size, deadline, on_response, user_data)) { return; } req = gpr_malloc(sizeof(internal_request)); memset(req, 0, sizeof(*req)); req->request_text = grpc_httpcli_format_post_request(request, body_bytes, body_size); grpc_httpcli_parser_init(&req->parser); req->on_response = on_response; req->user_data = user_data; req->deadline = deadline; req->use_ssl = request->use_ssl; req->context = context; req->pollset = pollset; gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->path); grpc_iomgr_register_object(&req->iomgr_obj, name); gpr_free(name); if (req->use_ssl) { req->host = gpr_strdup(request->host); } grpc_pollset_set_add_pollset(&req->context->pollset_set, req->pollset); grpc_resolve_address(request->host, req->use_ssl ? "https" : "http", on_resolved, req); }
static void test_fails(grpc_slice_split_mode split_mode, char *response) { grpc_httpcli_parser parser; gpr_slice input_slice = gpr_slice_from_copied_string(response); size_t num_slices; size_t i; gpr_slice *slices; int done = 0; grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); grpc_httpcli_parser_init(&parser); for (i = 0; i < num_slices; i++) { if (!done && !grpc_httpcli_parser_parse(&parser, slices[i])) { done = 1; } gpr_slice_unref(slices[i]); } if (!done && !grpc_httpcli_parser_eof(&parser)) { done = 1; } GPR_ASSERT(done); grpc_httpcli_parser_destroy(&parser); gpr_free(slices); }
static void internal_request_begin( grpc_exec_ctx *exec_ctx, grpc_httpcli_context *context, grpc_pollset *pollset, const grpc_httpcli_request *request, gpr_timespec deadline, grpc_httpcli_response_cb on_response, void *user_data, const char *name, gpr_slice request_text) { internal_request *req = gpr_malloc(sizeof(internal_request)); memset(req, 0, sizeof(*req)); req->request_text = request_text; grpc_httpcli_parser_init(&req->parser); req->on_response = on_response; req->user_data = user_data; req->deadline = deadline; req->handshaker = request->handshaker ? request->handshaker : &grpc_httpcli_plaintext; req->context = context; req->pollset = pollset; grpc_closure_init(&req->on_read, on_read, req); grpc_closure_init(&req->done_write, done_write, req); gpr_slice_buffer_init(&req->incoming); gpr_slice_buffer_init(&req->outgoing); grpc_iomgr_register_object(&req->iomgr_obj, name); req->host = gpr_strdup(request->host); req->ssl_host_override = gpr_strdup(request->ssl_host_override); grpc_pollset_set_add_pollset(exec_ctx, &req->context->pollset_set, req->pollset); grpc_resolve_address(request->host, req->handshaker->default_port, on_resolved, req); }
static void test_succeeds(grpc_slice_split_mode split_mode, char *response, int expect_status, char *expect_body, ...) { grpc_httpcli_parser parser; gpr_slice input_slice = gpr_slice_from_copied_string(response); size_t num_slices; size_t i; gpr_slice *slices; va_list args; grpc_split_slices(split_mode, &input_slice, 1, &slices, &num_slices); gpr_slice_unref(input_slice); grpc_httpcli_parser_init(&parser); for (i = 0; i < num_slices; i++) { GPR_ASSERT(grpc_httpcli_parser_parse(&parser, slices[i])); gpr_slice_unref(slices[i]); } GPR_ASSERT(grpc_httpcli_parser_eof(&parser)); GPR_ASSERT(expect_status == parser.r.status); if (expect_body != NULL) { GPR_ASSERT(strlen(expect_body) == parser.r.body_length); GPR_ASSERT(0 == memcmp(expect_body, parser.r.body, parser.r.body_length)); } else { GPR_ASSERT(parser.r.body_length == 0); } va_start(args, expect_body); i = 0; for (;;) { char *expect_key; char *expect_value; expect_key = va_arg(args, char *); if (!expect_key) break; GPR_ASSERT(i < parser.r.hdr_count); expect_value = va_arg(args, char *); GPR_ASSERT(expect_value); GPR_ASSERT(0 == strcmp(expect_key, parser.r.hdrs[i].key)); GPR_ASSERT(0 == strcmp(expect_value, parser.r.hdrs[i].value)); i++; } va_end(args); GPR_ASSERT(i == parser.r.hdr_count); grpc_httpcli_parser_destroy(&parser); gpr_free(slices); }