Skip to content

Commit efee263

Browse files
committed
Factor out UVStreamServer into separate files
1 parent 4948947 commit efee263

File tree

6 files changed

+77
-79
lines changed

6 files changed

+77
-79
lines changed

uvloop/handles/server.pxd

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
cdef class UVStreamServer(UVStream):
2+
cdef:
3+
object ssl
4+
object protocol_factory
5+
bint opened
6+
Server _server
7+
8+
cdef _init(self, Loop loop, object protocol_factory, Server server,
9+
object ssl)
10+
11+
cdef inline _mark_as_open(self)
12+
13+
cdef listen(self, int backlog=?)
14+
cdef _on_listen(self)
15+
cdef UVTransport _make_new_transport(self, object protocol, object waiter)

uvloop/handles/server.pyx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
@cython.no_gc_clear
2+
cdef class UVStreamServer(UVStream):
3+
4+
cdef _init(self, Loop loop, object protocol_factory, Server server,
5+
object ssl):
6+
7+
if ssl is not None and not isinstance(ssl, ssl_SSLContext):
8+
raise TypeError(
9+
'ssl is expected to be None or an instance of '
10+
'ssl.SSLContext, got {!r}'.format(ssl))
11+
self.ssl = ssl
12+
13+
self._start_init(loop)
14+
self.protocol_factory = protocol_factory
15+
self._server = server
16+
self.opened = 0
17+
18+
cdef listen(self, int backlog=100):
19+
if self.protocol_factory is None:
20+
raise RuntimeError('unable to listen(); no protocol_factory')
21+
22+
if self.opened != 1:
23+
raise RuntimeError('unopened UVTCPServer')
24+
25+
self._listen(backlog)
26+
27+
cdef _on_listen(self):
28+
# Implementation for UVStream._on_listen
29+
30+
protocol = self.protocol_factory()
31+
32+
if self.ssl is None:
33+
client = self._make_new_transport(protocol, None)
34+
35+
else:
36+
waiter = aio_Future(loop=self._loop)
37+
38+
ssl_protocol = aio_SSLProtocol(
39+
self._loop, protocol, self.ssl,
40+
waiter,
41+
True, # server_side
42+
None) # server_hostname
43+
44+
client = self._make_new_transport(ssl_protocol, None)
45+
46+
waiter.add_done_callback(
47+
ft_partial(self.__on_ssl_connected, client))
48+
49+
client._accept(<UVStream>self)
50+
51+
cdef inline _mark_as_open(self):
52+
self.opened = 1
53+
54+
cdef UVTransport _make_new_transport(self, object protocol, object waiter):
55+
raise NotImplementedError
56+
57+
def __on_ssl_connected(self, transport, fut):
58+
exc = fut.exception()
59+
if exc is not None:
60+
transport._force_close(exc)

uvloop/handles/stream.pxd

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,3 @@ cdef class UVStream(UVHandle):
4141
cdef _on_eof(self)
4242
cdef _on_write(self)
4343
cdef _on_shutdown(self)
44-
45-
46-
cdef class UVStreamServer(UVStream):
47-
cdef:
48-
object ssl
49-
object protocol_factory
50-
bint opened
51-
Server _server
52-
53-
cdef _init(self, Loop loop, object protocol_factory, Server server,
54-
object ssl)
55-
56-
cdef inline _mark_as_open(self)
57-
58-
cdef listen(self, int backlog=?)
59-
cdef _on_listen(self)
60-
cdef UVTransport _make_new_transport(self, object protocol, object waiter)

uvloop/handles/stream.pyx

Lines changed: 0 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -291,68 +291,6 @@ cdef class UVStream(UVHandle):
291291
id(self))
292292

293293

294-
@cython.no_gc_clear
295-
cdef class UVStreamServer(UVStream):
296-
297-
cdef _init(self, Loop loop, object protocol_factory, Server server,
298-
object ssl):
299-
300-
if ssl is not None and not isinstance(ssl, ssl_SSLContext):
301-
raise TypeError(
302-
'ssl is expected to be None or an instance of '
303-
'ssl.SSLContext, got {!r}'.format(ssl))
304-
self.ssl = ssl
305-
306-
self._start_init(loop)
307-
self.protocol_factory = protocol_factory
308-
self._server = server
309-
self.opened = 0
310-
311-
cdef listen(self, int backlog=100):
312-
if self.protocol_factory is None:
313-
raise RuntimeError('unable to listen(); no protocol_factory')
314-
315-
if self.opened != 1:
316-
raise RuntimeError('unopened UVTCPServer')
317-
318-
self._listen(backlog)
319-
320-
cdef _on_listen(self):
321-
# Implementation for UVStream._on_listen
322-
323-
protocol = self.protocol_factory()
324-
325-
if self.ssl is None:
326-
client = self._make_new_transport(protocol, None)
327-
328-
else:
329-
waiter = aio_Future(loop=self._loop)
330-
331-
ssl_protocol = aio_SSLProtocol(
332-
self._loop, protocol, self.ssl,
333-
waiter,
334-
True, # server_side
335-
None) # server_hostname
336-
337-
client = self._make_new_transport(ssl_protocol, None)
338-
339-
waiter.add_done_callback(
340-
ft_partial(self.__on_ssl_connected, client))
341-
342-
client._accept(<UVStream>self)
343-
344-
cdef inline _mark_as_open(self):
345-
self.opened = 1
346-
347-
cdef UVTransport _make_new_transport(self, object protocol, object waiter):
348-
raise NotImplementedError
349-
350-
def __on_ssl_connected(self, transport, fut):
351-
exc = fut.exception()
352-
if exc is not None:
353-
transport._force_close(exc)
354-
355-
356294
cdef void __uv_stream_on_shutdown(uv.uv_shutdown_t* req,
357295
int status) with gil:
358296

uvloop/loop.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ include "handles/timer.pxd"
165165
include "handles/signal.pxd"
166166
include "handles/poll.pxd"
167167
include "handles/stream.pxd"
168+
include "handles/server.pxd"
168169
include "handles/transport.pxd"
169170
include "handles/tcp.pxd"
170171
include "handles/pipe.pxd"

uvloop/loop.pyx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1597,6 +1597,7 @@ include "handles/timer.pyx"
15971597
include "handles/signal.pyx"
15981598
include "handles/poll.pyx"
15991599
include "handles/stream.pyx"
1600+
include "handles/server.pyx"
16001601
include "handles/transport.pyx"
16011602
include "handles/tcp.pyx"
16021603
include "handles/pipe.pyx"

0 commit comments

Comments
 (0)