o
    j@                     @   sh  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 G dd dZG dd	 d	ZG d
d dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG dd dZG d d! d!ZG d"d# d#ZG d$d% d%ZG d&d' d'ZG d(d) d)ZG d*d+ d+ZG d,d- d-ZG d.d/ d/ZG d0d1 d1Z G d2d3 d3Z!G d4d5 d5Z"G d6d7 d7Z#G d8d9 d9Z$dXd;d<Z%d=d> Z&dYd@dAZ'dBdC Z(i dDe$dEedFedGe!dHe"dIe#dJedKedLedMedNedOedPedQedRedSedTeeeeeedUZ)G dVdW dWej*Z+dS )Z    N)parseString)GUID)SID)FILETIMEc                   @   s4   e Zd Zdd Zdd Zedd Zedd Zd	S )
Fragmentc                 C   s   g | _ g | _d S N)FragmentHeadersvaluesself r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/aiosmb/dcerpc/v5/common/even6/binxml.py__init__      
zFragment.__init__c                 C   s    d}| j D ]}|| 7 }q|S )N )r	   to_xml)r   tvr   r   r   r      s   
zFragment.to_xmlc                 C   s   t t| S r   )r   from_bufferioBytesIO)datar   r   r   
from_bytes   s   zFragment.from_bytesc                 C   sN   t  }	 t| ttf}t|tr	 |S |j| t| ttf}|j	| qr   )
r   
parse_nextFragmentHeaderEOF
isinstancer   appendElementTemplateInstancer	   )bufftir   r   r   r   r      s   
zFragment.from_bufferN)__name__
__module____qualname__r   r   staticmethodr   r   r   r   r   r   r      s    
r   c                   @       e Zd Zdd Zedd ZdS )r   c                 C   s   d | _ d | _d | _d | _d S r   )FragmentHeaderTokenmajorminorflagsr
   r   r   r   r   )   s   
zFragmentHeader.__init__c                 C   sp   t  }| d|_tj| dddd|_tj| dddd|_tj| dddd|_|jdkr6td|S )N   littleF	byteordersignedzFragmentHeader err)	r   readr'   intr   r(   r)   r*   	Exception)r    resr   r   r   r   /   s   
zFragmentHeader.from_bufferNr"   r#   r$   r   r%   r   r   r   r   r   r   (   s    r   c                   @   s(   e Zd Zdd Zdd Zedd ZdS )r   c                 C      d | _ d | _d | _d S r   )TemplateInstanceTokenTemplateDefTemplateInstanceDatar
   r   r   r   r   <      
zTemplateInstance.__init__c                 C   s  g }g }d}|t | jjk r| jj| }t|tr[||jj t| jj|d  tr:||	| j
 |d7 }qt| jj|d  trZ|d ||j	| j
dd |d7 }qnt|tr|jdkrt| j
j|j t}| j
jj|j jtjks}|r|d |d d}	 t| jj||  tr|d7 }q	 ||7 }|r||	| j
 q||	| j
 nAt|tr||	  n4t|tr|d|d  n$t|trt |dkr|d|d  t |dksntd	|	  |d7 }|t | jjk sd
|S )Nr   r+      T)is_empty   z</%s>zElement not processed! %sz
)lenr7   Elementsr   StartElementr   NamevalueCloseStartElementr   r8   CloseEmptyElementpopSubstitutiontokenValuesSubstitutionIdlist	ValueSpecValueSpecEntries	ValueTypeNullType
EndElement	ValueTextr   r2   join)r   xml_elements	open_tagsiellist_replacementnr   r   r   r   A   s^   









2zTemplateInstance.to_xmlc                 C   s6   t  }| d|_t| |_t| |_|  |S Nr+   )r   r0   r6   r7   r   r8   r   )r    r!   r   r   r   r   {   s   zTemplateInstance.from_bufferNr"   r#   r$   r   r   r%   r   r   r   r   r   r   ;   s
    :r   c                   @   r&   )r7   c                 C   s"   d | _ d | _d | _d | _g | _d S r   )dunno
TemplateIdTemplateDefByteLengthr   r?   r
   r   r   r   r      
   
zTemplateDef.__init__c              
   C   s~   t  }| d|_t| |_tj| dddd|_t	| t
f|_
	 t	| ttttttttf}|j| t|tr>	 |S q#)Nr+      r,   Fr-   )r7   r0   rZ   r   r   r[   r1   r   r\   r   r   r   r@   rC   rD   rF   rO   rP   r   r?   r   r   )r    tdr   r   r   r   r      s   
