
    im                         d dl Z d dlmZ d dlmZ d dlmZmZ dZdZ	dZ
dZ e j        d	          Z G d
 de          Zd Zd Z G d de          Z G d de          Z G d de          ZdS )    N)DriverException)
int32_pack)write_uint_leread_uint_lei`P iO      s   -Uc                       e Zd ZdZdS )CrcExceptionz
    CRC mismatch error.

    TODO: here to avoid import cycles with cassandra.connection. In the next
          major, the exceptions should be declared in a separated exceptions.py
          file.
    N)__name__
__module____qualname____doc__     c/Users/user/workspace/sujinbaek/cqa-test-app/venv/lib/python3.11/site-packages/cassandra/segment.pyr
   r
      s          	Dr   r
   c                     t           }t          |          D ]<}|| dz  dz  z  }| dz  } t          d          D ]}|dz  }|dz  dk    r
|t          z  }=|S )N            i   r   )
CRC24_INITrange
CRC24_POLY)datalengthcrc_is        r   compute_crc24r   )   s|    
C6]] " "t""
q 	" 	"AAICY!##z!	"
 Jr   c                 0    t          j        | |          }|S N)zlibcrc32)r   valuer#   s      r   compute_crc32r%   8   s    JtU##ELr   c                   6    e Zd ZdZdZdZd Zed             ZdS )SegmentHeaderNc                 0    || _         || _        || _        d S r!   )payload_lengthuncompressed_payload_lengthis_self_contained)selfr)   r*   r+   s       r   __init__zSegmentHeader.__init__C   s     ,+F(!2r   c                 |    | j         dk     rt          j        nt          j        }|t          z   | j        z   t          z   S )zL
        Return the total length of the segment, including the CRC.
        r   )r*   SegmentCodecUNCOMPRESSED_HEADER_LENGTHCOMPRESSED_HEADER_LENGTHCRC24_LENGTHr)   CRC32_LENGTH)r,   hls     r   segment_lengthzSegmentHeader.segment_lengthH   s>    
 9=8X[\8\8\\446 	L 4#66EEr   )	r   r   r   r)   r*   r+   r-   propertyr5   r   r   r   r'   r'   =   sT        N"&3 3 3
 F F XF F Fr   r'   c                        e Zd ZdZdZdZd ZdS )Segmenti Nc                 "    || _         || _        d S r!   )payloadr+   )r,   r:   r+   s      r   r-   zSegment.__init__Y   s    !2r   )r   r   r   MAX_PAYLOAD_LENGTHr:   r+   r-   r   r   r   r8   r8   R   s4        'G3 3 3 3 3r   r8   c                       e Zd ZdZdZdZdZdZddZe	d             Z
e	d             Ze	d             Zd	 Zd
 Zd Zd Zd Zd Zd ZdS )r/      r      Nc                 "    || _         || _        d S r!   
compressordecompressor)r,   rA   rB   s      r   r-   zSegmentCodec.__init__g   s    $(r   c                 ,    | j         r| j        n| j        S r!   )compressionr1   r0   r,   s    r   header_lengthzSegmentCodec.header_lengthk   s     040@ 1t,,0	1r   c                 <    | j         r| j        n| j        t          z   S r!   )rD   r1   r0   r2   rE   s    r   header_length_with_crcz#SegmentCodec.header_length_with_crcp   s)    151A 5--4E 	Er   c                     | j         o| j        S r!   r@   rE   s    r   rD   zSegmentCodec.compressionu   s    44#44r   c                 <    |                      |          dd          S )Nr   )rA   )r,   r   s     r   compresszSegmentCodec.compressy   s     t$$QRR((r   c                 L    |                      t          |          |z             S r!   )rB   r   )r,   encoded_datauncompressed_lengths      r   
decompresszSegmentCodec.decompress~   s$      ,?!@!@<!OPPPr   c                    |t           j        k    rt          d          |}| j        }| j        r|||z  z  }|dz  }|r|d|z  z  }t          ||| j                   t          || j                  }t          ||t                     d S )Nz0Payload length exceed Segment.MAX_PAYLOAD_LENGTHr>   r   )size)	r8   r;   r   FLAG_OFFSETrD   r   rF   r   r2   )r,   bufferr)   rN   r+   header_dataflag_offset
header_crcs           r   encode_headerzSegmentCodec.encode_header   s    G666!"TUUU$& 	.+==K2K 	,1++Kfk0BCCCC";0BCC
fj|<<<<<<r   c                 \   |}t          |          }| j        r0|                     |          }t          |          |k    r|}d}n|}n|}t          |          }|                     ||||           t	          |t
                    }	|                    |           t          ||	           dS )z7
        Encode a message to a single segment.
        r   N)lenrD   rK   rW   r%   CRC32_INITIALwriter   )
r,   rS   r:   r+   uncompressed_payloadr*   compressed_payloadencoded_payloadr)   payload_crcs
             r   _encode_segmentzSegmentCodec._encode_segment   s      '&)'ll# 	3!%/C!D!D%&&*EEE"6./++"42O_--6>3NPabbb#O]CC_%%%fk*****r   c                 >   t          |          }|t          j        k    rKg }t          d|t          j                  D ],}|                    |||t          j        z                       -n|g}t          |          dk    }|D ]}|                     |||           dS )z;
        Encode a message to one of more segments.
        r   r   N)rY   r8   r;   r   appendr`   )r,   rS   msg
