Exemplo n.º 1
0
Arquivo: httpcli.c Projeto: sihai/grpc
void grpc_httpcli_get(grpc_httpcli_context *context, grpc_pollset *pollset,
                      const grpc_httpcli_request *request,
                      gpr_timespec deadline,
                      grpc_httpcli_response_cb on_response, void *user_data) {
  internal_request *req;
  char *name;
  if (g_get_override &&
      g_get_override(request, deadline, on_response, user_data)) {
    return;
  }
  req = gpr_malloc(sizeof(internal_request));
  memset(req, 0, sizeof(*req));
  req->request_text = grpc_httpcli_format_get_request(request);
  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);
}
Exemplo n.º 2
0
void grpc_httpcli_get(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) {
  char *name;
  if (g_get_override &&
      g_get_override(exec_ctx, request, deadline, on_response, user_data)) {
    return;
  }
  gpr_asprintf(&name, "HTTP:GET:%s:%s", request->host, request->path);
  internal_request_begin(exec_ctx, context, pollset, request, deadline,
                         on_response, user_data, name,
                         grpc_httpcli_format_get_request(request));
  gpr_free(name);
}
Exemplo n.º 3
0
void grpc_httpcli_get(const grpc_httpcli_request *request,
                      gpr_timespec deadline,
                      grpc_httpcli_response_cb on_response, void *user_data) {
  internal_request *req;
  if (g_get_override &&
      g_get_override(request, deadline, on_response, user_data)) {
    return;
  }
  req = gpr_malloc(sizeof(internal_request));
  memset(req, 0, sizeof(*req));
  req->request_text = grpc_httpcli_format_get_request(request);
  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);
}
Exemplo n.º 4
0
static void test_format_get_request(void) {
  grpc_http_header hdr = {"x-yz", "abc"};
  grpc_httpcli_request req;
  gpr_slice slice;

  memset(&req, 0, sizeof(req));
  req.host = "example.com";
  req.http.path = "/index.html";
  req.http.hdr_count = 1;
  req.http.hdrs = &hdr;

  slice = grpc_httpcli_format_get_request(&req);

  GPR_ASSERT(0 == gpr_slice_str_cmp(slice,
                                    "GET /index.html HTTP/1.0\r\n"
                                    "Host: example.com\r\n"
                                    "Connection: close\r\n"
                                    "User-Agent: " GRPC_HTTPCLI_USER_AGENT
                                    "\r\n"
                                    "x-yz: abc\r\n"
                                    "\r\n"));

  gpr_slice_unref(slice);
}