int32_t elasticsearch_connection_post(struct elasticsearch_connection *conn, const char *url, const char *cmd) { struct http_client_request *http_req = NULL; struct istream *post_payload = NULL; if (conn == NULL || url == NULL || cmd == NULL) { i_error("fts_elasticsearch: connection_post: critical error during POST"); return -1; } else { /* safe to continue */ } /* binds a callback object to elasticsearch_connection_http_response */ http_req = elasticsearch_connection_http_request(conn, url); post_payload = i_stream_create_from_data(cmd, strlen(cmd)); http_client_request_set_payload(http_req, post_payload, TRUE); i_stream_unref(&post_payload); http_client_request_submit(http_req); conn->request_status = 0; http_client_wait(elasticsearch_http_client); return conn->request_status; }
void http_client_request_set_payload_data(struct http_client_request *req, const unsigned char *data, size_t size) { struct istream *input; unsigned char *payload_data; if (size == 0) return; payload_data = p_malloc(req->pool, size); memcpy(payload_data, data, size); input = i_stream_create_from_data(payload_data, size); http_client_request_set_payload(req, input, FALSE); i_stream_unref(&input); }