
    fQi6                         d Z ddlZddlZddlZddlZddlZddlZddlmZm	Z	m
Z
  G d de          Z G d de          ZdS )zSMPP client module    N)consts
exceptionssmppc                   8    e Zd ZdZdZd Zed             Zd ZdS )SimpleSequenceGenerator   ic                     | j         | _        d S N)MIN_SEQUENCE	_sequenceselfs    ^/home/jenkins/workspace/simtester-sanitize/venv/lib/python3.11/site-packages/smpplib/client.py__init__z SimpleSequenceGenerator.__init__$   s    *    c                     | j         S r
   )r   r   s    r   sequencez SimpleSequenceGenerator.sequence'   s
    ~r   c                 j    | j         | j        k    r| j        | _         n| xj         dz  c_         | j         S )Nr   )r   MAX_SEQUENCEr   r   s    r   next_sequencez%SimpleSequenceGenerator.next_sequence+   s6    >T...!.DNNNNaNN~r   N)	__name__
__module____qualname__r   r   r   propertyr   r    r   r   r   r      sW        LL+ + +   X    r   r   c                   &   e Zd ZdZej        ZdZdZdZ	dZ
dZdZ	 	 	 	 	 d'dZd Zd Zd Zed             Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d Z%d Z&d Z'd Z(d Z)d  Z*d(d"Z+d(d#Z,d(d$Z-d% Z.d& Z/dS ))ClientzSMPP client classN   c                 `   || _         t          |          | _        || _        || _        t          j        |p!d                    t          |                               | _	        |t                      }|| _        |"t          j        dt                     d| _        n|| _        d | _        d S )Nzsmpp.Client.{}zUnknown optional parameters during PDU parsing will stop causing an exception in a future smpplib version (in order to comply with the SMPP spec). To switch behavior now set allow_unknown_opt_params to True.F)hostintport_ssl_contexttimeoutlogging	getLoggerformatidloggerr   sequence_generatorwarningswarnDeprecationWarningallow_unknown_opt_params_socket)r   r    r"   r$   r*   logger_namessl_contextr.   s           r   r   zClient.__init__?   s     	II	''(X7G7N7NrRVxx7X7XYY%!8!:!:"4#+M< #   -2D)),DD) r   c                     | S r
   r   r   s    r   	__enter__zClient.__enter__a   s    r   c           	         | j         	 |                                  n# t          j        t          j        f$ r}t          t          |dt                                          dk    r3| j        	                    d|j
        d         |j
        d                    n| j        	                    d|           Y d }~nd }~ww xY w|                                  d S d S )Nargsr   z(%d) %s. Ignoredr   z%s. Ignored)r/   unbindr   PDUErrorConnectionErrorlengetattrtupler)   warningr5   
disconnect)r   exc_type	exc_value	tracebackes        r   __exit__zClient.__exit__d   s    <#:')CD : : :wq&%''2233a77K''(:AF1IqvayQQQQK''q999	:
 OO $#s    B?A<B::B?c                 N    | j         | j                            d|            d S d S )Nz%s was not closed)r/   r)   r<   r   s    r   __del__zClient.__del__o   s1    <#K 3T::::: $#r   c                     | j         j        S r
   )r*   r   r   s    r   r   zClient.sequences   s    &//r   c                 4    | j                                         S r
   )r*   r   r   s    r   r   zClient.next_sequencew   s    &44666r   c                     t          j         t           j        t           j                  }|                    | j                   | j        |S | j                            |          S r
   )socketAF_INETSOCK_STREAM
settimeoutr$   r#   wrap_socket)r   
raw_sockets     r   _create_socketzClient._create_socketz   sT    ]6>63EFF
dl+++$ ,,Z888r   c                 P   | j                             d| j        | j                   	 | j        |                                 | _        | j                            | j        | j        f           t          j        | _	        dS # t          j        $ r t          j        d          w xY w)zConnect to SMSCzConnecting to %s:%s...NzConnection refused)r)   infor    r"   r/   rN   connectr   SMPP_CLIENT_STATE_OPENstaterH   errorr   r8   r   s    r   rQ   zClient.connect   s     	149diHHH	C|##2244L  $)TY!78886DJJJ| 	C 	C 	C,-ABBB	Cs   AB $B%c                 
   | j                             d           | j        t          j        k    r| j                             d|            | j         | j                                         d| _        t          j        | _        dS )zDisconnect from the SMSCzDisconnecting...z&%s is disconnecting in the bound stateN)	r)   rP   rS   r   rR   r<   r/   closeSMPP_CLIENT_STATE_CLOSEDr   s    r   r=   zClient.disconnect   ss    +,,,:666K H$OOO<#L   DL4


