SSL_new_stream.3ossl 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220
  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 "SSL_NEW_STREAM 3ossl"
  136. .TH SSL_NEW_STREAM 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. SSL_new_stream, SSL_STREAM_FLAG_UNI, SSL_STREAM_FLAG_NO_BLOCK,
  143. SSL_STREAM_FLAG_ADVANCE \- create a new locally\-initiated QUIC stream
  144. .SH "SYNOPSIS"
  145. .IX Header "SYNOPSIS"
  146. .Vb 1
  147. \& #include <openssl/ssl.h>
  148. \&
  149. \& #define SSL_STREAM_FLAG_UNI (1U << 0)
  150. \& #define SSL_STREAM_FLAG_NO_BLOCK (1U << 1)
  151. \& #define SSL_STREAM_FLAG_ADVANCE (1U << 2)
  152. \& SSL *SSL_new_stream(SSL *ssl, uint64_t flags);
  153. .Ve
  154. .SH "DESCRIPTION"
  155. .IX Header "DESCRIPTION"
  156. The \fBSSL_new_stream()\fR function, when passed a \s-1QUIC\s0 connection \s-1SSL\s0 object, creates
  157. a new locally-initiated bidirectional or unidirectional \s-1QUIC\s0 stream and returns
  158. the newly created \s-1QUIC\s0 stream \s-1SSL\s0 object.
  159. .PP
  160. If the \fB\s-1SSL_STREAM_FLAG_UNI\s0\fR flag is passed, a unidirectional stream is
  161. created; else a bidirectional stream is created.
  162. .PP
  163. To retrieve the stream \s-1ID\s0 of the newly created stream, use
  164. \&\fBSSL_get_stream_id\fR\|(3).
  165. .PP
  166. It is the caller's responsibility to free the \s-1QUIC\s0 stream \s-1SSL\s0 object using
  167. \&\fBSSL_free\fR\|(3). The lifetime of the \s-1QUIC\s0 connection \s-1SSL\s0 object must exceed that
  168. of the \s-1QUIC\s0 stream \s-1SSL\s0 object; in other words, the \s-1QUIC\s0 stream \s-1SSL\s0 object must
  169. be freed first.
  170. .PP
  171. Once a stream has been created using \fBSSL_new_stream()\fR, it may be used in the
  172. normal way using \fBSSL_read\fR\|(3) and \fBSSL_write\fR\|(3).
  173. .PP
  174. This function can only be used to create stream objects for locally-initiated
  175. streams. To accept incoming streams initiated by a peer, use
  176. \&\fBSSL_accept_stream\fR\|(3).
  177. .PP
  178. Calling \fBSSL_new_stream()\fR if there is no default stream already present
  179. inhibits the future creation of a default stream. See \fBopenssl\-quic\fR\|(7).
  180. .PP
  181. The creation of new streams is subject to flow control by the \s-1QUIC\s0 protocol. If
  182. it is currently not possible to create a new locally initiated stream of the
  183. specified type, a call to \fBSSL_new_stream()\fR will either block (if the connection
  184. is configured in blocking mode) until a new stream can be created, or otherwise
  185. return \s-1NULL.\s0
  186. .PP
  187. This function operates in blocking mode if the \s-1QUIC\s0 connection \s-1SSL\s0 object is
  188. configured in blocking mode (see \fBSSL_set_blocking_mode\fR\|(3)). It may also be
  189. used in nonblocking mode on a connection configured in blocking mode by passing
  190. the flag \fB\s-1SSL_STREAM_FLAG_NO_BLOCK\s0\fR.
  191. .PP
  192. The flag \fB\s-1SSL_STREAM_FLAG_ADVANCE\s0\fR may be used to create a \s-1QUIC\s0 stream \s-1SSL\s0
  193. object even if a new \s-1QUIC\s0 stream cannot yet be opened due to flow control. The
  194. caller may begin to use the new stream and fill the write buffer of the stream
  195. by calling \fBSSL_write\fR\|(3). However, no actual stream data (or \s-1QUIC\s0 frames
  196. regarding the stream) will be sent until \s-1QUIC\s0 flow control allows it. Any queued
  197. data will be sent as soon as a peer permits it. There is no guarantee the stream
  198. will be eventually created; for example, the connection could fail, or a peer
  199. might simply decide never to increase the number of allowed streams for the
  200. remainder of the connection lifetime.
  201. .SH "RETURN VALUES"
  202. .IX Header "RETURN VALUES"
  203. \&\fBSSL_new_stream()\fR returns a new stream object, or \s-1NULL\s0 on error.
  204. .PP
  205. This function fails if called on a \s-1QUIC\s0 stream \s-1SSL\s0 object or on a non-QUIC \s-1SSL\s0
  206. object.
  207. .SH "SEE ALSO"
  208. .IX Header "SEE ALSO"
  209. \&\fBSSL_accept_stream\fR\|(3), \fBSSL_free\fR\|(3)
  210. .SH "HISTORY"
  211. .IX Header "HISTORY"
  212. \&\fBSSL_new_stream()\fR was added in OpenSSL 3.2.
  213. .SH "COPYRIGHT"
  214. .IX Header "COPYRIGHT"
  215. Copyright 2002\-2023 The OpenSSL Project Authors. All Rights Reserved.
  216. .PP
  217. Licensed under the Apache License 2.0 (the \*(L"License\*(R"). You may not use
  218. this file except in compliance with the License. You can obtain a copy
  219. in the file \s-1LICENSE\s0 in the source distribution or at
  220. <https://www.openssl.org/source/license.html>.