o
    CDiY                     @   sT   d dl Z d dlZd dlZddlT ddlT ddlmZ G dd dZG dd dZdS )	    N   )*)encode_namec                   @   st   e Zd ZedZedfddZdd Zdd Z	d	d
 Z
dd Zdd Zdd Zdd Zdd Zdd Zdd ZdS )
NMBSessionzNMB.NMBSessionFc                 C   sL   |  | _|  | _|| _d| _|rt | _| j| _d S t	 | _| j
| _d S )N    )uppermy_nameremote_name	host_typedata_bufDirectTCPSessionMessagedata_nmb_sendNMBPacket_DirectTCPsendNMBPacketNMBSessionMessage_sendNMBPacket_NetBIOS)selfr   r	   r
   is_direct_tcp r   A/var/www/Datamplify/venv/lib/python3.10/site-packages/nmb/base.py__init__   s   

zNMBSession.__init__c                 C      t NNotImplementedErrorr   datar   r   r   write      zNMBSession.writec                 C      d S r   r   )r   flagsr   r   r   r   onNMBSessionMessage   r   zNMBSession.onNMBSessionMessagec                 C   r   r   r   r   r   r   r   onNMBSessionOK"   r   zNMBSession.onNMBSessionOKc                 C   r   r   r   r"   r   r   r   onNMBSessionFailed%   r   zNMBSession.onNMBSessionFailedc                 C   sp   | j | | _ d}	 | j| j |}|dkrn|dkr%||7 }| | j ntq	|dkr6| j |d  | _ d S d S )Nr   )r   r   decode_processNMBSessionPacketNMBError)r   r   offsetlengthr   r   r   feedData,   s   
zNMBSession.feedDatac                 C   s   |  t| d S r   )r   SESSION_MESSAGEr   r   r   r   sendNMBMessage=   s   zNMBSession.sendNMBMessagec                 C   s.   t | jt}t | j| j}| t||  d S r   )r   r   TYPE_WORKSTATIONr	   r
   r   SESSION_REQUEST)r   my_name_encodedremote_name_encodedr   r   r   requestNMBSession@   s   zNMBSession.requestNMBSessionc                 C   sl   |j tkr| |j|j d S |j tkr|   d S |j tkr%|   d S |j t	kr,d S | j
d|j  d S )Nz%Unrecognized NMB session type: 0x%02x)typer+   r!   r    r   POSITIVE_SESSION_RESPONSEr#   NEGATIVE_SESSION_RESPONSEr$   SESSION_KEEPALIVElogwarning)r   packetr   r   r   r&   I   s   



z#NMBSession._processNMBSessionPacketc                 C   sN   t |}|dks
J d}|dkr|dO }|dM }| td||||  d S )Ni r   i  r   z>BBHlenr   structpack)r   packet_typer   r)   r    r   r   r   r   V   s   z!NMBSession._sendNMBPacket_NetBIOSc                 C   s.   t |}|dks
J | td||  d S )Ni z>Ir9   )r   r=   r   r)   r   r   r   r   _   s   z#NMBSession._sendNMBPacket_DirectTCPN)__name__
__module____qualname__logging	getLoggerr6   TYPE_SERVERr   r   r!   r#   r$   r*   r,   r1   r&   r   r   r   r   r   r   r      s    
		r   c                   @   sP   e Zd ZedZdZeeZ	dd Z
dd Zddd	Zd
d ZdddZdS )NBNSzNMB.NBNSz>HHHHHHc                 C   r   r   r   )r   r   ipportr   r   r   r   l   r   z
NBNS.writec                 C   s  t || jk r	tt| j|d | j \}}}}}}t|d? d@ }|d? d@ }	|d? d@ }
|d@ }|	dkr~|r~|| j }| jd | d }td	|||d  d d
 }|d7 }g }td|D ]}|dtd|||d    |d
7 }qb||fS |d fS )N   r            r         z>H   z%d.%d.%d.%d4B)	r:   HEADER_STRUCT_SIZE	Exceptionr;   unpackHEADER_STRUCT_FORMATboolrangeappend)r   r   trn_idcodequestion_countanswer_countauthority_countadditional_countis_responseopcoder    rcodename_lenr(   record_countretir   r   r   decodePacketo   s&   
 "
zNBNS.decodePacketTc              	   C   s6   t | j||r	dp
ddddd}t|dd }|| S )Ni     r   r       s      r;   r<   rR   r   )r   rV   nameis_broadcastheaderpayloadr   r   r   prepareNameQuery   
   zNBNS.prepareNameQueryc                 C   s  t || jk r	tt| j|d | j \}}}}}}t|d? d@ }|d? d@ }	|d? d@ }
|d@ }zB|| jd  }|dkrqg }| jd }td|D ] }|||d  }| }|	t
|d	||d  f |d
7 }qK||fW S W |d fS  ty   Y |d fS w )NrG   r   rH   rI   rJ   ,   r   -   ascii   )r:   rO   rP   r;   rQ   rR   rS   rT   striprU   str
IndexError)r   r   rV   rW   rX   rY   rZ   r[   r\   r]   r    r^   numnamesra   r(   rb   mynmer   r   r   decodeIPQueryPacket   s0   $


zNBNS.decodeIPQueryPacketc              	   C   s6   t | j||r	dp
ddddd}tddd }|| S )N   r   r   r   s    ! rf   )r   rV   rh   ri   rj   r   r   r   prepareNetNameQuery   rl   zNBNS.prepareNetNameQueryN)T)r>   r?   r@   rA   rB   r6   rR   r;   calcsizerO   r   rc   rk   rv   rx   r   r   r   r   rD   e   s    



!rD   )	r;   rA   randomnmb_constantsnmb_structsutilsr   r   rD   r   r   r   r   <module>   s   ^