fQi6dZddlZddlZddlZddlZddlZddlZddlmZm Z m Z Gdde Z Gdde Z dS)zSMPP client moduleN)consts exceptionssmppc8eZdZdZdZdZedZdZdS)SimpleSequenceGeneratoric|j|_dSN) MIN_SEQUENCE _sequenceselfs ^/home/jenkins/workspace/simtester-sanitize/venv/lib/python3.11/site-packages/smpplib/client.py__init__z SimpleSequenceGenerator.__init__$s*c|jSr )r r s rsequencez SimpleSequenceGenerator.sequence's ~rcj|j|jkr |j|_n|xjdz c_|jS)Nr)r MAX_SEQUENCEr r s r next_sequencez%SimpleSequenceGenerator.next_sequence+s6 >T. . .!.DNN NNa NN~rN) __name__ __module__ __qualname__r rrpropertyrrrrrrsWLL+++Xrrc&eZdZdZejZdZdZdZ dZ dZ dZ d'dZ dZdZdZedZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)d Z*d(d"Z+d(d#Z,d(d$Z-d%Z.d&Z/dS))ClientzSMPP client classNc`||_t||_||_||_t j|p!dt||_ |t}||_ |"tj dtd|_n||_d|_dS)Nzsmpp.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)hostintport _ssl_contexttimeoutlogging getLoggerformatidloggerrsequence_generatorwarningswarnDeprecationWarningallow_unknown_opt_params_socket)rr r"r$r* logger_name ssl_contextr.s rrzClient.__init__?s II ' ' (X7G7N7NrRVxx7X7XYY  %!8!:!: "4 # + M<#    -2D ) ),DD ) rc|Sr rr s r __enter__zClient.__enter__as rc |j |n#tjtjf$r}t t |dtdkr3|j d|j d|j dn|j d|Yd}~nd}~wwxYw| dSdS)Nargsrz(%d) %s. Ignoredrz %s. Ignored) r/unbindrPDUErrorConnectionErrorlengetattrtupler)warningr5 disconnect)rexc_type exc_value tracebackes r__exit__zClient.__exit__ds < # : ')CD : : :wq&%''2233a77K''(:AF1IqvayQQQQK'' q999  : OO      $ #sB?A63EFF dl+++   $  ,,Z888rcP|jd|j|j |j||_|j|j|jftj|_ dS#tj $rtj dwxYw)zConnect to SMSCzConnecting to %s:%s...NzConnection refused)r)infor r"r/rNconnectrSMPP_CLIENT_STATE_OPENstaterHerrorrr8r s rrQzClient.connects 149diHHH C|##2244 L $)TY!7 8 8 86DJJJ| C C C,-ABB B Cs AB$B%c |jd|jtjkr|jd||j |jd|_tj|_dS)zDisconnect from the SMSCzDisconnecting...z&%s is disconnecting in the bound stateN) r)rPrSrrRr<r/closeSMPP_CLIENT_STATE_CLOSEDr s rr=zClient.disconnectss +,,, :6 6 6 K   H$ O O O < # L   DL4 rc |dvr|jdtj|fd|i|}|| |}n&#t j$rtj wxYw| ritj d |j |jtj|j dt%|j |S)z)Send bind_transmitter command to the SMSC) bind_receiverbind_transceiverz Receiver modeclient ({}) {}: {}z Unknown code)r)debugrmake_pdusend_pduread_pdurHr$rr8is_errorr7r'statuscommandr DESCRIPTIONSgetr!)r command_namekwargspresps r_bindz Client._binds @ @ @ K  o . . . M, > >t >v > > a /==??DD~ / / /,.. . / ==?? %m&:&:  #'' ^DD'F'FDK     s A#Bc |jdi|S)zBind as a transmitterbind_transmitter)rlrjrrgs rrlzClient.bind_transmittertz77777rc |jdi|S)zBind as a receiverrY)rYrmrns rrYzClient.bind_receiverstz44V444rc |jdi|S)z*Bind as a transmitter and receiver at oncerZ)rZrmrns rrZzClient.bind_transceiverrorctjd|}|| |S#tj$rt jwxYw)zUnbind from the SMSCr6r[)rr^r_r`rHr$rr8)rrhs rr6z Client.unbindsi M(4 0 0 0 a /==?? "~ / / /,.. . /s A#A$cR|jtj|jvr9t jd|jdtjtj|j d|j| }|j dtj |t| |j|nD#t j$r2}|j|t jd}~wwxYwdS)zSend PDU to the SMSCzCommand z failed: zSending %s PDUz>>%s (%d bytes)NT)rSrCOMMAND_STATESrcrr7rdSMPP_ESME_RINVBNDSTSr)r]generatebinasciib2a_hexr9r/sendallrHrTr<r8)rrh generatedrAs rr_zClient.send_pdus :V219= = =%% #F$?@@'  *AI666JJLL  +X-=i-H-H#i..YYY / L  + + + +| / / / K   " " ",.. . /tsC##D$2-DD$cg}d}||kr |j||z }nS#tj$rtj$r2}|j|tjd}~wwxYw|stj|t|z }| |||kd |S)zV Keep reading from self._socket until exact_size bytes have been read rNr) r/recvrHr$rTr)r<rr8r9appendjoin)r exact_sizepartsreceivedpartrAs r _recv_exactzClient._recv_exacts## 3|((h)>??>   < 3 3 3 ##A&&& 0222 3 3 0222 D !H LL   ##xxs*A:-A55A:c|jd|d} tjd|d}nO#tj$r=|jdt|tj dwxYw|||dz z}|jdtj |t|tj|||j}|jd |j|r|S|jt$jvrt$j|j|_|S) zRead PDU from the SMSCzWaiting for PDU...z>LrzReceive broken pdu... %sz Broken PDUz<<%s (%d bytes))r[r.z Read %s PDU)r)r]rstructunpackrTr<reprrr7rxryr9r parse_pdur.rcrar STATE_SETTERSrS)rraw_lenlengthraw_pdupdus rr`zClient.read_pdus[ .///""1%% 4]411!4FF| 4 4 4 K   :DMM J J J%l33 3 4D,,VaZ888 +X-=g-F-FG UUUn %)%B    -555 <<>> ;J [F0 0 0-ck:DJ s A A Bc td)zAccept an objectznot implemented)NotImplementedError)robjs racceptz Client.accepts!"3444rc||}| tj}tjd||}|j|_||dS)z"Handler for received message eventrNdeliver_sm_resp)r[rb)message_received_handlerr SMPP_ESME_ROKrr^rr_)rrrbdsmrs r_message_receivedzClient._message_receiveds]..3.77 >)F}.tFKKK   drcttjd|}|j|_||dS)zResponse to enquire_linkenquire_link_resprsN)rr^rr_)rrlers r_enquire_link_receivedzClient._enquire_link_receiveds8m/===|  crc2||dS)z$Handler for alert notification eventrNrrrs r_alert_notificationzClient._alert_notification%s %%#%.....rc||_dS)z0Set new function to handle message receive eventNrrfuncs rset_message_received_handlerz#Client.set_message_received_handler)s(,%%%rc||_dS)z-Set new function to handle message sent eventN)message_sent_handlerrs rset_message_sent_handlerzClient.set_message_sent_handler-s$(!!!rc||_dS)z+Set new function to handle query resp eventN)query_resp_handlerrs rset_query_resp_handlerzClient.set_query_resp_handler1s"&rc||_dS)z4Set new function to handle PDUs with an error statusN)error_pdu_handlerrs rset_error_pdu_handlerzClient.set_error_pdu_handler5s!%rc :|jddS)z=Custom handler to process received message. May be overriddenz&Message received handler (Override me)Nr)r<rrrgs rrzClient.message_received_handler9s DEEEEErc :|jddS)zd Called when SMPP server accept message (SUBMIT_SM_RESP). May be overridden z"Message sent handler (Override me)Nrrs rrzClient.message_sent_handler=s! @AAAAArc :|jddS)z@Custom handler to process response to queries. May be overriddenz Query resp handler (Override me)Nrrs rrzClient.query_resp_handlerDs >?????rc tjd|j|jt j|jdt|j)Nr\zUnknown status) rr7r'rbrcrrdrer!rs rrzClient.error_pdu_handlerHs[!-"6"6 J K   # #CJ0@ A A#C#C  OO    rTcl|tjdt |}n^#tj$rL|s|jdtj d|}| |YdSwxYw| r| ||j dkr|jddS|j dkr|| dS|j d kr||dS|j d kr||dS|j dkr||dS|j d krdS|j d kr||dS|jd|j dS#t*j$rh}|rZt/|jdkrB|jd|vr3|jd|jd|jdnYd}~dSd}~wwxYw)zRead a PDU and actNzlignore_error_codes is deprecated, use set_error_pdu_handler to configure a custom error PDU handler instead.zSocket timeout, listening again enquire_linkrsr6zUnbind command receivedsubmit_sm_respr deliver_sm query_sm_respralert_notificationzUnhandled SMPP command "%s"rz(%d) %s. Ignored.r)r+r,r-r`rHr$r)r]rr^r_rarrcrPrrrrrr<rr7r9r5)rignore_error_codesauto_send_enquire_linkrrAs r read_oncezClient.read_oncePs  ) M@"    #  mmoo>   - !!"CDDDmN4@@@ c"""  ||~~ ,&&s+++{h&&   !:;;; 000))c)22222 ,,&&s+++++//'',,,,,..++C00000 333 444((----- ##$A3;OOOOO"   ! c!&kkAoo!&)GY:Y:Y ##$7AF1INNNNONNNNN s_4F<AB F<BAF<"!F< F<' F< F<+ F<8 F< F<<H3 AH..H3c| tj|jgggd\}}}|sdS|||<)z Act on available PDUs and returnTrN)selectr/r)rrrreadable _writable _exceptionals rpollz Client.pollsS G06 t|nbRTVW0X0X -Hi  NN-/E F F F  Grc2 |||)zListen for PDUs and act)r)rrrs rlistenz Client.listens$ G NN-/E F F F Grc Vtjdd|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[)rrr^r_)rrgssms r send_messagezClient.send_messages5m????? c rc Vtjdd|i|}|||S)aQuery 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[)rr)rrgqsms r query_messagezClient.query_messages5m>>t>v>> c r)rNNNN)NT)0rrr__doc__rrWrSr r"vendorr/r#r*rr3rBrDrrrrNrQr=rjrlrYrZr6r_rr`rrrrrrrrrrrrrrrrrrrrrr3s  +E D D FGL !%    D   ;;;00X0777999 C C C 5 5 5,888555888 / / /*(B555 ///---)))'''&&&FFFBBB@@@   ----^GGGGGGGG        rr)rrxr%rrHrr+smpplibrrrobjectrrrrrrs& ,,,,,,,,,,f(tttttVtttttr