1919 DTLSVersion ,
2020 HandshakeStep ,
2121 HelloVerifyRequest ,
22+ MbedTLSBuffer ,
2223 NextProtocol ,
2324 Purpose ,
2425 RaggedEOF ,
@@ -149,8 +150,7 @@ def wrap_socket(self, socket, server_hostname):
149150 def wrap_buffers (self , server_hostname ):
150151 """Create an in-memory stream for TLS."""
151152 # PEP 543
152- self ._set_hostname (server_hostname )
153- return TLSWrappedBuffer (self )
153+ return TLSWrappedBuffer (self , server_hostname )
154154
155155
156156class ServerContext (_BaseContext ):
@@ -172,11 +172,12 @@ def wrap_buffers(self):
172172
173173class TLSWrappedBuffer :
174174 # _pep543.TLSWrappedBuffer
175- def __init__ (self , context ):
175+ def __init__ (self , context , server_hostname = None ):
176176 self ._output_buffer = _rb .RingBuffer (TLS_BUFFER_CAPACITY )
177177 self ._input_buffer = _rb .RingBuffer (TLS_BUFFER_CAPACITY )
178- context .set_bio (self ._output_buffer , self ._input_buffer )
179- self ._context = context
178+ self ._tlsbuf = MbedTLSBuffer (context )
179+ self ._tlsbuf .set_bio (self ._output_buffer , self ._input_buffer )
180+ self ._tlsbuf ._set_hostname (server_hostname )
180181
181182 def __repr__ (self ):
182183 return "%s(%r)" % (type (self ).__name__ , self .context )
@@ -185,6 +186,14 @@ def __getstate__(self):
185186 # We could make this pickable by copying the buffers.
186187 raise TypeError (f"cannot pickle { self .__class__ .__name__ !r} object" )
187188
189+ @property
190+ def _server_hostname (self ):
191+ return self ._tlsbuf ._server_hostname
192+
193+ @property
194+ def _handshake_state (self ):
195+ return self ._tlsbuf ._handshake_state
196+
188197 def read (self , amt ):
189198 # PEP 543
190199 if amt <= 0 :
@@ -198,39 +207,42 @@ def read(self, amt):
198207
199208 def readinto (self , buffer , amt ):
200209 # PEP 543
201- return self .context .readinto (buffer , amt )
210+ return self ._tlsbuf .readinto (buffer , amt )
202211
203212 def write (self , buffer ):
204213 # PEP 543
205- amt = self .context .write (buffer )
214+ amt = self ._tlsbuf .write (buffer )
206215 assert amt == len (buffer )
207216 return len (self ._output_buffer )
208217
209218 def do_handshake (self ):
210219 # PEP 543
211- self .context .do_handshake ()
220+ self ._tlsbuf .do_handshake ()
221+
222+ def setcookieparam (self , param ):
223+ self ._tlsbuf .setcookieparam (param )
212224
213225 def cipher (self ):
214226 # PEP 543
215- return self .context .cipher ()
227+ return self ._tlsbuf .cipher ()
216228
217229 def negotiated_protocol (self ):
218230 # PEP 543
219- return self .context .negotiated_protocol ()
231+ return self ._tlsbuf .negotiated_protocol ()
220232
221233 @property
222234 def context (self ):
223235 # PEP 543
224236 """The ``Context`` object this buffer is tied to."""
225- return self ._context
237+ return self ._tlsbuf . context
226238
227239 def negotiated_tls_version (self ):
228240 # PEP 543
229- return self .context .negotiated_tls_version ()
241+ return self ._tlsbuf .negotiated_tls_version ()
230242
231243 def shutdown (self ):
232244 # PEP 543
233- self .context .shutdown ()
245+ self ._tlsbuf .shutdown ()
234246
235247 def receive_from_network (self , data ):
236248 # PEP 543
@@ -311,7 +323,7 @@ def bind(self, address):
311323
312324 def close (self ):
313325 self ._closed = True
314- self .context .shutdown ()
326+ self ._buffer .shutdown ()
315327 self ._socket .close ()
316328
317329 def connect (self , address ):
@@ -414,15 +426,16 @@ def setsockopt(self, level, optname, value):
414426
415427 def shutdown (self , how ):
416428 self ._buffer .shutdown ()
417- self ._context .shutdown ()
418429 self ._socket .shutdown (how )
419430
420431 # PEP 543 adds the following methods.
421432
422433 def do_handshake (self ):
423- while self .context ._state is not HandshakeStep .HANDSHAKE_OVER :
434+ while (
435+ self ._buffer ._handshake_state is not HandshakeStep .HANDSHAKE_OVER
436+ ):
424437 try :
425- self .context .do_handshake ()
438+ self ._buffer .do_handshake ()
426439 amt = self ._socket .send (self ._buffer .peek_outgoing (1024 ))
427440 self ._buffer .consume_outgoing (amt )
428441 except WantReadError :
@@ -433,22 +446,21 @@ def do_handshake(self):
433446 self ._buffer .receive_from_network (data )
434447
435448 def setcookieparam (self , param ):
436- self .context .setcookieparam (param )
449+ self ._buffer .setcookieparam (param )
437450
438451 def cipher (self ):
439- return self .context .cipher ()
452+ return self ._buffer .cipher ()
440453
441454 def negotiated_protocol (self ):
442- return self .context .negotiated_protocol ()
455+ return self ._buffer .negotiated_protocol ()
443456
444457 @property
445458 def context (self ):
446- return self ._context
459+ return self ._buffer . context
447460
448461 def negotiated_tls_version (self ):
449- return self .context .negotiated_tls_version ()
462+ return self ._buffer .negotiated_tls_version ()
450463
451464 def unwrap (self ):
452465 self ._buffer .shutdown ()
453- self .context .shutdown ()
454466 return self ._socket
0 commit comments