Tryag File Manager
Home
-
Turbo Force
Current Path :
/
proc
/
self
/
root
/
usr
/
share
/
doc
/
m2crypto-0.16
/
demo
/
ssl
/
Upload File :
New :
File
Dir
//proc/self/root/usr/share/doc/m2crypto-0.16/demo/ssl/echod-async.py
#!/usr/bin/python """An asyncore-based SSL 'echo' server. Copyright (c) 1999-2003 Ng Pheng Siong. All rights reserved.""" import asyncore, errno, socket, time from M2Crypto import Rand, SSL import echod_lib class ssl_echo_channel(asyncore.dispatcher): buffer = 'Ye Olde Echo Servre\r\n' def __init__(self, conn): asyncore.dispatcher.__init__(self, conn) self._ssl_accepting = 1 self.peer = self.get_peer_cert() def handle_connect(self): pass def handle_close(self): self.close() def writable(self): return self._ssl_accepting or (len(self.buffer) > 0) def handle_write(self): if self._ssl_accepting: s = self.socket.accept_ssl() if s: self._ssl_accepting = 0 else: try: n = self.send(self.buffer) if n == -1: pass elif n == 0: self.handle_close() else: self.buffer = self.buffer[n:] except SSL.SSLError, what: if str(what) == 'unexpected eof': self.handle_close() return else: raise def readable(self): return 1 def handle_read(self): if self._ssl_accepting: s = self.socket.accept_ssl() if s: self._ssl_accepting = 0 else: try: blob = self.recv(4096) if blob is None: pass elif blob == '': self.handle_close() else: self.buffer = self.buffer + blob except SSL.SSLError, what: if str(what) == 'unexpected eof': self.handle_close() return else: raise class ssl_echo_server(SSL.ssl_dispatcher): channel_class=ssl_echo_channel def __init__(self, addr, port, ssl_context): SSL.ssl_dispatcher.__init__(self) self.create_socket(ssl_context) self.set_reuse_addr() self.socket.setblocking(0) self.bind((addr, port)) self.listen(5) self.ssl_ctx=ssl_context def handle_accept(self): try: sock, addr = self.socket.accept() self.channel_class(sock) except: print '-'*40 import traceback traceback.print_exc() print '-'*40 return def writable(self): return 0 if __name__=='__main__': Rand.load_file('../randpool.dat', -1) ctx = echod_lib.init_context('sslv23', 'server.pem', 'ca.pem', \ #SSL.verify_peer | SSL.verify_fail_if_no_peer_cert) SSL.verify_none) ctx.set_tmp_dh('dh1024.pem') ssl_echo_server('', 9999, ctx) asyncore.loop() Rand.save_file('../randpool.dat')