1 /* $OpenBSD: bio_meth.c,v 1.8 2022/01/14 08:40:57 tb Exp $ */ 2 /* 3 * Copyright (c) 2018 Theo Buehler <tb@openbsd.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include <stdlib.h> 19 20 #include <openssl/bio.h> 21 22 #include "bio_local.h" 23 24 BIO_METHOD * 25 BIO_meth_new(int type, const char *name) 26 { 27 BIO_METHOD *biom; 28 29 if ((biom = calloc(1, sizeof(*biom))) == NULL) 30 return NULL; 31 32 biom->type = type; 33 biom->name = name; 34 35 return biom; 36 } 37 38 void 39 BIO_meth_free(BIO_METHOD *biom) 40 { 41 free(biom); 42 } 43 44 int 45 (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int) 46 { 47 return biom->bwrite; 48 } 49 50 int 51 BIO_meth_set_write(BIO_METHOD *biom, int (*write)(BIO *, const char *, int)) 52 { 53 biom->bwrite = write; 54 return 1; 55 } 56 57 int 58 (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int) 59 { 60 return biom->bread; 61 } 62 63 int 64 BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int)) 65 { 66 biom->bread = read; 67 return 1; 68 } 69 70 int 71 (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *) 72 { 73 return biom->bputs; 74 } 75 76 int 77 BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *)) 78 { 79 biom->bputs = puts; 80 return 1; 81 } 82 83 int 84 (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int) 85 { 86 return biom->bgets; 87 } 88 89 int 90 BIO_meth_set_gets(BIO_METHOD *biom, int (*gets)(BIO *, char *, int)) 91 { 92 biom->bgets = gets; 93 return 1; 94 } 95 96 long 97 (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *) 98 { 99 return biom->ctrl; 100 } 101 102 int 103 BIO_meth_set_ctrl(BIO_METHOD *biom, long (*ctrl)(BIO *, int, long, void *)) 104 { 105 biom->ctrl = ctrl; 106 return 1; 107 } 108 109 int 110 (*BIO_meth_get_create(const BIO_METHOD *biom))(BIO *) 111 { 112 return biom->create; 113 } 114 115 int 116 BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *)) 117 { 118 biom->create = create; 119 return 1; 120 } 121 122 int 123 (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *) 124 { 125 return biom->destroy; 126 } 127 128 int 129 BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *)) 130 { 131 biom->destroy = destroy; 132 return 1; 133 } 134 135 long 136 (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *) 137 { 138 return biom->callback_ctrl; 139 } 140 141 int 142 BIO_meth_set_callback_ctrl(BIO_METHOD *biom, 143 long (*callback_ctrl)(BIO *, int, BIO_info_cb *)) 144 { 145 biom->callback_ctrl = callback_ctrl; 146 return 1; 147 } 148