
    O[ik4                        d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZmZmZmZmZmZmZ d dlmZ d d	lmZmZmZmZ d
dlmZmZ  ej@                  e!      Z" G d d      Z# G d d      Z$y)    N)sha1)BytesIO)raw)
Connection)mtproto)RPCErrorInternalServerErrorAuthKeyDuplicated	FloodWaitServiceUnavailableBadMsgNotificationSecurityCheckMismatch)layer)TLObjectMsgContainerIntFutureSalts   )MsgId
MsgFactoryc                       e Zd Zd Zy)Resultc                 D    d | _         t        j                         | _        y N)valueasyncioEventeventselfs    K/var/www/files/kim/lib/python3.12/site-packages/pyrogram/session/session.py__init__zResult.__init__*   s    
]]_
    N)__name__
__module____qualname__r"    r#   r!   r   r   )   s    %r#   r   c                       e Zd ZdZdZdZdZdZdZdZ	dddd	Z
	 	 d"d
ddededededefdZd Zd Zd Zd Zd Zd ZdefdededefdZeeefdedededefd Zy!)#Session      
      i  zauth key not foundztransport floodz
invalid DC)i  i  i  clientzpyrogram.Clientdc_idauth_key	test_modeis_mediais_cdnc                    || _         || _        || _        || _        || _        || _        d | _        t        |      j                         dd  | _	        t        j                  d      | _        t               | _        d| _        t!               | _        i | _        g | _        d | _        t+        j,                         | _        d | _        t+        j,                         | _        t+        j4                         | _        y )Ni   r   )r.   r/   r0   r1   r2   r3   
connectionr   digestauth_key_idosurandom
session_idr   msg_factorysaltsetpending_acksresultsstored_msg_ids	ping_taskr   r   ping_task_event	recv_task
is_startedget_event_looploop)r    r.   r/   r0   r1   r2   r3   s          r!   r"   zSession.__init__>   s     
 " >002237**Q-%<	E &}}!--/**,	r#   c                 F  K   	 t        | j                  | j                  | j                  j                  | j                  j
                  | j                        | _        	 | j                  j                          d {    | j                  j                  | j                               | _        | j                  t        j                  j!                  d      | j"                         d {    | j$                  s!| j                  t        j                  j'                  t(        t        j                  j+                  | j                  j,                  j/                          d {   | j                  j0                  | j                  j2                  | j                  j4                  | j                  j6                  | j                  j6                  dt        j                  j8                  j;                                     | j"                         d {    | j                  j                  | j=                               | _        t@        jC                  dt(               t@        jC                  d| j                  j2                  | j                  j0                         t@        jC                  d	| j                  j4                  | j                  j6                         	 | jN                  jQ                          t@        jC                  d
       y 7 7 -7 7 # tD        $ r }| jG                          d {  7   |d }~wtH        tJ        f$ r | jG                          d {  7   Y n+tL        $ r }| jG                          d {  7   |d }~ww xY ww)Nr   )ping_idtimeout )api_idapp_versiondevice_modelsystem_versionsystem_lang_code	lang_code	lang_packquery)r   rT   zSession initialized: Layer %szDevice: %s - %szSystem: %s (%s)zSession started))r   r/   r1   r.   ipv6proxyr2   r6   connectrG   create_taskrecv_workerrD   sendr   	functionsPingSTART_TIMEOUTr3   InvokeWithLayerr   InitConnectionstoragerM   rN   rO   rP   rR   help	GetConfigping_workerrB   loginfor
   stopOSErrorr   	ExceptionrE   r>   r    es     r!   startzSession.startf   s    (

  !!DO'oo--///!%!6!6t7G7G7I!Jii 2 21 2 =tGYGYiZZZ{{))55"'"%--">">-1[[-@-@-G-G-I'I,0KK,C,C-1[[-E-E/3{{/I/I151F1F*.++*?*?*,&)mm&8&8&B&B&D #? 	# 6  !% 2 2 $   " "&!6!6t7G7G7I!J8%@*DKK,D,DdkkF]F]^*DKK,F,FH]H]^ "#U 0 [ (J	, % iik!!X& "iik!! iik!!Y s   AN!L# <L=A0L# -L.A:L# (L)B2L# L C
L# &1N!L# L# L#  L# #	N,M?M M%N,M/-N2N!4N<NNNNN!c                   K   | j                   j                          | j                  j                          | j                  j	                          | j
                  | j
                   d {    | j                  j                          | j                  j                          d {    | j                  r| j                   d {    | j                  sMt        | j                  j                        r.	 | j                  j                  | j                         d {    t        j!                  d       y 7 7 7 w7  # t        $ r}t        j                  |       Y d }~Ad }~ww xY ww)NzSession stopped)rE   clearrA   rC   r>   rB   r6   closerD   r2   callabler.   disconnect_handlerrh   rd   	exceptionre   ri   s     r!   rf   zSession.stop   s    !!#  ">>%..  ""$oo##%%%>>..  }}$++*H*H!I!kk44T[[AAA 	"# ! 	& ! B !a  !sr   A*E/,D<-;E/(D>)E/E 	/E/9(E !E"E &E/>E/ E/E 	E,E'"E/'E,,E/c                 t   K   | j                          d {    | j                          d {    y 7 7 wr   )rf   rk   r   s    r!   restartzSession.restart   s-     iikjjl 	s   848688c                 
  K   | j                   j                  t        j                  t        j
                  t        |      | j                  | j                  | j                         d {   }t        |j                  t              r|j                  j                  n|g}t        j                  d|       |D ]  }|j                   dz  dk7  r>|j"                  | j$                  v r/| j$                  j'                  |j"                         	 t)        | j*                        t,        j.                  kD  r | j*                  d t,        j.                  dz  = | j*                  r|j"                  | j*                  d   k  rt1        d      |j"                  | j*                  v rt1        d      |j"                  t3               z
  dz  }|dkD  rt1        d      |d	k  rt1        d
      t5        j6                  | j*                  |j"                         t        |j                  t>        j@                  jB                  t>        j@                  jD                  f      r1| j$                  j'                  |j                  jF                         t        |j                  t>        j@                  jH                        rd }t        |j                  t>        j@                  jJ                  t>        j@                  jL                  f      r|j                  jN                  }nt        |j                  tP        t>        j@                  jR                  f      r|j                  jT                  }nt        |j                  t>        j@                  jV                        r|j                  j"                  }nJ| jX                  >| j                   j[                  | jX                  j]                  |j                               || j^                  v sIta        |j                  d|j                        | j^                  |   _1        | j^                  |   jd                  jg                           t)        | j$                        | jh                  k\  rt        j                  dt)        | j$                               	 | jk                  t>        j@                  jm                  to        | j$                              d       d {    | j$                  jq                          y y 7 # t0        $ rD}t        j9                  d|       | j:                  j=                          d {  7   Y d }~ y d }~ww xY w7 s# tr        $ r Y y w xY ww)NzReceived: %sr*   r   z.The msg_id is lower than all the stored valuesz/The msg_id is equal to any of the stored valuesl           zhThe msg_id belongs to over 30 seconds in the future. Most likely the client time has to be synchronized.izgThe msg_id belongs to over 300 seconds in the past. Most likely the client time has to be synchronized.zDiscarding packet: %sresultzSending %s acks)msg_idsF):rG   run_in_executorpyrogramcrypto_executorr   unpackr   r;   r0   r8   
isinstancebodyr   messagesrd   debugseq_nomsg_idr?   addlenrA   r)   STORED_MSG_IDS_MAX_SIZEr   r   bisectinsortre   r6   rn   r   typesMsgDetailedInfoMsgNewDetailedInfoanswer_msg_idNewSessionCreatedr   BadServerSalt
bad_msg_idr   	RpcResult
req_msg_idPongr.   rX   handle_updatesr@   getattrr   r   r>   ACKS_THRESHOLDrZ   MsgsAcklistrm   rg   )r    packetdatar~   msg	time_diffrj   r   s           r!   handle_packetzSession.handle_packet   s	    YY..$$NNFOOOMM
 
 $))\2 II 	 			.$' 7	1CzzA~"::!2!22%%))#**5?t**+g.M.MM++,QW-L-LPQ-Q,QR&&zzD$7$7$::34deezzT%8%8834eff!$eg!5 @I 2~3 5j k k !4'3 5j k k d113::>#((SYY%>%>		@\@\$]^!!%%chh&<&<=#((CII$?$?@F#((SYY%A%A399CZCZ$[\,,CHH{CII4G4G&HI,,CHHciinn5;;*II))$++*D*DSXX*NO%-4SXXx-RV$*V$**..0o7	1r t  !T%8%88II'T->->)?@*ii		 1 1$t?P?P:Q 1 RTYZZZ !!'') 9U
