U
    Ê¼µb¸.  ã                   @   s^  d dl T d dlmZmZ g Zd ¡ ZeD ]Zeeƒeƒ e< q(edd„ eD ƒ7 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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G dd„ deƒZdS )	é   )Ú*)ÚLocalProtocolErrorÚmake_sentinelz�CLIENT SERVER IDLE SEND_RESPONSE SEND_BODY DONE MUST_CLOSE CLOSED MIGHT_SWITCH_PROTOCOL SWITCHED_PROTOCOL ERROR _SWITCH_UPGRADE _SWITCH_CONNECTc                 C   s   g | ]}|  d ¡s|‘qS )Ú_)Ú
startswith)Ú.0Ús© r	   ú./tmp/pip-unpacked-wheel-rko__zic/h11/_state.pyÚ
<listcomp>‚   s     
 r   c                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Z	dd„ Z
d	S )ÚConnectionStatec                 C   s    d| _ tƒ | _tttti| _d S )NT)Ú
keep_aliveÚsetÚpending_switch_proposalsÚCLIENTÚIDLEÚSERVERÚstates©Úselfr	   r	   r
   Ú__init__Ë   s    zConnectionState.__init__c                 C   s   t | j|< |  ¡  d S ©N)ÚERRORr   Ú!_fire_state_triggered_transitions)r   Úroler	   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_disabledc                 C   s   | j  |¡ |  ¡  d S r   )r   Úaddr   )r   Zswitch_eventr	   r	   r
   Úprocess_client_switch_proposalà   s    z.ConnectionState.process_client_switch_proposalNc                 C   sˆ   |d k	r4|t kst‚|| jkr,td |¡ƒ‚||f}|d krL|tkrLtƒ | _|  ||¡ |tkr||t	kslt‚|  t tt	f¡ |  
¡  d S )Nz3Received server {} event without a pending proposal)r   ÚAssertionErrorr   r   ÚformatÚResponser   Ú!_fire_event_triggered_transitionsÚRequestr   r   )r   r   Ú
event_typeZserver_switch_eventr	   r	   r
   Úprocess_eventä   s     
ÿÿzConnectionState.process_eventc              
   C   s\   | j | }zt| | | }W n. tk
rL   td |j|| j | ¡ƒ‚Y nX || j |< d S )Nz4can't handle event type {} when role={} and state={})r   ÚEVENT_TRIGGERED_TRANSITIONSÚKeyErrorr   r    Ú__name__)r   r   r$   ÚstateZ	new_stater	   r	   r
   r"   ö   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   ÚDONEÚMIGHT_SWITCH_PROTOCOLr   r   Ú
MUST_CLOSEÚSTATE_TRIGGERED_TRANSITIONSÚgetÚupdate)r   Zstart_statesr   Zjoint_stateÚchangesr	   r	   r
   r      s     



z1ConnectionState._fire_state_triggered_transitionsc                 C   s@   | j ttttikrtdƒ‚| js$t‚| jr.t‚tttti| _ d S )Nznot in a reusable state)	r   r   r+   r   r   r   r   r   r   r   r	   r	   r
   Ústart_next_cycle(  s
    

z ConnectionState.start_next_cycle)N)r(   Ú
__module__Ú__qualname__r   r   r   r   r%   r"   r   r2   r	   r	   r	   r
   r   Ê   s   

(r   N) Z_eventsZ_utilr   r   Ú__all__ÚsplitZ	sentinelsÚtokenÚglobalsr   r   r#   Z	SEND_BODYZConnectionClosedZCLOSEDÚDataZEndOfMessager+   r-   r,   ZSWITCHED_PROTOCOLr   r   r!   ZSEND_RESPONSEZInformationalResponseZ_SWITCH_UPGRADEZ_SWITCH_CONNECTr&   r.   Úobjectr   r	   r	   r	   r
   Ú<module>r   sÂ     þ  þ ÿ ÿ ÿ   ì   ü    ü  þ ÿ ÿ ÿ  åè<       ö