r   c           
         |dv r| j                             d           t          j        |fd| i|}|                     |           	 |                                 }n&# t          j        $ r t          j	                    w xY w|
                                rit          j        d                    |j        |j        t          j                            |j        d                    t%          |j                            |S )z)Send bind_transmitter command to the SMSC)bind_receiverbind_transceiverzReceiver modeclient({}) {}: {}zUnknown code)r)   debugr   make_pdusend_pduread_pdurH   r$   r   r8   is_errorr7   r'   statuscommandr   DESCRIPTIONSgetr!   )r   command_namekwargspresps        r   _bindzClient._bind   s    @@@Ko...M,>>t>v>>a	/==??DD~ 	/ 	/ 	/,...	/==?? 	%m&:&:#''^DD'F 'F DK  	   s   	A #Bc                      | j         di |S )zBind as a transmitterbind_transmitter)rl   rj   r   rg   s     r   rl   zClient.bind_transmitter       tz77777r   c                      | j         di |S )zBind as a receiverrY   )rY   rm   rn   s     r   rY   zClient.bind_receiver   s    tz44V444r   c                      | j         di |S )z*Bind as a transmitter and receiver at oncerZ   )rZ   rm   rn   s     r   rZ   zClient.bind_transceiver   ro   r   c                     t          j        d|           }|                     |           	 |                                 S # t          j        $ r t          j                    w xY w)zUnbind from the SMSCr6   r[   )r   r^   r_   r`   rH   r$   r   r8   )r   rh   s     r   r6   zClient.unbind   si     M(4000a	/==??"~ 	/ 	/ 	/,...	/s   A #A$c                 R   | j         t          j        |j                 vr9t	          j        d|j        dt          j        t          j                           | j        	                    d|j                   |
                                }| j        	                    dt          j        |          t          |                     	 | j                            |           nD# t           j        $ r2}| j                            |           t	          j                    d}~ww xY wdS )zSend PDU to the SMSCzCommand z	 failed: zSending %s PDUz>>%s (%d bytes)NT)rS   r   COMMAND_STATESrc   r   r7   rd   SMPP_ESME_RINVBNDSTSr)   r]   generatebinasciib2a_hexr9   r/   sendallrH   rT   r<   r8   )r   rh   	generatedrA   s       r   r_   zClient.send_pdu   s    :V219===%%			#F$?@@'   
 	*AI666JJLL	+X-=i-H-H#i..YYY	/L  ++++| 	/ 	/ 	/K""",...	/ ts   C# #D$2-DD$c                    g }d}||k     r	 | j                             ||z
            }nS# t          j        $ r  t          j        $ r2}| j                            |           t          j                    d}~ww xY w|st          j                    |t          |          z  }|
                    |           ||k     d                    |          S )zV
        Keep reading from self._socket until exact_size bytes have been read
        r   Nr   )r/   recvrH   r$   rT   r)   r<   r   r8   r9   appendjoin)r   
exact_sizepartsreceivedpartrA   s         r   _recv_exactzClient._recv_exact   s     ##3|((h)>??>   < 3 3 3##A&&& 02223  3 0222D		!HLL ## xxs   * A:-A55A:c                    | j                             d           |                     d          }	 t          j        d|          d         }nO# t          j        $ r= | j                             dt          |                     t          j	        d          w xY w||                     |dz
            z   }| j                             dt          j        |          t          |                     t          j        || | j                  }| j                             d	|j                   |                                r|S |j        t$          j        v rt$          j        |j                 | _        |S )
