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 *
BIO_meth_new(int type,const char * name)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
BIO_meth_free(BIO_METHOD * biom)39 BIO_meth_free(BIO_METHOD *biom)
40 {
41 free(biom);
42 }
43
44 int
BIO_meth_get_write(const BIO_METHOD * biom)45 (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int)
46 {
47 return biom->bwrite;
48 }
49
50 int
BIO_meth_set_write(BIO_METHOD * biom,int (* write)(BIO *,const char *,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
BIO_meth_get_read(const BIO_METHOD * biom)58 (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int)
59 {
60 return biom->bread;
61 }
62
63 int
BIO_meth_set_read(BIO_METHOD * biom,int (* read)(BIO *,char *,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
BIO_meth_get_puts(const BIO_METHOD * biom)71 (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *)
72 {
73 return biom->bputs;
74 }
75
76 int
BIO_meth_set_puts(BIO_METHOD * biom,int (* puts)(BIO *,const char *))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
BIO_meth_get_gets(const BIO_METHOD * biom)84 (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int)
85 {
86 return biom->bgets;
87 }
88
89 int
BIO_meth_set_gets(BIO_METHOD * biom,int (* gets)(BIO *,char *,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
BIO_meth_get_ctrl(const BIO_METHOD * biom)97 (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *)
98 {
99 return biom->ctrl;
100 }
101
102 int
BIO_meth_set_ctrl(BIO_METHOD * biom,long (* ctrl)(BIO *,int,long,void *))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
BIO_meth_get_create(const BIO_METHOD * biom)110 (*BIO_meth_get_create(const BIO_METHOD *biom))(BIO *)
111 {
112 return biom->create;
113 }
114
115 int
BIO_meth_set_create(BIO_METHOD * biom,int (* create)(BIO *))116 BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *))
117 {
118 biom->create = create;
119 return 1;
120 }
121
122 int
BIO_meth_get_destroy(const BIO_METHOD * biom)123 (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *)
124 {
125 return biom->destroy;
126 }
127
128 int
BIO_meth_set_destroy(BIO_METHOD * biom,int (* destroy)(BIO *))129 BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *))
130 {
131 biom->destroy = destroy;
132 return 1;
133 }
134
135 long
BIO_meth_get_callback_ctrl(const BIO_METHOD * biom)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
BIO_meth_set_callback_ctrl(BIO_METHOD * biom,long (* callback_ctrl)(BIO *,int,BIO_info_cb *))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