@@ -60,18 +60,21 @@ class Client(object):
6060 port = None
6161 vendor = None
6262 _socket = None
63+ _ssl_context = None
6364 sequence_generator = None
6465
65- def __init__ (self , host , port , timeout = 5 , sequence_generator = None , logger_name = None ):
66+ def __init__ (self , host , port , timeout = 5 , sequence_generator = None , logger_name = None , ssl_context = None ):
6667 self .host = host
6768 self .port = int (port )
68- self ._socket = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
69+ self ._ssl_context = ssl_context
6970 self .timeout = timeout
7071 self .logger = logging .getLogger (logger_name or 'smpp.Client.{}' .format (id (self )))
7172 if sequence_generator is None :
7273 sequence_generator = SimpleSequenceGenerator ()
7374 self .sequence_generator = sequence_generator
7475
76+ self ._socket = self ._create_socket ()
77+
7578 def __enter__ (self ):
7679 return self
7780
@@ -97,14 +100,21 @@ def sequence(self):
97100 def next_sequence (self ):
98101 return self .sequence_generator .next_sequence ()
99102
103+ def _create_socket (self ):
104+ raw_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
105+ if self ._ssl_context is None :
106+ return raw_socket
107+
108+ return ssl_context .wrap_socket (raw_socket )
109+
100110 def connect (self ):
101111 """Connect to SMSC"""
102112
103113 self .logger .info ('Connecting to %s:%s...' , self .host , self .port )
104114
105115 try :
106116 if self ._socket is None :
107- self ._socket = socket . socket ( socket . AF_INET , socket . SOCK_STREAM )
117+ self ._socket = self . _create_socket ( )
108118 self ._socket .settimeout (self .timeout )
109119 self ._socket .connect ((self .host , self .port ))
110120 self .state = consts .SMPP_CLIENT_STATE_OPEN
0 commit comments