1 /* $OpenBSD: bio_meth.c,v 1.6 2018/06/02 04:41:12 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 BIO_METHOD * 23 BIO_meth_new(int type, const char *name) 24 { 25 BIO_METHOD *biom; 26 27 if ((biom = calloc(1, sizeof(*biom))) == NULL) 28 return NULL; 29 30 biom->type = type; 31 biom->name = name; 32 33 return biom; 34 } 35 36 void 37 BIO_meth_free(BIO_METHOD *biom) 38 { 39 free(biom); 40 } 41 42 int 43 (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int) 44 { 45 return biom->bwrite; 46 } 47 48 int 49 BIO_meth_set_write(BIO_METHOD *biom, int (*write)(BIO *, const char *, int)) 50 { 51 biom->bwrite = write; 52 return 1; 53 } 54 55 int 56 (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int) 57 { 58 return biom->bread; 59 } 60 61 int 62 BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int)) 63 { 64 biom->bread = read; 65 return 1; 66 } 67 68 int 69 (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *) 70 { 71 return biom->bputs; 72 } 73 74 int 75 BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *)) 76 { 77 biom->bputs = puts; 78 return 1; 79 } 80 81 int 82 (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int) 83 { 84 return biom->bgets; 85 } 86 87 int 88 BIO_meth_set_gets(BIO_METHOD *biom, int (*gets)(BIO *, char *, int)) 89 { 90 biom->bgets = gets; 91 return 1; 92 } 93 94 long 95 (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *) 96 { 97 return biom->ctrl; 98 } 99 100 int 101 BIO_meth_set_ctrl(BIO_METHOD *biom, long (*ctrl)(BIO *, int, long, void *)) 102 { 103 biom->ctrl = ctrl; 104 return 1; 105 } 106 107 int 108 (*BIO_meth_get_create(const BIO_METHOD *biom))(BIO *) 109 { 110 return biom->create; 111 } 112 113 int 114 BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *)) 115 { 116 biom->create = create; 117 return 1; 118 } 119 120 int 121 (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *) 122 { 123 return biom->destroy; 124 } 125 126 int 127 BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *)) 128 { 129 biom->destroy = destroy; 130 return 1; 131 } 132 133 long 134 (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *) 135 { 136 return 137 (long (*)(BIO *, int, BIO_info_cb *))biom->callback_ctrl; /* XXX */ 138 } 139 140 int 141 BIO_meth_set_callback_ctrl(BIO_METHOD *biom, 142 long (*callback_ctrl)(BIO *, int, BIO_info_cb *)) 143 { 144 biom->callback_ctrl = 145 (long (*)(BIO *, int, bio_info_cb *))callback_ctrl; /* XXX */ 146 return 1; 147 } 148