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rt| dd }t| n:| jjtj@ dkr| d\}	}
t|
}t| n!| d\}	}
| jjtj@ dkrt|
}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 )Nz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rt
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"   