U
    Ù×jÚ  ã                   @   sD   d dl Z d dlmZ d dlmZ d dlmZ dZdd„ Zdd	„ Z	dS )
é    N)Úurljoin)Úvalidar_destino)ÚMAX_SEGMENT)i-  i.  i/  i3  i4  c              	   Ã   s2  t jt jddd�ddd�}t| ƒ}zätdƒD ]Î}t|ƒ | d|¡}|j|dd	�I d
H }|jtkr˜|j	 
d¡}| ¡ I d
H  |sˆtdƒ‚tt||ƒƒ}q,z0| ¡  |j	 
d¡}|rÆt|ƒtkrÆtdƒ‚W n$ tk
rì   | ¡ I d
H  ‚ Y nX ||f  W S tdƒ‚W n& tk
�r,   | ¡ I d
H  ‚ Y nX d
S )zW
    Abre y valida el origen antes de devolver
    la respuesta HTTP al navegador.
    g      4@g      @)ZconnectF)ZtimeoutZfollow_redirectsZ	trust_envé   ZGETT)ÚstreamNÚlocationzRedireccion sin destinozcontent-lengthzSegmento demasiado grandezDemasiadas redirecciones)ÚhttpxZAsyncClientZTimeoutr   ÚrangeZbuild_requestÚsendZstatus_codeÚ	REDIRECTSZheadersÚgetÚacloseÚ
ValueErrorr   Zraise_for_statusÚintr   Ú	ExceptionÚBaseException)ZurlÚclienteZactualÚ_Z	solicitudÚ	respuestaZdestinoZlongitud© r   úhermes_hls_stream_v3.pyÚpreparar_segmento
   sH    ýþ
ÿr   c                 C  sh   d}z@| d¡2 z.3 d H W }|t|ƒ7 }|tkr8tdƒ‚|V  q6 W 5 |  ¡ I d H  |   ¡ I d H  X d S )Nr   i   zLimite de segmento excedido)r   Zaiter_bytesÚlenr   r   )r   r   ZtotalZbloquer   r   r   Útransmitir_preparadoB   s    r   )
r   Zurllib.parser   Zhermes_hls_securityr   Zhermes_hls_fetchr   r   r   r   r   r   r   r   Ú<module>   s   8