xref: /freebsd/crypto/openssl/crypto/bio/bio_cb.c (revision b077aed3)
1e71b7053SJung-uk Kim /*
2b077aed3SPierre Pronchery  * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
374664626SKris Kennaway  *
4b077aed3SPierre Pronchery  * Licensed under the Apache License 2.0 (the "License").  You may not use
5e71b7053SJung-uk Kim  * this file except in compliance with the License.  You can obtain a copy
6e71b7053SJung-uk Kim  * in the file LICENSE in the source distribution or at
7e71b7053SJung-uk Kim  * https://www.openssl.org/source/license.html
874664626SKris Kennaway  */
974664626SKris Kennaway 
10b077aed3SPierre Pronchery #define OPENSSL_SUPPRESS_DEPRECATED
11b077aed3SPierre Pronchery 
1274664626SKris Kennaway #include <stdio.h>
1374664626SKris Kennaway #include <string.h>
1474664626SKris Kennaway #include <stdlib.h>
1517f01e99SJung-uk Kim #include "bio_local.h"
16e71b7053SJung-uk Kim #include "internal/cryptlib.h"
1774664626SKris Kennaway #include <openssl/err.h>
1874664626SKris Kennaway 
BIO_debug_callback_ex(BIO * bio,int cmd,const char * argp,size_t len,int argi,long argl,int ret,size_t * processed)19b077aed3SPierre Pronchery long BIO_debug_callback_ex(BIO *bio, int cmd, const char *argp, size_t len,
20b077aed3SPierre Pronchery                            int argi, long argl, int ret, size_t *processed)
2174664626SKris Kennaway {
2274664626SKris Kennaway     BIO *b;
23e71b7053SJung-uk Kim     char buf[256];
2474664626SKris Kennaway     char *p;
25b077aed3SPierre Pronchery     int left;
26b077aed3SPierre Pronchery     size_t l = 0;
2774664626SKris Kennaway 
28b077aed3SPierre Pronchery     if (processed != NULL)
29b077aed3SPierre Pronchery         l = *processed;
3074664626SKris Kennaway 
31b077aed3SPierre Pronchery     left = BIO_snprintf(buf, sizeof(buf), "BIO[%p]: ", (void *)bio);
326f9291ceSJung-uk Kim 
33ed7112f0SJung-uk Kim     /* Ignore errors and continue printing the other information. */
34b077aed3SPierre Pronchery     if (left < 0)
35b077aed3SPierre Pronchery         left = 0;
36b077aed3SPierre Pronchery     p = buf + left;
37b077aed3SPierre Pronchery     left = sizeof(buf) - left;
386f9291ceSJung-uk Kim 
396f9291ceSJung-uk Kim     switch (cmd) {
4074664626SKris Kennaway     case BIO_CB_FREE:
41e71b7053SJung-uk Kim         BIO_snprintf(p, left, "Free - %s\n", bio->method->name);
4274664626SKris Kennaway         break;
4374664626SKris Kennaway     case BIO_CB_READ:
4474664626SKris Kennaway         if (bio->method->type & BIO_TYPE_DESCRIPTOR)
45b077aed3SPierre Pronchery             BIO_snprintf(p, left, "read(%d,%zu) - %s fd=%d\n",
46b077aed3SPierre Pronchery                          bio->num, len,
471f13597dSJung-uk Kim                          bio->method->name, bio->num);
4874664626SKris Kennaway         else
49b077aed3SPierre Pronchery             BIO_snprintf(p, left, "read(%d,%zu) - %s\n",
50b077aed3SPierre Pronchery                     bio->num, len, bio->method->name);
5174664626SKris Kennaway         break;
5274664626SKris Kennaway     case BIO_CB_WRITE:
5374664626SKris Kennaway         if (bio->method->type & BIO_TYPE_DESCRIPTOR)
54b077aed3SPierre Pronchery             BIO_snprintf(p, left, "write(%d,%zu) - %s fd=%d\n",
55b077aed3SPierre Pronchery                          bio->num, len,
561f13597dSJung-uk Kim                          bio->method->name, bio->num);
5774664626SKris Kennaway         else
58b077aed3SPierre Pronchery             BIO_snprintf(p, left, "write(%d,%zu) - %s\n",
59b077aed3SPierre Pronchery                          bio->num, len, bio->method->name);
6074664626SKris Kennaway         break;
6174664626SKris Kennaway     case BIO_CB_PUTS:
62e71b7053SJung-uk Kim         BIO_snprintf(p, left, "puts() - %s\n", bio->method->name);
6374664626SKris Kennaway         break;
6474664626SKris Kennaway     case BIO_CB_GETS:
65b077aed3SPierre Pronchery         BIO_snprintf(p, left, "gets(%zu) - %s\n", len,
666f9291ceSJung-uk Kim                      bio->method->name);
6774664626SKris Kennaway         break;
6874664626SKris Kennaway     case BIO_CB_CTRL:
69b077aed3SPierre Pronchery         BIO_snprintf(p, left, "ctrl(%d) - %s\n", argi,
706f9291ceSJung-uk Kim                      bio->method->name);
7174664626SKris Kennaway         break;
7274664626SKris Kennaway     case BIO_CB_RETURN | BIO_CB_READ:
73b077aed3SPierre Pronchery         BIO_snprintf(p, left, "read return %d processed: %zu\n", ret, l);
7474664626SKris Kennaway         break;
7574664626SKris Kennaway     case BIO_CB_RETURN | BIO_CB_WRITE:
76b077aed3SPierre Pronchery         BIO_snprintf(p, left, "write return %d processed: %zu\n", ret, l);
7774664626SKris Kennaway         break;
7874664626SKris Kennaway     case BIO_CB_RETURN | BIO_CB_GETS:
79b077aed3SPierre Pronchery         BIO_snprintf(p, left, "gets return %d processed: %zu\n", ret, l);
8074664626SKris Kennaway         break;
8174664626SKris Kennaway     case BIO_CB_RETURN | BIO_CB_PUTS:
82b077aed3SPierre Pronchery         BIO_snprintf(p, left, "puts return %d processed: %zu\n", ret, l);
8374664626SKris Kennaway         break;
8474664626SKris Kennaway     case BIO_CB_RETURN | BIO_CB_CTRL:
85b077aed3SPierre Pronchery         BIO_snprintf(p, left, "ctrl return %d\n", ret);
8674664626SKris Kennaway         break;
8774664626SKris Kennaway     default:
88e71b7053SJung-uk Kim         BIO_snprintf(p, left, "bio callback - unknown type (%d)\n", cmd);
8974664626SKris Kennaway         break;
9074664626SKris Kennaway     }
9174664626SKris Kennaway 
9274664626SKris Kennaway     b = (BIO *)bio->cb_arg;
9374664626SKris Kennaway     if (b != NULL)
9474664626SKris Kennaway         BIO_write(b, buf, strlen(buf));
95e71b7053SJung-uk Kim #if !defined(OPENSSL_NO_STDIO)
9674664626SKris Kennaway     else
9774664626SKris Kennaway         fputs(buf, stderr);
9874664626SKris Kennaway #endif
99b077aed3SPierre Pronchery     return ret;
10074664626SKris Kennaway }
101b077aed3SPierre Pronchery 
102b077aed3SPierre Pronchery #ifndef OPENSSL_NO_DEPRECATED_3_0
BIO_debug_callback(BIO * bio,int cmd,const char * argp,int argi,long argl,long ret)103b077aed3SPierre Pronchery long BIO_debug_callback(BIO *bio, int cmd, const char *argp,
104b077aed3SPierre Pronchery                         int argi, long argl, long ret)
105b077aed3SPierre Pronchery {
106b077aed3SPierre Pronchery     size_t processed = 0;
107b077aed3SPierre Pronchery 
108b077aed3SPierre Pronchery     if (ret > 0)
109b077aed3SPierre Pronchery         processed = (size_t)ret;
110b077aed3SPierre Pronchery     BIO_debug_callback_ex(bio, cmd, argp, (size_t)argi,
111b077aed3SPierre Pronchery                           argi, argl, ret > 0 ? 1 : (int)ret, &processed);
112b077aed3SPierre Pronchery     return ret;
113b077aed3SPierre Pronchery }
114b077aed3SPierre Pronchery #endif
115