msg_lengthpayloadsr   r+   r:   s           r   encodezSegmentCodec.encode   s     XX
222H1j'*DEE G GAa'*D&D$D EFFFFG uHMMQ. 	E 	EG  2CDDDD	E 	Er   c                 l   t          || j                  }t          |t                    }t          || j                  }||k    r$t	          d                    |||                    |t          j        z  }|dz  }| j        r|t          j        z  }|dz  }nd}|dz  dk    }t          |||          S )Nz;CRC mismatch on header {:x}. Received {:x}", computed {:x}.r>   r   )
r   rF   r2   r   r
   formatr8   r;   rD   r'   )r,   rS   rT   expected_header_crcactual_header_crcr)   r*   r+   s           r   decode_headerzSegmentCodec.decode_header   s    "64+=>>*6<@@)+t7IJJ 333\cc02C E  E F F F %w'AA 	-*58R*R'BKK*,'(1_2^-HJ[\\\r   c                 X   |                     |j                  }t          |          }t          |t                    }||k    r#t          d                    ||                    |}| j        r&|j        dk    r| 	                    ||j                  }t          ||j                  S )Nz7CRC mismatch on payload. Received {:x}", computed {:x}.r   )readr)   r   r%   rZ   r
   ri   rD   r*   rO   r8   r+   )r,   rS   headerr^   expected_payload_crcactual_payload_crcr:   s          r   decodezSegmentCodec.decode   s     ++f&;<<+F33*?MJJ!555X__$&8 :  : ; ; ; " 	[ BQ F Fooov7YZZGw 8999r   )NN)r   r   r   r1   r0   rR   rA   rB   r-   r6   rF   rH   rD   rK   rO   rW   r`   rf   rl   rr   r   r   r   r/   r/   ^   s	        !"KJL) ) ) ) 1 1 X1 E E XE 5 5 X5) ) )
Q Q Q= = =$+ + +.E E E"] ] ],: : : : :r   r/   )r"   	cassandrar   cassandra.marshalr   cassandra.protocolr   r   r   r   r2   r3   r#   rZ   	Exceptionr
   r   r%   objectr'   r8   r/   r   r   r   <module>rx      sT  "  % % % % % % ( ( ( ( ( ( : : : : : : : :


.//	 	 	 	 	9 	 	 	    
F F F F FF F F F*	3 	3 	3 	3 	3f 	3 	3 	3@: @: @: @: @:6 @: @: @: @: @:r   