zTemplateDef.from_bufferNr4   r   r   r   r   r7      s    r7   c                   @   r&   )r8   c                 C      d | _ g | _d S r   )rK   rH   r
   r   r   r   r      r   zTemplateInstanceData.__init__c                 C   sD   t  }t| |_|jjD ]}t| |j|j}|j	| q|S r   )
r8   rK   r   rL   
decode_valr0   ValueByteLengthrM   rH   r   )r    tidvpvalr   r   r   r      s   z TemplateInstanceData.from_bufferNr4   r   r   r   r   r8          r8   c                   @   r&   )rK   c                 C   r`   r   )	NumValuesrL   r
   r   r   r   r      r   zValueSpec.__init__c                 C   sD   t  }tj| dddd|_t|jD ]}|jt	|  q|S Nr^   r,   Fr-   )
rK   r1   r   r0   rg   rangerL   r   ValueSpecEntryr   )r    vs_r   r   r   r      s
   zValueSpec.from_bufferNr4   r   r   r   r   rK      rf   rK   c                   @   r&   )rj   c                 C      d | _ d | _d S r   )rb   rM   r
   r   r   r   r      r   zValueSpecEntry.__init__c                 C   s<   t  }tj| dddd|_t| d|_| d}|S )Nr:   r,   Fr-   r+   )rj   r1   r   r0   rb   rM   )r    rk   zeror   r   r   r      s
   
zValueSpecEntry.from_bufferNr4   r   r   r   r   rj      rf   rj   c                   @   r&   )r   c                 C   r`   r   )r@   Contentsr
   r   r   r   r      r   zElement.__init__c                 C   sh   t  }t| tf|_t| ttf}|j| t|tr|S 	 t| ttf}|j| t|tr3|S qr   )	r   r   r@   rC   rD   ro   r   r   rO   )r    rU   r   r   r   r   r      s   

zElement.from_bufferNr4   r   r   r   r   r      rf   r   c                   @   r&   )CharDatac                 C   s   d S r   r   r
   r   r   r   r      s   zCharData.__init__c                 C   s   t | S r   )r   )r    r   r   r   r      s   zCharData.from_bufferNr4   r   r   r   r   rp          rp   c                   @   s*   e Zd Zdd Zd	ddZedd ZdS )
r@   c                 C   s"   d | _ d | _d | _d | _d | _d S r   )OpenStartElementTokenDependencyIdElementByteLengthrA   AttributeListr
   r   r   r   r      r]   zStartElement.__init__NFc                 C   sJ   | j d u rd| jj S d| jj }|| j |7 }||du r dnd7 }|S )Nz<%s>z<%s F>z />)ru   rA   rB   r   )r   subtabler<   r   r   r   r   r      s   
zStartElement.to_xmlc                 C   sh   t  }| d|_tj| dddd|_tj| dddd|_t| |_|jdkr2t	| |_	|S )Nr+   r:   r,   Fr-   r^      A)
r@   r0   rr   r1   r   rs   rt   rA   r   ru   )r    ser   r   r   r     s   
zStartElement.from_buffer)NFrY   r   r   r   r   r@      s
    
	r@   c                   @   r&   )	Attributec                 C   r5   r   )AttributeTokenrA   AttributeCharDatar
   r   r   r   r     r9   zAttribute.__init__c                 C   s.   t  }| d|_t| |_t| |_|S rX   )rz   r0   r{   rA   r   r|   r    vtr   r   r   r     s
   zAttribute.from_bufferNr4   r   r   r   r   rz         rz   c                   @   *   e Zd Zdd ZdddZedd ZdS )	r|   c                 C   rm   r   )r{   rB   r
   r   r   r   r     r   zAttributeCharData.__init__Nc                 C   s   | j |S r   )rB   r   r   rw   r   r   r   r     s   zAttributeCharData.to_xmlc                 C   s   t  }t| |_|S r   )r|   r   rB   r}   r   r   r   r   "  s   
zAttributeCharData.from_bufferr   rY   r   r   r   r   r|     s
    
