1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 import socket
21 from qpid.util import connect
22
23 TRANSPORTS = {}
24
26
28 self.socket = connect(host, port)
29 if conn.tcp_nodelay:
30 self.socket.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
31
33 return self.socket.fileno()
34
35 -class tcp(SocketTransport):
36
39
42
43 - def send(self, bytes):
44 return self.socket.send(bytes)
45
47 return self.socket.recv(n)
48
51
52 TRANSPORTS["tcp"] = tcp
53
54 try:
55 from ssl import wrap_socket, SSLError, SSL_ERROR_WANT_READ, \
56 SSL_ERROR_WANT_WRITE
57 except ImportError:
58 pass
59 else:
60 - class tls(SocketTransport):
61
63 SocketTransport.__init__(self, conn, host, port)
64 self.tls = wrap_socket(self.socket)
65 self.socket.setblocking(0)
66 self.state = None
67
69 if self.state is None:
70 return reading
71 else:
72 return self.state == SSL_ERROR_WANT_READ
73
75 if self.state is None:
76 return writing
77 else:
78 return self.state == SSL_ERROR_WANT_WRITE
79
80 - def send(self, bytes):
89
99
102
104 if code in (SSL_ERROR_WANT_READ, SSL_ERROR_WANT_WRITE):
105 self.state = code
106 return True
107 else:
108 return False
109
111 self.socket.setblocking(1)
112
113 self.tls.close()
114
115 TRANSPORTS["ssl"] = tls
116 TRANSPORTS["tcp+tls"] = tls
117