X ) 0!4oo++---D [ s   A'U6)T*B#U6CT$HU6B(U6+AU' 1U%2U' 6U6	U"3UUUU6U""U6%U' '	U30U62U33U6c                   K   t         j                  d       	 	 t        j                  | j                  j                         | j                         d {    	 t         j                  d       y 7 # t        j                  $ r Y nw xY w	 | j                  t        j                  j                  d| j                  dz         d       d {  7   n# t        t        f$ r Y nw xY wҭw)NzPingTask startedr   r,   )rI   disconnect_delayFzPingTask stopped)rd   re   r   wait_forrC   waitPING_INTERVALTimeoutErrorrZ   r   r[   PingDelayDisconnectWAIT_TIMEOUTrg   r   r   s    r!   rc   zSession.ping_worker  s     #$&&t';';'@'@'BDDVDVWWW  	#$ X'' 
iiMM55 !D4E4E4J 6   
 X&  sk   C+;A3 A1A3 C+1A3 3B	C+B		C+AC CC C+C'$C+&C''C+c                 T  K   t         j                  d       	 | j                  j                          d {   }|t	        |      dk(  r|rTt        j                  t        |             }t         j                  d|t        j                  j                  |d             | j                  j                         r)| j                  j                  | j!                                n+| j                  j                  | j#                  |             t         j                  d       y 7 w)NzNetworkTask started   z$Server sent transport error: %s (%s)zunknown errorzNetworkTask stopped)rd   re   r6   recvr   r   readr   warningr)   TRANSPORT_ERRORSgetrE   is_setrG   rX   rs   r   )r    r   
error_codes      r!   rY   zSession.recv_worker%  s     &'??//11F~V!1"%((76?";!;JKK>"G$<$<$@$@_$]
 ??))+II))$,,.9II!!$"4"4V"<=# & 	&'% 2s   4D(D&C0D(Tr   wait_responserK   c           	        K   | j                  |      }|j                  }|rt               | j                  |<   t        j                  d|       | j                  j                  t        j                  t        j                  || j                  | j                  | j                  | j                         d {   }	 | j                   j#                  |       d {    |r	 t)        j*                  | j                  |   j,                  j/                         |       d {    | j                  j'                  |      j2                  }|t1        d      t5        |t6        j8                  j:                        rit5        |t6        j<                  j>                  t6        j<                  j@                  f      r|jB                  }tE        jF                  |tI        |             t5        |t6        j8                  jJ                        r8t        jM                  dtJ        jN                  tK        |jP                               t5        |t6        j8                  jR                        r,|jT                  | _        | j#                  |||       d {   S |S y 7 7 # t$        $ r#}| j                  j'                  |d        |d }~ww xY w7 # t(        j0                  $ r Y w xY w7 Yw)NzSent: %szRequest timed outz%s: %s)+r<   r   r   r@   rd   r   rG   rx   ry   rz   r   packr=   r;   r0   r8   r6   rZ   rg   popr   r   r   r   r   r   r|   r   r   RpcErrorr[   InvokeWithoutUpdatesInvokeWithTakeoutrT   r   raise_ittyper   r   r$   r   r   new_server_salt)	r    r   r   rK   messager   payloadrj   rv   s	            r!   rZ   zSession.send=  s1    ""4(#)8DLL 		*g&		11$$LLIIOOMM
 
	//&&w///
 &&t||F';'A'A'F'F'H'RRR \\%%f-33F~"#677&#))"4"45dS]]%G%GIhIh$ij::D!!&$t*5&#))">">?H&8&A&ACUV\VgVgChi&#))"9"9:"22	!YYt]GDDDM1 !
 0 	LLVT*G	 S'' & Es   B5K)7J8K)=J JJ  K)$>K "K
