U
    EZh3                     @   s  U d dl mZmZmZmZmZmZmZ ddlT ddl	m
Z
mZ ddddd	d
dddddgZG dd deedZG dd deedZG dd deedZG dd deedZG dd	 d	eedZG dd
 d
eedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZG dd deedZeee eee eeee eee ee f f ee f f f Zeeeeeeieeeeeieeeieeeieeeiei ei ei ieeeee eeefeiee!ee ee!efee efeieeeeeieeeieeeieeeiei ei iiZ"ee#d < eeee ee f eee ee f f Z$eefeeieefeeieefeeieefeeieefeeieefeeieefeeiiZ%e$e#d!< G d"d# d#Z&d$S )%    )castDictOptionalSetTupleTypeUnion   )*)LocalProtocolErrorSentinelCLIENTSERVERIDLESEND_RESPONSE	SEND_BODYDONE
MUST_CLOSECLOSEDMIGHT_SWITCH_PROTOCOLSWITCHED_PROTOCOLERRORc                   @   s   e Zd ZdS )r   N__name__
__module____qualname__ r   r   Q/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/h11/_state.pyr      s   )	metaclassc                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )r   Nr   r   r   r   r   r      s   c                   @   s   e Zd ZdS )_SWITCH_UPGRADENr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdS )_SWITCH_CONNECTNr   r   r   r   r   r       s   r    EVENT_TRIGGERED_TRANSITIONSSTATE_TRIGGERED_TRANSITIONSc                   @   s   e Zd ZddddZee ddddZdddd	Zee dd
ddZdee ee	 e
ee  ddddZee eee	 eee	 ee f f ddddZddddZddddZdS )ConnectionStateN)returnc                 C   s    d| _ t | _tttti| _d S )NT)
keep_alivesetpending_switch_proposalsr   r   r   statesselfr   r   r   __init__   s    zConnectionState.__init__)roler$   c                 C   s   t | j|< |   d S N)r   r(   !_fire_state_triggered_transitions)r*   r,   r   r   r   process_error  s    
zConnectionState.process_errorc                 C   s   d| _ |   d S )NF)r%   r.   r)   r   r   r   process_keep_alive_disabled  s    z+ConnectionState.process_keep_alive_disabled)switch_eventr$   c                 C   s   | j | |   d S r-   )r'   addr.   )r*   r1   r   r   r   process_client_switch_proposal  s    z.ConnectionState.process_client_switch_proposal)r,   
event_typeserver_switch_eventr$   c                 C   s   |}|d k	r2|t kst|| jkr*td||f}|d krJ|tkrJt | _| || |tkrz|tksjt| t ttf | 	  d S )Nz@Received server _SWITCH_UPGRADE event without a pending proposal)
r   AssertionErrorr'   r   Responser&   !_fire_event_triggered_transitionsRequestr   r.   )r*   r,   r4   r5   Z_event_typer   r   r   process_event  s    
zConnectionState.process_event)r,   r4   r$   c              
   C   sl   | j | }zt| | | }W n> tk
r\   ttt |}td|j|| j | d Y nX || j |< d S )Nz4can't handle event type {} when role={} and state={})	r(   r!   KeyErrorr   r   Eventr   formatr   )r*   r,   r4   state	new_stater   r   r   r8   +  s    
  z1ConnectionState._fire_event_triggered_transitionsc                 C   s   t | j}| jr(| jt tkr(t| jt< | jsF| jt tkrFt| jt< | jsrttfD ]}| j| tkrTt| j|< qT| jt | jt f}t	
|i }| j| | j|kr d S q d S r-   )dictr(   r'   r   r   r   r%   r   r   r"   getupdate)r*   Zstart_statesr,   Zjoint_statechangesr   r   r   r.   <  s     



z1ConnectionState._fire_state_triggered_transitionsc                 C   sH   | j ttttikr"td| j  | js,t| jr6ttttti| _ d S )Nz%not in a reusable state. self.states=)	r(   r   r   r   r   r%   r6   r'   r   r)   r   r   r   start_next_cycled  s    


z ConnectionState.start_next_cycle)N)r   r   r   r+   r   r   r/   r0   r3   r<   r   r:   r   r   r8   r.   rD   r   r   r   r   r#      s"    
(r#   N)'typingr   r   r   r   r   r   r   Z_eventsZ_utilr   r   __all__r   r   r   r   r   r   r   r   r   r   r   r   r    r<   ZEventTransitionTyper9   ZConnectionClosedDataZEndOfMessager7   ZInformationalResponser!   __annotations__ZStateTransitionTyper"   r#   r   r   r   r   <module>q   s    $*	 
 
      
        
     !&	       