zRead PDU from the SMSCzWaiting for PDU...   z>Lr   zReceive broken pdu... %sz
Broken PDUz<<%s (%d bytes))r[   r.   zRead %s PDU)r)   r]   r   structunpackrT   r<   reprr   r7   rx   ry   r9   r   	parse_pdur.   rc   ra   r   STATE_SETTERSrS   )r   raw_lenlengthraw_pdupdus        r   r`   zClient.read_pdu   s[    	.///""1%%	4]411!4FF| 	4 	4 	4K :DMMJJJ%l333	4 D,,VaZ888+X-=g-F-FGUUUn%)%B
 
 
 	-555<<>> 	;J[F000-ck:DJ
s   A ABc                      t          d          )zAccept an objectznot implemented)NotImplementedError)r   objs     r   acceptzClient.accept  s    !"3444r   c                     |                      |          }|t          j        }t          j        d| |          }|j        |_        |                     |           dS )z"Handler for received message eventr   Ndeliver_sm_resp)r[   rb   )message_received_handlerr   SMPP_ESME_ROKr   r^   r   r_   )r   r   rb   dsmrs       r   _message_receivedzClient._message_received  s]    ..3.77>)F}.tFKKKdr   c                 t    t          j        d|           }|j        |_        |                     |           dS )zResponse to enquire_linkenquire_link_resprs   N)r   r^   r   r_   )r   r   lers      r   _enquire_link_receivedzClient._enquire_link_received  s8    m/===|cr   c                 2    |                      |           dS )z$Handler for alert notification eventr   Nr   r   r   s     r   _alert_notificationzClient._alert_notification%  s    %%#%.....r   c                     || _         dS )z0Set new function to handle message receive eventNr   r   funcs     r   set_message_received_handlerz#Client.set_message_received_handler)  s    (,%%%r   c                     || _         dS )z-Set new function to handle message sent eventN)message_sent_handlerr   s     r   set_message_sent_handlerzClient.set_message_sent_handler-  s    $(!!!r   c                     || _         dS )z+Set new function to handle query resp eventN)query_resp_handlerr   s     r   set_query_resp_handlerzClient.set_query_resp_handler1  s    "&r   c                     || _         dS )z4Set new function to handle PDUs with an error statusN)error_pdu_handlerr   s     r   set_error_pdu_handlerzClient.set_error_pdu_handler5  s    !%r   c                 :    | j                             d           dS )z=Custom handler to process received message. May be overriddenz&Message received handler (Override me)Nr)   r<   r   r   rg   s      r   r   zClient.message_received_handler9  s    DEEEEEr   c                 :    | j                             d           dS )zd
        Called when SMPP server accept message (SUBMIT_SM_RESP).
        May be overridden
        z"Message sent handler (Override me)Nr   r   s      r   r   zClient.message_sent_handler=  s!    
 	@AAAAAr   c                 :    | j                             d           dS )z@Custom handler to process response to queries. May be overriddenz Query resp handler (Override me)Nr   r   s      r   r   zClient.query_resp_handlerD  s    >?????r   c           
          t          j        d                    |j        |j        t
          j                            |j        d                    t          |j                            )Nr\   zUnknown status)	r   r7   r'   rb   rc   r   rd   re   r!   r   s     r   r   zClient.error_pdu_handlerH  s[    !-"6"6JK##CJ0@AA#C #C 
OO	
 
 	
r   Tc                 l   |t          j        dt                     	 	 |                                 }n^# t          j        $ rL |s | j                            d           t          j	        d|           }| 
                    |           Y dS w xY w|                                r|                     |           |j        dk    r| j                            d           dS |j        dk    r|                     |	           dS |j        d
k    r|                     |           dS |j        dk    r|                     |           dS |j        dk    r|                     |           dS |j        dk    rdS |j        dk    r|                     |           dS | j                            d|j                   dS # t*          j        $ rh}|rZt/          |j                  dk    rB|j        d         |v r3| j                            d|j        d         |j        d                    n Y d}~dS d}~ww xY w)zRead a PDU and actNzlignore_error_codes is deprecated, use set_error_pdu_handler to configure a custom error PDU handler instead.zSocket timeout, listening againenquire_linkrs   r6   zUnbind command receivedsubmit_sm_respr   
deliver_smquery_sm_respr   alert_notificationzUnhandled SMPP command "%s"r   z(%d) %s. Ignored.r   )r+   r,   r-   r`   rH   r$   r)   r]   r   r^   r_   ra   r   rc   rP   r   r   r   r   r   r<   r   r7   r9   r5   )r   ignore_error_codesauto_send_enquire_linkr   rA   s        r   	read_oncezClient.read_onceP  s    )M@"  #	mmoo>   - !!"CDDDmN4@@@c""" ||~~ ,&&s+++{h&&  !:;;; 000))c)22222,,&&s+++++//'',,,,,..++C00000 333 444((-----##$A3;OOOOO" 	 	 	! c!&kkAoo!&)GY:Y:Y##$7AF1INNNN ONNNNN	s_   4 F< ABF< BAF< "!F<  F< ' F< 	 F< +F< 8 F<  F< <H3AH..H3c                 |    	 t          j         | j        gg g d          \  }}}|sdS |                     ||           <)z Act on available PDUs and returnTr   N)selectr/   r   )r   r   r   readable	_writable_exceptionals         r   pollzClient.poll  sS    	G06t|nbRTVW0X0X-Hi NN-/EFFF		Gr   c                 2    	 |                      ||           )zListen for PDUs and act)r   )r   r   r   s      r   listenzClient.listen  s$    	GNN-/EFFF	Gr   c                 V    t          j        dd| i|}|                     |           |S )a<  Send message

        Required Arguments:
            source_addr_ton -- Source address TON
            source_addr -- Source address (string)
            dest_addr_ton -- Destination address TON
            destination_addr -- Destination address (string)
            short_message -- Message text (string)
        	submit_smr[   )r   r   r^   r_   )r   rg   ssms      r   send_messagezClient.send_message  s5     m?????c
r   c                 V    t          j        dd| i|}|                     |           |S )a  Query message state

        Required Arguments:
            message_id -- SMSC assigned Message ID
            source_addr_ton -- Original source address TON
            source_addr_npi -- Original source address NPI
            source_addr -- Original source address (string)
        query_smr[   )r   r   )r   rg   qsms      r   query_messagezClient.query_message  s5     m>>t>v>>c
r   )r   NNNN)NT)0r   r   r   __doc__r   rW   rS   r    r"   vendorr/   r#   r*   r   r3   rB   rD   r   r   r   rN   rQ   r=   rj   rl   rY   rZ   r6   r_   r   r`   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   3   s       +EDDFGL !%       D  	 	 	; ; ; 0 0 X07 7 79 9 9C C C	5 	5 	5  ,8 8 85 5 58 8 8	/ 	/ 	/  *  (  B5 5 5    / / /- - -) ) )' ' '& & &F F FB B B@ @ @
 
 
- - - -^G G G GG G G G
      r   r   )r   rx   r%   r   rH   r   r+   smpplibr   r   r   objectr   r   r   r   r   <module>r      s   &         , , , , , , , , , ,    f   (t t t t tV t t t t tr   