#K 'E&K)K'K)J 	K$KKK)
K K$ K)#K$$K)rT   retriessleep_thresholdc           	      \  K   	 t        j                  | j                  j                         | j                         d {    t        |t        j                  j                  t        j                  j                  f      r|j                  }n|}dj                  |j                  j                  d      dd        }	 	 | j                  ||       d {   S 7 # t         j
                  $ r Y w xY w7 # t         $ rm}|j"                  }||cxkD  rdk\  r  t$        j'                  d| j(                  j*                  ||       t        j,                  |       d {  7   Y d }~nd }~wt.        t0        t2        f$ r}|dk(  r|d  |dk  rt$        j&                  nt$        j4                  dt6        j8                  |z
  dz   |t;        |      xs t=        |             t        j,                  d       d {  7   | j?                  ||dz
  |       d {  7  cY d }~S d }~ww xY wmw)	N.r   rJ   r   z@[%s] Waiting for %s seconds before continuing (required by "%s")r*   z[%s] Retrying "%s" due to: %sg      ?) r   r   rE   r   r   r   r|   r   r[   r   r   rT   joinQUALNAMEsplitrZ   r   r   rd   r   r.   namesleeprg   r	   r   re   r)   MAX_RETRIESstrreprinvoke)	r    rT   r   rK   r   inner_query
query_namerj   amounts	            r!   r   zSession.invokep  s    	""4??#7#7#94;L;LMMM ecmm@@#--BaBabc++KKXXk2288=abAB
F!YYugY>>> N## 		 ? 	,O0q0 1 ^ KK,,fjB mmF+++02DE Fa<%9!3'''1A5A 1$q' mmC(((![[!WEEEEF s   H,;C C C A;H, C8 C6C8 H,C C30H,2C33H,6C8 8	H'AE)E!E)$H,)H' A8H"8G;9H"HH"H'H,"H''H,N)FF)r$   r%   r&   r]   r   SLEEP_THRESHOLDr   r   r   r   r   intbytesboolr"   rk   rf   rs   r   rc   rY   r   floatrZ   r   r'   r#   r!   r)   r)   /   s   MLOKNM& " &-!&- &- 	&-
 &- &- &-P5$n$2S*j%,(0 @DVb 1x 1 1e 1l #%!0,F,F ,F 	,F
 ,Fr#   r)   )%r   r   loggingr9   hashlibr   ior   ry   r   pyrogram.connectionr   pyrogram.cryptor   pyrogram.errorsr   r	   r
   r   r   r   r   pyrogram.raw.allr   pyrogram.raw.corer   r   r   r   	internalsr   r   	getLoggerr$   rd   r   r)   r'   r#   r!   <module>r      sl   &    	     * #   # F F (g!% %mF mFr#   