1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /*
- * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved.
- *
- * Licensed under the Apache License 2.0 (the "License"). You may not use
- * this file except in compliance with the License. You can obtain a copy
- * in the file LICENSE in the source distribution or at
- * https://www.openssl.org/source/license.html
- */
- #include <openssl/ocsp.h>
- #include <openssl/http.h>
- #include "../http/http_local.h"
- #ifndef OPENSSL_NO_OCSP
- OSSL_HTTP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path,
- const OCSP_REQUEST *req, int buf_size)
- {
- OSSL_HTTP_REQ_CTX *rctx = OSSL_HTTP_REQ_CTX_new(io, io, buf_size);
- if (rctx == NULL)
- return NULL;
- /*-
- * by default:
- * no bio_update_fn (and consequently no arg)
- * no ssl
- * no proxy
- * no timeout (blocking indefinitely)
- * no expected content type
- * max_resp_len = 100 KiB
- */
- if (!OSSL_HTTP_REQ_CTX_set_request_line(rctx, 1 /* POST */,
- NULL, NULL, path))
- goto err;
- /* by default, no extra headers */
- if (!OSSL_HTTP_REQ_CTX_set_expected(rctx,
- NULL /* content_type */, 1 /* asn1 */,
- 0 /* timeout */, 0 /* keep_alive */))
- goto err;
- if (req != NULL
- && !OSSL_HTTP_REQ_CTX_set1_req(rctx, "application/ocsp-request",
- ASN1_ITEM_rptr(OCSP_REQUEST),
- (const ASN1_VALUE *)req))
- goto err;
- return rctx;
- err:
- OSSL_HTTP_REQ_CTX_free(rctx);
- return NULL;
- }
- OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req)
- {
- OCSP_RESPONSE *resp = NULL;
- OSSL_HTTP_REQ_CTX *ctx;
- BIO *mem;
- ctx = OCSP_sendreq_new(b, path, req, 0 /* default buf_size */);
- if (ctx == NULL)
- return NULL;
- mem = OSSL_HTTP_REQ_CTX_exchange(ctx);
- resp = (OCSP_RESPONSE *)
- ASN1_item_d2i_bio(ASN1_ITEM_rptr(OCSP_RESPONSE), mem, NULL);
- BIO_free(mem);
- /* this indirectly calls ERR_clear_error(): */
- OSSL_HTTP_REQ_CTX_free(ctx);
- return resp;
- }
- #endif /* !defined(OPENSSL_NO_OCSP) */
|