U
    nËj¯3  ã                   @   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   ú./tmp/pip-unpacked-wheel-fpxc_c9c/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   ÚstateZ	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.   rC   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Ö    $õ*ÿÿÿÿ	 
 
      ø
   ü    ü 
     îõ!&ÿ	       ö