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r•nq„|dkržtdƒ‚t |¡}|jdkr°|dkr°t|ƒ‚|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
   