
    ޝi                     @   d dl Z d dlZd dlZd dlmZ d dlmZmZ ddlmZm	Z	 ddl
mZ ee j                  iZer;d dlZ eed      rdeej"                  <   deej$                  <   ndeej&                  <    eej+                               ZdZ e       Zd	Z G d
 d      Zy)    N)SEEK_END)OptionalUnion   )ConnectionErrorTimeoutError)SSL_AVAILABLESSLWantReadErrorzConnection closed by server.s   
c            	           e Zd Zdej                  dedefdZdefdZdedfd	e	e   d
e
eef   de	e   defdZd
edefdZd	edefdZdefdZdefdZdeddfdZddZddZy)SocketBuffersocketsocket_read_sizesocket_timeoutc                 `    || _         || _        || _        t        j                         | _        y N)_sockr   r   ioBytesIO_buffer)selfr   r   r   s       S/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/redis/_parsers/socket.py__init__zSocketBuffer.__init__   s(     
 0,zz|    returnc                     | j                   j                         }| j                   j                  dt              }| j                   j                  |       ||z
  S )z3
        Remaining unread length of buffer
        r   )r   tellseekr   )r   posends      r   unread_byteszSocketBuffer.unread_bytes&   sH     ll!ll8,#Syr   NTlengthtimeoutraise_on_timeoutc                 <   | j                   }| j                  }d}|t        u}| j                  }|j	                         }	|j                  dt               |r|j                  |       	 	 | j                   j                  |      }
t        |
t              rt        |
      dk(  rt        t              |j                  |
       t        |
      }||z  }|||kD  rr	 |j                  |	       |r|j                  | j                         yy# t         j"                  $ r? |rt%        d      Y |j                  |	       |r|j                  | j                         yyt&        $ r}t(        j+                  |j,                  d      }|sC|j.                  |k(  r4Y d }~|j                  |	       |r|j                  | j                         yyt        d|j0                         d }~ww xY w# |j                  |	       |r|j                  | j                         w w xY w)Nr   TzTimeout reading from socketFz!Error while reading from socket: )r   r   SENTINELr   r   r   r   
settimeoutrecv
isinstancebyteslenr   SERVER_CLOSED_CONNECTION_ERRORwriter   r   r"   r   NONBLOCKING_EXCEPTIONS#NONBLOCKING_EXCEPTION_ERROR_NUMBERSget	__class__errnoargs)r   r!   r"   r#   sockr   markercustom_timeoutbufcurrent_posdatadata_lengthexalloweds                 r   _read_from_socketzSocketBuffer._read_from_socket/   s    zz00 0llhhjHOOG$	5zz'78dE*s4yA~)*HII		$!$i+%%&6/ HH[! 3 34  ~~ 	"#@AA HH[! 3 34  & 	Q
 :==bllBOG#G(; HH[! 3 34  "$EbggY"OPP	Q HH[! 3 34 s=   )A2D  G',G* G'%1G"G* 
G""G''G* *1Hc                 ^    t        | j                               xs | j                  |d      S )NF)r"   r#   )boolr    r=   )r   r"   s     r   can_readzSocketBuffer.can_read^   s5    D%%'( 
D,B,Be -C -
 	
r   c                     |dz   }| j                   j                  |      }|t        |      z
  }|r/| j                  |       || j                   j                  |      z  }|d d S )Nr   )r   readr+   r=   )r   r!   r9   missings       r   rC   zSocketBuffer.readc   sc    !||  (3t9$""7+DLL%%g..DCRyr   c                     | j                   }|j                         }|j                  t              s9| j	                          ||j                         z  }|j                  t              s9|d d S )NrB   )r   readlineendswithSYM_CRLFr=   )r   r7   r9   s      r   rF   zSocketBuffer.readlinen   sZ    ll||~--)""$CLLN"D --)
 CRyr   c                 6    | j                   j                         S )z+
        Get current read position
        )r   r   r   s    r   get_poszSocketBuffer.get_posx   s     ||  ""r   r   c                 :    | j                   j                  |       y)zO
        Rewind the buffer to a specific position, to re-start reading
        N)r   r   )r   r   s     r   rewindzSocketBuffer.rewind~   s     	#r   c                     | j                         }|dkD  ry|dkD  r#| j                  j                         }|| d |d| | j                  j                  |       | j                  j	                  d       y)zH
        After a successful read, purge the read part of buffer
        r   N)r    r   	getbuffertruncater   )r   unreadviews      r   purgezSocketBuffer.purge   sn     ""$
 A:A:<<))+D &ND&Mf%!r   c                 t    	 | j                   j                          d | _         d | _        y # t        $ r Y w xY wr   )r   close	Exceptionr   rJ   s    r   rU   zSocketBuffer.close   s=    	LL  
  	 	s   + 	77)r   N)__name__
__module____qualname__r   intfloatr   r    r&   r   r   objectr?   r=   r@   r*   rC   rF   rK   rM   rS   rU    r   r   r   r      s    $mm$7:$LQ$c  !%(0+/	-5-5 uf}%-5 #4.	-5
 
-5^
 
$ 

	3 	5 	% # ## $ &r   r   )r2   r   r   r   typingr   r   
exceptionsr   r   utilsr	   BlockingIOErrorEWOULDBLOCKr/   sslhasattrr
   SSLWantWriteErrorSSLErrortuplekeysr.   r,   r\   r&   rH   r   r]   r   r   <module>ri      s     	   " 6 !'68I8I&J #s&'DE+C,@,@AEF+C,A,AB<=+CLL9BGGIJ !? 8E Er   