---
name: "libressl-OCSP_sendreq_new"
section: "3"
platform: "linux"
package: "libressl"
version: "4.4.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libressl-OCSP_sendreq_new"
---

# libressl-OCSP\_sendreq\_new(3)

OCSP responder query functions

## NAME

**OCSP\_sendreq\_new**, **OCSP\_sendreq\_nbio**, **OCSP\_REQ\_CTX\_free**, **OCSP\_REQ\_CTX\_add1\_header**, **OCSP\_REQ\_CTX\_set1\_req**, **OCSP\_parse\_url**, **OCSP\_sendreq\_bio** – OCSP responder query functions

## SYNOPSIS

Crypto Library (libcrypto, -lcrypto)

**#include \<openssl/ocsp.h\>**

*OCSP\_REQ\_CTX* *\**\

**OCSP\_sendreq\_new**(*BIO \*io*, *const char \*path*, *OCSP\_REQUEST \*req*, *int maxline*);

*int*\

**OCSP\_sendreq\_nbio**(*OCSP\_RESPONSE \*\*presp*, *OCSP\_REQ\_CTX \*rctx*);

*void*\

**OCSP\_REQ\_CTX\_free**(*OCSP\_REQ\_CTX \*rctx*);

*int*\

**OCSP\_REQ\_CTX\_add1\_header**(*OCSP\_REQ\_CTX \*rctx*, *const char \*name*, *const char \*value*);

*int*\

**OCSP\_REQ\_CTX\_set1\_req**(*OCSP\_REQ\_CTX \*rctx*, *OCSP\_REQUEST \*req*);

*int*\

**OCSP\_parse\_url**(*const char \*url*, *char \*\*phost*, *char \*\*pport*, *char \*\*ppath*, *int \*pssl*);

*OCSP\_RESPONSE* *\**\

**OCSP\_sendreq\_bio**(*BIO \*io*, *const char \*path*, *OCSP\_REQUEST \*req*);

## DESCRIPTION

The function **OCSP\_sendreq\_new**() returns an *OCSP\_REQ\_CTX* structure using the responder *io*, the URI path *path*, the OCSP request *req* and with a response header maximum line length of *maxline*. If *maxline* is zero, a default value of 4k is used. The OCSP request *req* may be set to NULL and provided later if required.

The arguments to **OCSP\_sendreq\_new**() correspond to the components of the URI. For example, if the responder URI is *http://ocsp.com/ocspreq*, the BIO *io* should be connected to host *ocsp.com* on port 80 and *path* should be set to "/ocspreq".

**OCSP\_sendreq\_nbio**() performs non-blocking I/O on the OCSP request context *rctx*. When the operation is complete, it returns the response in \**presp*. If **OCSP\_sendreq\_nbio**() indicates an operation should be retried, the corresponding BIO can be examined to determine which operation (read or write) should be retried and appropriate action can be taken, for example a [select(2)](/select/2.md) call on the underlying socket.

**OCSP\_REQ\_CTX\_free**() frees up the OCSP context *rctx*.

**OCSP\_REQ\_CTX\_add1\_header**() adds header *name* with value *value* to the context *rctx*. The added headers are of the form "*name*, *value*:" or just "*name*" if *value* is NULL. **OCSP\_REQ\_CTX\_add1\_header**() can be called more than once to add multiple headers. It must be called before any calls to **OCSP\_sendreq\_nbio**(). The *req* parameter in the initial to **OCSP\_sendreq\_new**() call must be set to NULL if additional headers are set.

**OCSP\_REQ\_CTX\_set1\_req**() sets the OCSP request in *rctx* to *req*. This function should be called after any calls to **OCSP\_REQ\_CTX\_add1\_header**().

**OCSP\_parse\_url**() is a utility function to parse a *url* of the form **http**\[**s**\] ://*host* \[:*port*\] \[/*path*\] and store pointers to newly allocated copies of the strings *host*, *port*, and *path* in \*phost, \*pport, and \*ppath, respectively. By default, \*ppath is set to "/" and \*pport to "443" for **https** or "80" for **http**. For **https**, \**pssl* is set to 1; otherwise, to 0.

**OCSP\_sendreq\_bio**() performs an OCSP request using the responder *io*, the URI path *path*, the OCSP request *req*. It does not support retries and so cannot handle non-blocking I/O efficiently. It is retained for compatibility and its use in new applications is not recommended.

## RETURN VALUES

**OCSP\_sendreq\_new**() returns a valid *OCSP\_REQ\_CTX* structure or NULL if an error occurred.

**OCSP\_sendreq\_nbio**() returns 1 if the operation was completed successfully, -1 if the operation should be retried, or 0 if an error occurred.

**OCSP\_REQ\_CTX\_add1\_header**(), **OCSP\_REQ\_CTX\_set1\_req**(), and **OCSP\_parse\_url**() return 1 for success or 0 for failure.

**OCSP\_sendreq\_bio**() returns the *OCSP\_RESPONSE* structure sent by the responder or NULL if an error occurred.

## EXAMPLES

Add a Host header for *ocsp.com*:

```
OCSP_REQ_CTX_add1_header(ctx, Host, ocsp.com );
```

## SEE ALSO

OCSP\_cert\_to\_id(3), OCSP\_request\_add1\_nonce(3), OCSP\_REQUEST\_new(3), OCSP\_resp\_find\_status(3), OCSP\_response\_status(3), X509\_get1\_ocsp(3)

## HISTORY

**OCSP\_parse\_url**() and **OCSP\_sendreq\_bio**() first appeared in OpenSSL 0.9.7 and have been available since OpenBSD 3.2.

**OCSP\_sendreq\_new**(), **OCSP\_sendreq\_nbio**(), and **OCSP\_REQ\_CTX\_free**() first appeared in OpenSSL 0.9.8h and have been available since OpenBSD 4.5.

**OCSP\_REQ\_CTX\_add1\_header**() and **OCSP\_REQ\_CTX\_set1\_req**() first appeared in OpenSSL 1.0.0 and have been available since OpenBSD 4.9.

## CAVEATS

These functions only perform a minimal HTTP query to a responder. If an application wishes to support more advanced features, it should use an alternative, more complete, HTTP library.

Currently only HTTP POST queries to responders are supported.
