a XC?hCk � @ s� d dl Z d dlZzd dlZW n ey2 dZY n0 ddlmZ ddlmZ ddlmZ ddlm Z dd� Z d Zd ZdZ dZG d d� de�ZG dd� dejej�ZG dd� dej�ZdS )� N� )� constants)� protocols)� transports)�loggerc C s" | rt d��t�� }|sd|_|S )Nz(Server side SSL needs a valid SSLContextF)� ValueError�sslZcreate_default_contextZcheck_hostname)�server_side�server_hostname� sslcontext� r �5/opt/alt/python39/lib64/python3.9/asyncio/sslproto.py�_create_transport_context s r Z UNWRAPPEDZDO_HANDSHAKEZWRAPPEDZSHUTDOWNc @ sz e Zd ZdZddd�Zedd� �Zedd� �Zed d � �Zedd� �Z dd d�Z ddd�Zdd� Zddd�Z ddd�ZdS )�_SSLPipei Nc C sH || _ || _|| _t| _t�� | _t�� | _d | _ d| _ d | _d | _d S �NF) �_context�_server_side�_server_hostname� _UNWRAPPED�_stater Z MemoryBIO� _incoming� _outgoing�_sslobj� _need_ssldata� _handshake_cb�_shutdown_cb)�self�contextr r r r r �__init__7 s z_SSLPipe.__init__c C s | j S �N)r �r r r r r M s z_SSLPipe.contextc C s | j S r )r r r r r � ssl_objectR s z_SSLPipe.ssl_objectc C s | j S r )r r r r r �need_ssldataZ s z_SSLPipe.need_ssldatac C s | j tkS r )r �_WRAPPEDr r r r �wrapped` s z_SSLPipe.wrappedc C sR | j tkrtd��| jj| j| j| j| jd�| _ t | _ || _| jddd�\}}|S )Nz"handshake in progress or completed)r r � T)�only_handshake) r r �RuntimeErrorr Zwrap_bior r r r r � _DO_HANDSHAKEr �feed_ssldata�r �callback�ssldata�appdatar r r �do_handshakei s �z_SSLPipe.do_handshakec C sB | j tkrtd��| j tkr$td��t| _ || _| �d�\}}|S )Nzno security layer presentzshutdown in progressr% )r r r' � _SHUTDOWNr r) r* r r r �shutdown~ s z_SSLPipe.shutdownc C s | j �� | �d�\}}d S )Nr% )r Z write_eofr) )r r, r- r r r �feed_eof� s z_SSLPipe.feed_eofFc C s� | j tkr"|r|g}ng }g |fS d| _|r8| j�|� g }g }z�| j tkrz| j�� t| _ | j rl| � d � |rz||fW S | j tkr�| j� | j�}|�|� |s�q�q�nJ| j t kr�| j�� d | _t| _ | jr�| �� n| j tkr�|�| j� � � W n| tjtjf�yn } zZt|dd �}|tjtjtjfv�rN| j tk�rL| j �rL| � |� � |tjk| _W Y d }~n d }~0 0 | jj�r�|�| j� � � ||fS )NF�errno)r r r r �writer( r r. r# r �read�max_size�appendr/ Zunwrapr r �SSLError�CertificateError�getattr�SSL_ERROR_WANT_READ�SSL_ERROR_WANT_WRITE�SSL_ERROR_SYSCALLr �pending)r �datar&