Home | History | Annotate | Download | only in ocsp

Lines Matching refs:rctx

112 void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx)
114 if (rctx->mem)
115 BIO_free(rctx->mem);
116 if (rctx->iobuf)
117 OPENSSL_free(rctx->iobuf);
118 OPENSSL_free(rctx);
121 int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req)
126 if (BIO_printf(rctx->mem, req_hdr, i2d_OCSP_REQUEST(req, NULL)) <= 0)
128 if (i2d_OCSP_REQUEST_bio(rctx->mem, req) <= 0)
130 rctx->state = OHS_ASN1_WRITE;
131 rctx->asn1_len = BIO_get_mem_data(rctx->mem, NULL);
135 int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
140 if (BIO_puts(rctx->mem, name) <= 0)
144 if (BIO_write(rctx->mem, ": ", 2) != 2)
146 if (BIO_puts(rctx->mem, value) <= 0)
149 if (BIO_write(rctx->mem, "\r\n", 2) != 2)
159 OCSP_REQ_CTX *rctx;
160 rctx = OPENSSL_malloc(sizeof(OCSP_REQ_CTX));
161 if (!rctx)
163 rctx->state = OHS_ERROR;
164 rctx->mem = BIO_new(BIO_s_mem());
165 rctx->io = io;
166 rctx->asn1_len = 0;
168 rctx->iobuflen = maxline;
170 rctx->iobuflen = OCSP_MAX_LINE_LEN;
171 rctx->iobuf = OPENSSL_malloc(rctx->iobuflen);
172 if (!rctx->mem || !rctx->iobuf)
177 if (BIO_printf(rctx->mem, post_hdr, path) <= 0)
180 if (req && !OCSP_REQ_CTX_set1_req(rctx, req))
183 return rctx;
185 OCSP_REQ_CTX_free(rctx);
268 int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
273 if (!(rctx->state & OHS_NOREAD))
275 n = BIO_read(rctx->io, rctx->iobuf, rctx->iobuflen);
279 if (BIO_should_retry(rctx->io))
286 if (BIO_write(rctx->mem, rctx->iobuf, n) != n)
290 switch(rctx->state)
294 n = BIO_get_mem_data(rctx->mem, &p);
296 i = BIO_write(rctx->io,
297 p + (n - rctx->asn1_len), rctx->asn1_len);
301 if (BIO_should_retry(rctx->io))
303 rctx->state = OHS_ERROR;
307 rctx->asn1_len -= i;
309 if (rctx->asn1_len > 0)
312 rctx->state = OHS_ASN1_FLUSH;
314 (void)BIO_reset(rctx->mem);
318 i = BIO_flush(rctx->io);
322 rctx->state = OHS_FIRSTLINE;
326 if (BIO_should_retry(rctx->io))
329 rctx->state = OHS_ERROR;
345 n = BIO_get_mem_data(rctx->mem, &p);
348 if (n >= rctx->iobuflen)
350 rctx->state = OHS_ERROR;
355 n = BIO_gets(rctx->mem, (char *)rctx->iobuf, rctx->iobuflen);
359 if (BIO_should_retry(rctx->mem))
361 rctx->state = OHS_ERROR;
366 if (n == rctx->iobuflen)
368 rctx->state = OHS_ERROR;
373 if (rctx->state == OHS_FIRSTLINE)
375 if (parse_http_line1((char *)rctx->iobuf))
377 rctx->state = OHS_HEADERS;
382 rctx->state = OHS_ERROR;
389 for (p = rctx->iobuf; *p; p++)
397 rctx->state = OHS_ASN1_HEADER;
409 n = BIO_get_mem_data(rctx->mem, &p);
416 rctx->state = OHS_ERROR;
432 rctx->state = OHS_ERROR;
436 rctx->asn1_len = 0;
439 rctx->asn1_len <<= 8;
440 rctx->asn1_len |= *p++;
443 if (rctx->asn1_len > OCSP_MAX_REQUEST_LENGTH)
445 rctx->state = OHS_ERROR;
449 rctx->asn1_len += n + 2;
452 rctx->asn1_len = *p + 2;
454 rctx->state = OHS_ASN1_CONTENT;
459 n = BIO_get_mem_data(rctx->mem, &p);
460 if (n < (int)rctx->asn1_len)
464 *presp = d2i_OCSP_RESPONSE(NULL, &p, rctx->asn1_len);
467 rctx->state = OHS_DONE;
471 rctx->state = OHS_ERROR;