r|   c                   @   r   )	ru   c                 C   r`   r   )AttributeListByteLength
Attributesr
   r   r   r   r   )  r   zAttributeList.__init__Nc                 C   s8   g }| j D ]}|d|jj|j|f  qd|S )Nz%s="%s" )r   r   rA   rB   r|   r   rQ   )r   rw   r   attrr   r   r   r   -  s   
 
zAttributeList.to_xmlc                 C   sZ   t  }tj| dddd|_|  |j }|  |kr+|jt	|  |  |ks|S rh   )
ru   r1   r   r0   r   tellr   r   rz   r   )r    r~   posr   r   r   r   3  s   zAttributeList.from_bufferr   rY   r   r   r   r   ru   (  s
    
ru   c                   @   r   )	rP   c                 C   r5   r   )ValueTextToken
StringTyperB   r
   r   r   r   r   >  r9   zValueText.__init__Nc                 C   s   | j S r   )rB   r   r   r   r   r   C  s   zValueText.to_xmlc                 C   s,   t  }| d|_| d|_t| |_|S rX   )rP   r0   r   r    read_LengthPrefixedUnicodeStringrB   r}   r   r   r   r   F  s
   
zValueText.from_bufferr   rY   r   r   r   r   rP   =  s
    
rP   c                   @   r   )	rF   c                 C   s   d | _ d | _d | _d| _d S )Nsubstitution)rG   rI   rM   rB   r
   r   r   r   r   O  s   
zSubstitution.__init__Nc                 C   st   | j t jkr|j| j  S t|j| j tr2d}|j| j D ]}|dkr)|d7 }|d| 7 }q|S t|j| j S )Nr   z<Data />z<Data>%s</Data>)rM   
BinXmlTyperH   rI   r   r   rJ   str)r   rw   r   xr   r   r   r   V  s   zSubstitution.to_xmlc                 C   s>   t  }| d|_tj| dddd|_t| d|_|S Nr+   r:   r,   Fr-   )rF   r0   rG   r1   r   rI   rM   )r    sr   r   r   r   f  s
   zSubstitution.from_bufferr   rY   r   r   r   r   rF   N  s
    
rF   c                   @   r&   )CharRefc                 C   rm   r   )CharRefTokenrB   r
   r   r   r   r   p  r   zCharRef.__init__c                 C   s.   t  }| d|_tj| dddd|_|S r   )r   r0   r   r1   r   rB   r    err   r   r   r   t  s   zCharRef.from_bufferNr4   r   r   r   r   r   o  rf   r   c                   @   r&   )	EntityRefc                 C   rm   r   )EntityRefTokenrA   r
   r   r   r   r   |  r   zEntityRef.__init__c                 C   "   t  }| d|_t| |_|S rX   )r   r0   r   rA   r   r   r   r   r   r        zEntityRef.from_bufferNr4   r   r   r   r   r   {  rf   r   c                   @   r&   )CDATASectionc                 C   rm   r   )CDATASectionTokenrB   r
   r   r   r   r     r   zCDATASection.__init__c                 C       t  }| d|_t| |_|S rX   )r   r0   r   r   rB   )r    cdr   r   r   r        
zCDATASection.from_bufferNr4   r   r   r   r   r     rf   r   c                   @   r&   )PIc                 C   rm   r   )PITargetPIDatar
   r   r   r   r     r   zPI.__init__c                 C   s"   t  }t| |_t| |_|S r   )r   r   r   rA   r   )r    pir   r   r   r     r   zPI.from_bufferNr4   r   r   r   r   r     rf   r   c                   @   r&   )r   c                 C   rm   r   )PIDataTokenrB   r
   r   r   r   r     r   zPIData.__init__c                 C   r   rX   )r   r0   r   r   rB   )r    pidr   r   r   r     r   zPIData.from_bufferNr4   r   r   r   r   r     rf   r   c                   @   r&   )r   c                 C   rm   r   )PITargetTokenrA   r
   r   r   r   r     r   zPITarget.__init__c                 C   r   rX   )r   r0   r   rA   r   )r    pitr   r   r   r     r   zPITarget.from_bufferNr4   r   r   r   r   r     rf   r   c                   @   r&   )rA   c                 C   r5   r   )NameHashNameNumCharsrB   r
   r   r   r   r     r9   zName.__init__c                 C   sb   t  }tj| dddd|_tj| dddd|_| |jd d }|dd d |_|S )Nr:   r,   Fr-   	utf-16-ler;   )rA   r1   r   r0   r   r   decoderB   )r    rW   Name_valr   r   r   r     s   zName.from_bufferNr4   r   r   r   r   rA     r   rA   c                   @   r&   )rC   c                 C   
   d | _ d S r   rG   r
   r   r   r   r        
zCloseStartElement.__init__c                 C      t  }| d|_|S rX   )rC   r0   rG   r    cr   r   r   r        zCloseStartElement.from_bufferNr4   r   r   r   r   rC     rq   rC   c                   @   r&   )rD   c                 C   r   r   r   r
   r   r   r   r     r   zCloseEmptyElement.__init__c                 C   r   rX   )rD   r0   rG   r   r   r   r   r     r   zCloseEmptyElement.from_bufferNr4   r   r   r   r   rD     rq   rD   c                   @   r&   )rO   c                 C   r   r   r   r
   r   r   r   r     r   zEndElement.__init__c                 C   r   rX   )rO   r0   rG   r   r   r   r   r     r   zEndElement.from_bufferNr4   r   r   r   r   rO     rq   rO   c                   @   r&   )r   c                 C   rm   r   )rG   rB   r
   r   r   r   r     r   zEOF.__init__c                 C   r   rX   )r   r0   rG   r   r   r   r   r     r   zEOF.from_bufferNr4   r   r   r   r   r     rf   r   r+   c                 C   s"   |   }| |}| |d |S )Nr   )r   r0   seek)r    lengthr   r   r   r   r   peek_buffer  s   
r   c                 C   s.   t j| dddd}| |d }|dS )Nr:   r,   Fr-   r   )r1   r   r0   r   )r    NumUnicodeCharsStringValuer   r   r   r     s   
r   r   c                 C   sD   t t|  | }t|dkr|S t||r|S td|t|f )Nr   z*parse_next error! %s expected but %s found)token_node_lookupr   r   r>   r   r2   type)r    expectedr   r   r   r   r     s   
r   c                 C   s  |t jkrdS |t jkr| dS |t jkr|  S |t jkr'tj| dddS |t jkr4tj| dddS |t j	krAtj| dddS |t j
krNtj| dddS |t jkr[tj| dddS |t jkrhtj| dddS |t jkrutj| dddS |t jkrtj| dddS |t jkrtd| S |t jkrtd| S |t jkrttj| dddS |t jkr| S |t jkrt| S |t jkrd	| d d d
   S |t jkrt| j S |t jkrt| j S |t jkrt | S |t j!krd	| d d d
   S |t j"krd	| d d d
   S |t j#krt$| S |t j%kr^g }d}d}|t&| k r\|| ||d  7 }|dd  dksC|dkrQ|'|dd d
  d}|d7 }|t&| k s+|S t(d| )Nr   r   r,   Tr-   Fz<fz<d0xr;   r       r+   s      s     zUnknown format! %s))rM   rN   r   r   AnsiStringTypeInt8Typer1   r   	UInt8Type	Int16Type
UInt16Type	Int32Type
UInt32Type	Int64Type
UInt64Type
Real32Typestructunpack
Real64TypeBoolTypebool
BinaryTypeGuidTyper   	SizeTTypehexFileTimeTyper   datetime	isoformatSysTimeTypeSidTyper   HexInt32TypeHexInt64Typer   r   StringArrayTyper>   r   r2   )r   	data_typesarT   r   r   r   r   ra     sv   
























ra          rx                  E      F      G      H   	   I   
)         r=      c                   @   s   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,S )-rM   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r                        !                                                            N).r"   r#   r$   rN   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   AnsiStringArrayTypeInt8ArrayTypeUInt8ArrayTypeInt16ArrayTypeUInt16ArrayTypeInt32ArrayTypeUInt32ArrayTypeInt64ArrayTypeUInt64ArrayTypeReal32ArrayTypeReal64ArrayTypeBoolArrayTypeGuidArrayTypeSizeTArrayTypeFileTimeArrayTypeSysTimeArrayTypeSidArrayTypeHexInt32ArrayTypeHexInt64ArrayTyper   r   r   r   rM   ]  sX    rM   )r+   )r   ),r   enumr   xml.dom.minidomr   .aiosmb.wintypes.dtyp.constrcuted_security.guidr   -aiosmb.wintypes.dtyp.constrcuted_security.sidr   (aiosmb.wintypes.dtyp.structures.filetimer   r   r   r   r7   r8   rK   rj   r   rp   r@   rz   r|   ru   rP   rF   r   r   r   r   r   r   rA   rC   rD   rO   r   r   r   r   ra   r   EnumrM   r   r   r   r   <module>   s   J!!




A	
