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