BIO_meth_new.3ossl 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. .\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42)
  2. .\"
  3. .\" Standard preamble:
  4. .\" ========================================================================
  5. .de Sp \" Vertical space (when we can't use .PP)
  6. .if t .sp .5v
  7. .if n .sp
  8. ..
  9. .de Vb \" Begin verbatim text
  10. .ft CW
  11. .nf
  12. .ne \\$1
  13. ..
  14. .de Ve \" End verbatim text
  15. .ft R
  16. .fi
  17. ..
  18. .\" Set up some character translations and predefined strings. \*(-- will
  19. .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
  20. .\" double quote, and \*(R" will give a right double quote. \*(C+ will
  21. .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
  22. .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
  23. .\" nothing in troff, for use with C<>.
  24. .tr \(*W-
  25. .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
  26. .ie n \{\
  27. . ds -- \(*W-
  28. . ds PI pi
  29. . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
  30. . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
  31. . ds L" ""
  32. . ds R" ""
  33. . ds C` ""
  34. . ds C' ""
  35. 'br\}
  36. .el\{\
  37. . ds -- \|\(em\|
  38. . ds PI \(*p
  39. . ds L" ``
  40. . ds R" ''
  41. . ds C`
  42. . ds C'
  43. 'br\}
  44. .\"
  45. .\" Escape single quotes in literal strings from groff's Unicode transform.
  46. .ie \n(.g .ds Aq \(aq
  47. .el .ds Aq '
  48. .\"
  49. .\" If the F register is >0, we'll generate index entries on stderr for
  50. .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
  51. .\" entries marked with X<> in POD. Of course, you'll have to process the
  52. .\" output yourself in some meaningful fashion.
  53. .\"
  54. .\" Avoid warning from groff about undefined register 'F'.
  55. .de IX
  56. ..
  57. .nr rF 0
  58. .if \n(.g .if rF .nr rF 1
  59. .if (\n(rF:(\n(.g==0)) \{\
  60. . if \nF \{\
  61. . de IX
  62. . tm Index:\\$1\t\\n%\t"\\$2"
  63. ..
  64. . if !\nF==2 \{\
  65. . nr % 0
  66. . nr F 2
  67. . \}
  68. . \}
  69. .\}
  70. .rr rF
  71. .\"
  72. .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
  73. .\" Fear. Run. Save yourself. No user-serviceable parts.
  74. . \" fudge factors for nroff and troff
  75. .if n \{\
  76. . ds #H 0
  77. . ds #V .8m
  78. . ds #F .3m
  79. . ds #[ \f1
  80. . ds #] \fP
  81. .\}
  82. .if t \{\
  83. . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
  84. . ds #V .6m
  85. . ds #F 0
  86. . ds #[ \&
  87. . ds #] \&
  88. .\}
  89. . \" simple accents for nroff and troff
  90. .if n \{\
  91. . ds ' \&
  92. . ds ` \&
  93. . ds ^ \&
  94. . ds , \&
  95. . ds ~ ~
  96. . ds /
  97. .\}
  98. .if t \{\
  99. . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
  100. . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
  101. . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
  102. . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
  103. . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
  104. . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
  105. .\}
  106. . \" troff and (daisy-wheel) nroff accents
  107. .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
  108. .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
  109. .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
  110. .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
  111. .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
  112. .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
  113. .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
  114. .ds ae a\h'-(\w'a'u*4/10)'e
  115. .ds Ae A\h'-(\w'A'u*4/10)'E
  116. . \" corrections for vroff
  117. .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
  118. .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
  119. . \" for low resolution devices (crt and lpr)
  120. .if \n(.H>23 .if \n(.V>19 \
  121. \{\
  122. . ds : e
  123. . ds 8 ss
  124. . ds o a
  125. . ds d- d\h'-1'\(ga
  126. . ds D- D\h'-1'\(hy
  127. . ds th \o'bp'
  128. . ds Th \o'LP'
  129. . ds ae ae
  130. . ds Ae AE
  131. .\}
  132. .rm #[ #] #H #V #F C
  133. .\" ========================================================================
  134. .\"
  135. .IX Title "BIO_METH_NEW 3ossl"
  136. .TH BIO_METH_NEW 3ossl "2024-09-03" "3.3.2" "OpenSSL"
  137. .\" For nroff, turn off justification. Always turn off hyphenation; it makes
  138. .\" way too many mistakes in technical documents.
  139. .if n .ad l
  140. .nh
  141. .SH "NAME"
  142. BIO_get_new_index,
  143. BIO_meth_new, BIO_meth_free, BIO_meth_get_read_ex, BIO_meth_set_read_ex,
  144. BIO_meth_get_write_ex, BIO_meth_set_write_ex, BIO_meth_get_write,
  145. BIO_meth_set_write, BIO_meth_get_read, BIO_meth_set_read, BIO_meth_get_puts,
  146. BIO_meth_set_puts, BIO_meth_get_gets, BIO_meth_set_gets, BIO_meth_get_ctrl,
  147. BIO_meth_set_ctrl, BIO_meth_get_create, BIO_meth_set_create,
  148. BIO_meth_get_destroy, BIO_meth_set_destroy, BIO_meth_get_callback_ctrl,
  149. BIO_meth_set_callback_ctrl, BIO_meth_set_sendmmsg, BIO_meth_get_sendmmsg,
  150. BIO_meth_set_recvmmsg, BIO_meth_get_recvmmsg \- Routines to build up BIO methods
  151. .SH "SYNOPSIS"
  152. .IX Header "SYNOPSIS"
  153. .Vb 1
  154. \& #include <openssl/bio.h>
  155. \&
  156. \& int BIO_get_new_index(void);
  157. \&
  158. \& BIO_METHOD *BIO_meth_new(int type, const char *name);
  159. \&
  160. \& void BIO_meth_free(BIO_METHOD *biom);
  161. \&
  162. \& int (*BIO_meth_get_write_ex(const BIO_METHOD *biom))(BIO *, const char *, size_t,
  163. \& size_t *);
  164. \& int (*BIO_meth_get_write(const BIO_METHOD *biom))(BIO *, const char *, int);
  165. \& int BIO_meth_set_write_ex(BIO_METHOD *biom,
  166. \& int (*bwrite)(BIO *, const char *, size_t, size_t *));
  167. \& int BIO_meth_set_write(BIO_METHOD *biom,
  168. \& int (*write)(BIO *, const char *, int));
  169. \&
  170. \& int (*BIO_meth_get_read_ex(const BIO_METHOD *biom))(BIO *, char *, size_t, size_t *);
  171. \& int (*BIO_meth_get_read(const BIO_METHOD *biom))(BIO *, char *, int);
  172. \& int BIO_meth_set_read_ex(BIO_METHOD *biom,
  173. \& int (*bread)(BIO *, char *, size_t, size_t *));
  174. \& int BIO_meth_set_read(BIO_METHOD *biom, int (*read)(BIO *, char *, int));
  175. \&
  176. \& int (*BIO_meth_get_puts(const BIO_METHOD *biom))(BIO *, const char *);
  177. \& int BIO_meth_set_puts(BIO_METHOD *biom, int (*puts)(BIO *, const char *));
  178. \&
  179. \& int (*BIO_meth_get_gets(const BIO_METHOD *biom))(BIO *, char *, int);
  180. \& int BIO_meth_set_gets(BIO_METHOD *biom,
  181. \& int (*gets)(BIO *, char *, int));
  182. \&
  183. \& long (*BIO_meth_get_ctrl(const BIO_METHOD *biom))(BIO *, int, long, void *);
  184. \& int BIO_meth_set_ctrl(BIO_METHOD *biom,
  185. \& long (*ctrl)(BIO *, int, long, void *));
  186. \&
  187. \& int (*BIO_meth_get_create(const BIO_METHOD *bion))(BIO *);
  188. \& int BIO_meth_set_create(BIO_METHOD *biom, int (*create)(BIO *));
  189. \&
  190. \& int (*BIO_meth_get_destroy(const BIO_METHOD *biom))(BIO *);
  191. \& int BIO_meth_set_destroy(BIO_METHOD *biom, int (*destroy)(BIO *));
  192. \&
  193. \& long (*BIO_meth_get_callback_ctrl(const BIO_METHOD *biom))(BIO *, int, BIO_info_cb *);
  194. \& int BIO_meth_set_callback_ctrl(BIO_METHOD *biom,
  195. \& long (*callback_ctrl)(BIO *, int, BIO_info_cb *));
  196. \&
  197. \& ossl_ssize_t (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *,
  198. \& BIO_MSG *,
  199. \& size_t,
  200. \& size_t,
  201. \& uint64_t);
  202. \& int BIO_meth_set_sendmmsg(BIO_METHOD *biom,
  203. \& ossl_ssize_t (*f) (BIO *, BIO_MSG *, size_t,
  204. \& size_t, uint64_t));
  205. \&
  206. \& ossl_ssize_t (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *,
  207. \& BIO_MSG *,
  208. \& size_t,
  209. \& size_t,
  210. \& uint64_t);
  211. \& int BIO_meth_set_recvmmsg(BIO_METHOD *biom,
  212. \& ossl_ssize_t (*f) (BIO *, BIO_MSG *, size_t,
  213. \& size_t, uint64_t));
  214. .Ve
  215. .SH "DESCRIPTION"
  216. .IX Header "DESCRIPTION"
  217. The \fB\s-1BIO_METHOD\s0\fR type is a structure used for the implementation of new \s-1BIO\s0
  218. types. It provides a set of functions used by OpenSSL for the implementation
  219. of the various \s-1BIO\s0 capabilities. See the \fBbio\fR\|(7) page for more information.
  220. .PP
  221. \&\fBBIO_meth_new()\fR creates a new \fB\s-1BIO_METHOD\s0\fR structure that contains a type
  222. identifier \fItype\fR and a string that represents its \fBname\fR.
  223. \&\fBtype\fR can be set to either \fB\s-1BIO_TYPE_NONE\s0\fR or via \fBBIO_get_new_index()\fR if
  224. a unique type is required for searching (See \fBBIO_find_type\fR\|(3))
  225. .PP
  226. Note that \fBBIO_get_new_index()\fR can only be used 127 times before it returns an
  227. error.
  228. .PP
  229. The set of
  230. standard OpenSSL provided \s-1BIO\s0 types is provided in \fI<openssl/bio.h>\fR.
  231. Some examples include \fB\s-1BIO_TYPE_BUFFER\s0\fR and \fB\s-1BIO_TYPE_CIPHER\s0\fR. Filter BIOs
  232. should have a type which have the \*(L"filter\*(R" bit set (\fB\s-1BIO_TYPE_FILTER\s0\fR).
  233. Source/sink BIOs should have the \*(L"source/sink\*(R" bit set (\fB\s-1BIO_TYPE_SOURCE_SINK\s0\fR).
  234. File descriptor based BIOs (e.g. socket, fd, connect, accept etc) should
  235. additionally have the \*(L"descriptor\*(R" bit set (\fB\s-1BIO_TYPE_DESCRIPTOR\s0\fR). See the
  236. \&\fBBIO_find_type\fR\|(3) page for more information.
  237. .PP
  238. \&\fBBIO_meth_free()\fR destroys a \fB\s-1BIO_METHOD\s0\fR structure and frees up any memory
  239. associated with it. If the argument is \s-1NULL,\s0 nothing is done.
  240. .PP
  241. \&\fBBIO_meth_get_write_ex()\fR and \fBBIO_meth_set_write_ex()\fR get and set the function
  242. used for writing arbitrary length data to the \s-1BIO\s0 respectively. This function
  243. will be called in response to the application calling \fBBIO_write_ex()\fR or
  244. \&\fBBIO_write()\fR. The parameters for the function have the same meaning as for
  245. \&\fBBIO_write_ex()\fR. Older code may call \fBBIO_meth_get_write()\fR and
  246. \&\fBBIO_meth_set_write()\fR instead. Applications should not call both
  247. \&\fBBIO_meth_set_write_ex()\fR and \fBBIO_meth_set_write()\fR or call \fBBIO_meth_get_write()\fR
  248. when the function was set with \fBBIO_meth_set_write_ex()\fR.
  249. .PP
  250. \&\fBBIO_meth_get_read_ex()\fR and \fBBIO_meth_set_read_ex()\fR get and set the function used
  251. for reading arbitrary length data from the \s-1BIO\s0 respectively. This function will
  252. be called in response to the application calling \fBBIO_read_ex()\fR or \fBBIO_read()\fR.
  253. The parameters for the function have the same meaning as for \fBBIO_read_ex()\fR.
  254. Older code may call \fBBIO_meth_get_read()\fR and \fBBIO_meth_set_read()\fR instead.
  255. Applications should not call both \fBBIO_meth_set_read_ex()\fR and \fBBIO_meth_set_read()\fR
  256. or call \fBBIO_meth_get_read()\fR when the function was set with
  257. \&\fBBIO_meth_set_read_ex()\fR.
  258. .PP
  259. \&\fBBIO_meth_get_puts()\fR and \fBBIO_meth_set_puts()\fR get and set the function used for
  260. writing a \s-1NULL\s0 terminated string to the \s-1BIO\s0 respectively. This function will be
  261. called in response to the application calling \fBBIO_puts()\fR. The parameters for
  262. the function have the same meaning as for \fBBIO_puts()\fR.
  263. .PP
  264. \&\fBBIO_meth_get_gets()\fR and \fBBIO_meth_set_gets()\fR get and set the function typically
  265. used for reading a line of data from the \s-1BIO\s0 respectively (see the \fBBIO_gets\fR\|(3)
  266. page for more information). This function will be called in response to the
  267. application calling \fBBIO_gets()\fR. The parameters for the function have the same
  268. meaning as for \fBBIO_gets()\fR.
  269. .PP
  270. \&\fBBIO_meth_get_ctrl()\fR and \fBBIO_meth_set_ctrl()\fR get and set the function used for
  271. processing ctrl messages in the \s-1BIO\s0 respectively. See the \fBBIO_ctrl\fR\|(3) page for
  272. more information. This function will be called in response to the application
  273. calling \fBBIO_ctrl()\fR. The parameters for the function have the same meaning as for
  274. \&\fBBIO_ctrl()\fR.
  275. .PP
  276. \&\fBBIO_meth_get_create()\fR and \fBBIO_meth_set_create()\fR get and set the function used
  277. for creating a new instance of the \s-1BIO\s0 respectively. This function will be
  278. called in response to the application calling \fBBIO_new()\fR and passing
  279. in a pointer to the current \s-1BIO_METHOD.\s0 The \fBBIO_new()\fR function will allocate the
  280. memory for the new \s-1BIO,\s0 and a pointer to this newly allocated structure will
  281. be passed as a parameter to the function. If a create function is set,
  282. \&\fBBIO_new()\fR will not mark the \s-1BIO\s0 as initialised on allocation.
  283. \&\fBBIO_set_init\fR\|(3) must then be called either by the create function, or later,
  284. by a \s-1BIO\s0 ctrl function, once \s-1BIO\s0 initialisation is complete.
  285. .PP
  286. \&\fBBIO_meth_get_destroy()\fR and \fBBIO_meth_set_destroy()\fR get and set the function used
  287. for destroying an instance of a \s-1BIO\s0 respectively. This function will be
  288. called in response to the application calling \fBBIO_free()\fR. A pointer to the \s-1BIO\s0
  289. to be destroyed is passed as a parameter. The destroy function should be used
  290. for \s-1BIO\s0 specific clean up. The memory for the \s-1BIO\s0 itself should not be freed by
  291. this function.
  292. .PP
  293. \&\fBBIO_meth_get_callback_ctrl()\fR and \fBBIO_meth_set_callback_ctrl()\fR get and set the
  294. function used for processing callback ctrl messages in the \s-1BIO\s0 respectively. See
  295. the \fBBIO_callback_ctrl\fR\|(3) page for more information. This function will be called
  296. in response to the application calling \fBBIO_callback_ctrl()\fR. The parameters for
  297. the function have the same meaning as for \fBBIO_callback_ctrl()\fR.
  298. .PP
  299. \&\fBBIO_meth_get_sendmmsg()\fR, \fBBIO_meth_set_sendmmsg()\fR, \fBBIO_meth_get_recvmmsg()\fR and
  300. \&\fBBIO_meth_set_recvmmsg()\fR get and set the functions used for handling
  301. \&\fBBIO_sendmmsg()\fR and \fBBIO_recvmmsg()\fR calls respectively. See \fBBIO_sendmmsg\fR\|(3) for
  302. more information.
  303. .SH "RETURN VALUES"
  304. .IX Header "RETURN VALUES"
  305. \&\fBBIO_get_new_index()\fR returns the new \s-1BIO\s0 type value or \-1 if an error occurred.
  306. .PP
  307. BIO_meth_new(int type, const char *name) returns a valid \fB\s-1BIO_METHOD\s0\fR or \s-1NULL\s0
  308. if an error occurred.
  309. .PP
  310. The \fBBIO_meth_set\fR functions return 1 on success or 0 on error.
  311. .PP
  312. The \fBBIO_meth_get\fR functions return the corresponding function pointers.
  313. .SH "SEE ALSO"
  314. .IX Header "SEE ALSO"
  315. \&\fBbio\fR\|(7), \fBBIO_find_type\fR\|(3), \fBBIO_ctrl\fR\|(3), \fBBIO_read_ex\fR\|(3), \fBBIO_new\fR\|(3)
  316. .SH "HISTORY"
  317. .IX Header "HISTORY"
  318. The functions described here were added in OpenSSL 1.1.0.
  319. .SH "COPYRIGHT"
  320. .IX Header "COPYRIGHT"
  321. Copyright 2016\-2024 The OpenSSL Project Authors. All Rights Reserved.
  322. .PP
  323. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  324. this file except in compliance with the License. You can obtain a copy
  325. in the file \s-1LICENSE\s0 in the source distribution or at
  326. <https://www.openssl.org/source/license.html>.