blob: 73a4b824fba3d1e94dc46931cfa6ab8d81ea4f49 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
from __future__ import absolute_import
"""SSL dispatcher
Copyright (c) 1999-2002 Ng Pheng Siong. All rights reserved."""
# Python
import asyncore
import socket
# M2Crypto
from M2Crypto import util # noqa
from M2Crypto.SSL.Connection import Connection
from M2Crypto.SSL.Context import Context # noqa
__all__ = ['ssl_dispatcher']
class ssl_dispatcher(asyncore.dispatcher):
def create_socket(self, ssl_context):
# type: (Context) -> None
self.family_and_type = socket.AF_INET, socket.SOCK_STREAM
self.ssl_ctx = ssl_context
self.socket = Connection(self.ssl_ctx)
# self.socket.setblocking(0)
self.add_channel()
def connect(self, addr):
# type: (util.AddrType) -> None
self.socket.setblocking(1)
self.socket.connect(addr)
self.socket.setblocking(0)
def recv(self, buffer_size=4096):
# type: (int) -> bytes
"""Receive data over SSL."""
return self.socket.recv(buffer_size)
def send(self, buffer):
# type: (bytes) -> int
"""Send data over SSL."""
return self.socket.send(buffer)
|