o
    Žõ±j	  ã                   @   sÚ   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlZd dlmZ G dd„ dejƒZG dd„ dejƒZG dd„ dƒZdS )é    )Ú
readheader)ÚESENT_ROOT_HEADER)ÚESENT_BRANCH_HEADER)ÚESENT_SPACE_TREE_HEADER)ÚESENT_SPACE_TREE_ENTRY)ÚESENT_INDEX_ENTRY)ÚESENT_DATA_DEFINITION_HEADER)ÚESENT_LEAF_ENTRY)ÚESENT_BRANCH_ENTRY)Ú#ESENT_CATALOG_DATA_DEFINITION_ENTRY)ÚESENT_LEAF_HEADER)ÚhexdumpN)Úunpackc                   @   s   e Zd ZdZdZdZdS )ÚWELLKNOWNPAGENOé   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚDATABASEÚCATALOGÚCATALOG_BACKUP© r   r   ú‰/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aesedb/structures/page.pyr      s    r   c                   @   s0   e Zd ZdZdZdZdZdZdZdZ	dZ
dZd	S )
Ú	PAGEFLAGSr   é   r   é   é    é@   é€   é    N)r   r   r   ÚROOTÚLEAFÚPARENTÚEMPTYÚ
SPACE_TREEÚINDEXÚ
LONG_VALUEÚ
NEW_FORMATÚNEW_CHECKSUMr   r   r   r   r      s    r   c                   @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú
ESENT_PAGEc                 C   s   || _ d | _d | _i | _d S ©N)ÚdbÚdataÚrecordÚtags)Úselfr-   r   r   r   Ú__init__&   s   
zESENT_PAGE.__init__c              
   Ã   sp   �z || _ t| jj| jj| jj| j ƒI d H \| _}|d ur|‚W dS  ty7 } z
d |fW  Y d }~S d }~ww )N)TN)r.   r   r-   ÚVersionÚFileFormatRevisionÚPageSizer/   Ú	Exception)r1   r.   ÚerrÚer   r   r   Úread,   s   €(€ÿzESENT_PAGE.readc                 C   s   t | jjƒ d S r,   )Úprintr/   Ú	PageFlags)r1   r   r   r   Ú
printFlags6   s   zESENT_PAGE.printFlagsc                 C   s  t | jƒ}t| jƒ | jd| jj d … }tdƒ |  ¡  tƒ  t| jjƒD ]Œ}|dd … }| jjdkry| jj	dkry| jj
dkrytd|d d… ƒd d	@ }td|dd … ƒd d	@ }t| j|| d … d d
… ƒ t| j|| d … d ƒd? }n)td|d d… ƒd d@ }td|dd … ƒd d@ d? }td|dd … ƒd d@ }td||||f ƒ |d d… }q&| jjtj@ dkrÊt|  d¡d ƒ}t|ƒ n:| jjtj@ dkrã|  d¡\}	}
t|
ƒ}t|ƒ n!|  d¡\}	}
| jjtj@ dkrüt|
ƒ}t|ƒ nt|
ƒ}t|ƒ td| jjƒD ]{}|  |¡\}	}
| jjtj@ dk�r)t|	|
ƒ}t|ƒ �q| jjtj@ dk�r…| jjtj@ dk�rCt|
ƒ}�q| jjtj@ dk�rSt|
ƒ}�q| jjtj@ dk�ratdƒ‚t|	|
ƒ}t  |j!¡}t|ƒ t"  |j!t |ƒd … ¡}t|ƒ t|j!ƒ �qd S )NéüÿÿÿzFLAGS: é   é   r!   ú<Hr   r   éÿ  é   r   é   éÿ  é à  é   z2TAG %-8d offset:0x%-6x flags:0x%-4x valueSize:0x%xzLong value still not supported)#Úlenr/   r:   r.   ÚFirstAvailablePageTagr<   Úranger-   r3   r4   r5   r   r   Úordr;   r   r"   r   ÚgetTagr#   r   r&   r   r   r
   r   r'   r   r(   r6   r	   r   Ú
from_bytesÚ	EntryDatar   )r1   Ú
baseOffsetr0   ÚiÚtagÚ	valueSizeÚvalueOffsetÚ	pageFlagsÚ
rootHeaderÚflagsr.   ÚbranchHeaderÚspaceTreeHeaderÚ
leafHeaderÚtagNumÚbranchEntryÚspaceTreeEntryÚ
indexEntryÚ	leafEntryÚdataDefinitionHeaderÚcatalogEntryr   r   r   Údump9   sf   

$ 





€åzESENT_PAGE.dumpc           
      C   s’  | j j|k rtd| ƒ‚|| jv r| j| S | jd| j j d … }| j j}|d| d d| … }| jjdkrˆ| jjdkrˆ| jj	dkrˆt
d|d d… ƒd	 d
@ }t
d|dd … ƒd	 d
@ }t| j|| d … d |… ƒ}t|d ƒd? }tt|dd… ƒd@ ƒ|d< d |¡}	n6t
d|d d… ƒd	 d@ }t
d|dd … ƒd	 d@ d? }t
d|dd … ƒd	 d@ }| j|| d … d |… }	||	f| j|< ||	fS )Nz"Trying to grab an unknown tag 0x%xr=   r   r>   é   r!   r@   r   r   rA   r   rC   é   Ú rD   rE   rF   )r/   rH   r6   r0   r.   Ú_lenr-   r3   r4   r5   r   ÚlistrJ   ÚchrÚjoin)
r1   Útagnor0   rN   rP   rQ   rR   ÚtmpDatarS   ÚtagDatar   r   r   Úget_tag†   s(   

$zESENT_PAGE.get_tagN)r   r   r   r2   r9   r<   r`   rk   r   r   r   r   r+   %   s    
Mr+   ) Úaesedb.structures.pageheaderr   Úaesedb.structures.rootheaderr   Úaesedb.structures.branchheaderr   Ú!aesedb.structures.spacetreeheaderr   Ú aesedb.structures.spacetreeentryr   Úaesedb.structures.indexentryr   Ú&aesedb.structures.datadefinitionheaderr   Úaesedb.structures.leafentryr	   Úaesedb.structures.branchentryr
   Ú%aesedb.structures.catalogdatadefentryr   Úaesedb.structures.leafheaderr   Úaesedb.utils.hexdumpr   ÚenumÚstructr   ÚEnumr   ÚIntEnumr   r+   r   r   r   r   Ú<module>   s"   