o
    j
                     @   sB   d dl Z d dlmZ d dlmZmZ d dlmZ G dd dZdS )    N)KerberosResponse)KerberosErrorCodeKerberosError)UniProtoc                   @   s6   e Zd Zdd Zdd Zdd Zdd Zdd
dZdS )KerberosClientSocketc                 C   s.   || _ |j| _| | _t|j| _d | _d S )N)	targetprotocolsoc_typeget_hostname_or_ipdst_ipintportdst_portsoc)selfr    r   /root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/minikerberos/network/clientsocket.py__init__	   s
   

zKerberosClientSocket.__init__c                 C   s2   d}|d| j  7 }|d| j 7 }|d| j 7 }|S )Nz===KerberosClientSocket===
zsoc_type: %s
zdst_ip: %s
zdst_port: %s
)r	   r   r   )r   tr   r   r   __str__   s
   zKerberosClientSocket.__str__c                 C   s   d| j | jf S )Nz%s:%d)r   r   r   r   r   r   get_addr_str   s   z!KerberosClientSocket.get_addr_strc                 C   s`   | j tjkrttjtj| _| j| j| j	f d S | j tj
kr,ttjtj| _d S td)NzUnknown socket type!)r	   r   
CLIENT_TCPsocketAF_INETSOCK_STREAMr   connectr   r   
CLIENT_UDP
SOCK_DGRAM	Exceptionr   r   r   r   
create_soc   s   zKerberosClientSocket.create_socTc           	      C   s|  |    z| jtjkrst|jdddd}| j||  d}d}	 d}| jd}|dkr/nC||7 }|dkrQt|dkrQt	j
|d d ddd}|d	krQtd
|dkrqt||d krd|dd  }nt||d krptdq!q"n#| jtjkr| j|| j| jf 	 | jd\}}|d	 | jkrnq|dkrtdt|}|jdkr|dkrt||W | j  S | j  w )N   bigF)	byteordersigned    Ti   r   zOReturned data length is 0! This means the server did not understand our messagezGot too much data somehowi  zServer closed the connection!	KRB_ERROR)r    r	   r   r   lento_bytesr   sendallrecvr   
from_bytesr   r   sendtor   r   recvfromr   loadnamer   close)	r   datathrowlengthbufftotal_lengthtempaddrkrb_messager   r   r   sendrecv&   sR   
zKerberosClientSocket.sendrecvN)T)__name__
__module____qualname__r   r   r   r    r:   r   r   r   r   r      s    r   )	r   "minikerberos.protocol.asn1_structsr   minikerberos.protocol.errorsr   r   asysocks.unicomm.common.targetr   r   r   r   r   r   <module>   s
   