ó
    &ÝNj>  ã                   óh   • S r SSKrSSKrSSKrS r " S S5      r " S S5      r " S S	5      rS
 rg)a  
Abstraction of a one-way pipe where the read end can be used in
`select.select`. Normally this is trivial, but Windows makes it nearly
impossible.

The pipe acts like an Event, which can be set or cleared. When set, the pipe
will trigger as readable in `select <select.select>`.
é    Nc                  ó`   • [         R                  S S S:w  a  [        5       n U $ [        5       n U $ )Né   Úwin)ÚsysÚplatformÚ	PosixPipeÚWindowsPipe)Úps    ÚJ/home/mande/repo/quber/.venv/lib/python3.13/site-packages/paramiko/pipe.pyÚ	make_piper   !   s1   € Ü
‡|�|�B�QÐ˜5Ó Ü‹Kˆð €Hô ‹MˆØ€Hó    c                   ó8   • \ rS rSrS rS rS rS rS rS r	Sr
g	)
r   é)   c                 ór   • [         R                  " 5       u  U l        U l        SU l        SU l        SU l        g ©NF)ÚosÚpipeÚ_rfdÚ_wfdÚ_setÚ_foreverÚ_closed©Úselfs    r   Ú__init__ÚPosixPipe.__init__*   s+   € Ü!Ÿwšw›yÑˆŒ	�4”9ØˆŒ	ØˆŒØˆ�r   c                 ó’   • [         R                  " U R                  5        [         R                  " U R                  5        SU l        g ©NT)r   Úcloser   r   r   r   s    r   r   ÚPosixPipe.close0   s)   € Ü
�Š�—‘ÔÜ
�Š�—‘Ôàˆ�r   c                 ó   • U R                   $ ©N)r   r   s    r   ÚfilenoÚPosixPipe.fileno6   s   € Ø�y‰yÐr   c                 óš   • U R                   (       a  U R                  (       a  g [        R                  " U R                  S5        SU l         g ©Né   F)r   r   r   Úreadr   r   s    r   ÚclearÚPosixPipe.clear9   s+   € Ø�y�y˜DŸMŸMØÜ
�Š�—	‘	˜1ÔØˆ�	r   c                 óš   • U R                   (       d  U R                  (       a  g SU l         [        R                  " U R                  S5        g ©NTó   *)r   r   r   Úwriter   r   s    r   ÚsetÚPosixPipe.set?   s+   € Ø�9�9˜ŸŸØØˆŒ	Ü
�Š�—‘˜DÕ!r   c                 ó2   • SU l         U R                  5         g r   ©r   r/   r   s    r   Úset_foreverÚPosixPipe.set_foreverE   ó   € ØˆŒØ�‰�
r   )r   r   r   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   r#   r)   r/   r3   Ú__static_attributes__© r   r   r   r   )   s    † òòòòò"õr   r   c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)r	   éJ   z{
On Windows, only an OS-level "WinSock" may be used in select(), but reads
and writes must be to the actual socket object.
c                 óô  • [         R                   " [         R                  [         R                  5      nUR                  S5        UR	                  S5        [         R                   " [         R                  [         R                  5      U l        U R
                  R                  SUR                  5       S   45        UR                  5       u  U l	        nUR                  5         SU l        SU l        SU l        g )N)ú	127.0.0.1r   r'   r?   F)ÚsocketÚAF_INETÚSOCK_STREAMÚbindÚlistenÚ_rsockÚconnectÚgetsocknameÚacceptÚ_wsockr   r   r   r   )r   ÚservÚaddrs      r   r   ÚWindowsPipe.__init__P   s§   € Ü�}Š}œVŸ^™^¬V×-?Ñ-?Ó@ˆØ�	‰	Ð"Ô#Ø�‰�AŒô —m’m¤F§N¡N´F×4FÑ4FÓGˆŒØ�‰×Ñ˜[¨$×*:Ñ*:Ó*<¸QÑ*?Ð@ÔAà ŸK™K›MÑˆŒ�TØ�
‰
ŒØˆŒ	ØˆŒØˆ�r   c                 óz   • U R                   R                  5         U R                  R                  5         SU l        g r   )rE   r   rI   r   r   s    r   r   ÚWindowsPipe.close_   s)   € Ø�‰×ÑÔØ�‰×ÑÔàˆ�r   c                 ó6   • U R                   R                  5       $ r"   )rE   r#   r   s    r   r#   ÚWindowsPipe.filenoe   s   € Ø�{‰{×!Ñ!Ó#Ð#r   c                 óŽ   • U R                   (       a  U R                  (       a  g U R                  R                  S5        SU l         g r&   )r   r   rE   Úrecvr   s    r   r)   ÚWindowsPipe.clearh   s+   € Ø�y�y˜DŸMŸMØØ�‰×Ñ˜ÔØˆ�	r   c                 óŽ   • U R                   (       d  U R                  (       a  g SU l         U R                  R                  S5        g r,   )r   r   rI   Úsendr   s    r   r/   ÚWindowsPipe.setn   s+   € Ø�9�9˜ŸŸØØˆŒ	Ø�‰×Ñ˜Õr   c                 ó2   • SU l         U R                  5         g r   r2   r   s    r   r3   ÚWindowsPipe.set_forevert   r5   r   )r   r   rE   r   rI   N)r6   r7   r8   r9   Ú__doc__r   r   r#   r)   r/   r3   r:   r;   r   r   r	   r	   J   s%   † ñò
òò$òòõr   r	   c                   ó&   • \ rS rSrS rS rS rSrg)ÚOrPipeéy   c                 ó,   • SU l         S U l        Xl        g r   )r   Ú_partnerÚ_pipe)r   r   s     r   r   ÚOrPipe.__init__z   s   € ØˆŒ	ØˆŒØ�
r   c                 ó~   • SU l         U R                  R                   (       d  U R                  R                  5         g g r   )r   r^   r_   r/   r   s    r   r/   Ú
OrPipe.set   s)   € ØˆŒ	Ø�}‰}×!×!Ø�J‰J�N‰NÕð "r   c                 ó~   • SU l         U R                  R                   (       d  U R                  R                  5         g g r   )r   r^   r_   r)   r   s    r   r)   ÚOrPipe.clear„   s+   € ØˆŒ	Ø�}‰}×!×!Ø�J‰J×ÑÕð "r   )r^   r_   r   N)r6   r7   r8   r9   r   r/   r)   r:   r;   r   r   r[   r[   y   s   † òò
õ
r   r[   c                 óL   • [        U 5      n[        U 5      nX!l        Xl        X4$ )zÈ
wraps a pipe into two pipe-like objects which are "or"d together to
affect the real pipe. if either returned pipe is set, the wrapped pipe
is set. when both are cleared, the wrapped pipe is cleared.
)r[   r^   )r   Úp1Úp2s      r   Úmake_or_piperh   Š   s'   € ô 
�‹€BÜ	�‹€BØ„KØ„KØˆ6€Mr   )	rY   r   r   r@   r   r   r	   r[   rh   r;   r   r   Ú<module>ri      s?   ðñ&ó Û 	Û ò÷ñ ÷B,ñ ,÷^ñ ó"
r   