o
    ]i                  	   @   sf   d dl Z d dlZd dlmZ dedededefddZ		dd
edededefddZG dd dZdS )    N)Optionalcandidate_typecandidate_transportbase_addressreturnc                 C   s"   d| ||f }t |d S )z7
    See RFC 5245 - 4.1.1.3. Computing Foundations
    z%s|%s|%sascii)hashlibmd5encode	hexdigest)r   r   r   key r   D/home/ubuntu/.local/lib/python3.10/site-packages/aioice/candidate.pycandidate_foundation   s   r     candidate_component
local_prefc                 C   sF   |dkrd}n|dkrd}n	|dkrd}nd}d| d	|  d	|   S )
z5
    See RFC 5245 - 4.1.2.1. Recommended Formula
    host~   prflxn   srflxd   r   i      r   )r   r   r   	type_prefr   r   r   candidate_priority   s   r   c                   @   s   e Zd ZdZ				ddedededededed	ed
ee dee dee dee ddfddZededd fddZ	defddZ
dd defddZdefddZdS )	Candidatez
    An ICE candidate.
    N
foundation	component	transportpriorityr   porttyperelated_addressrelated_porttcptype
generationr   c                 C   sF   || _ || _|| _|| _|| _|| _|| _|| _|	| _|
| _	|| _
d S )Nr   r   r   r    r   r!   r"   r#   r$   r%   r&   )selfr   r   r   r    r   r!   r"   r#   r$   r%   r&   r   r   r   __init__'   s   
zCandidate.__init__sdpc                 C   s   |  }t|dk rtdd}d}d}d}tdt|d dD ]9}|| dkr/||d  }q || dkr>t||d  }q || dkrK||d  }q || d	krYt||d  }q t|d
 t|d |d t|d |d t|d |d ||||dS )z
        Parse a :class:`Candidate` from SDP.

        .. code-block:: python

           Candidate.from_sdp(
            '6815297761 1 udp 659136 1.2.3.4 31102 typ host generation 0')
           z#SDP does not have enough propertiesN      raddrrportr%   r&   r               r'   )splitlen
ValueErrorrangeintr   )clsr*   bitsr#   r$   r%   r&   ir   r   r   from_sdpA   s<   



zCandidate.from_sdpc                 C   s   d| j | j| j| j| j| j| jf }| jdur|d| j 7 }| jdur*|d| j 7 }| j	dur6|d| j	 7 }| j
durB|d| j
 7 }|S )zB
        Return a string representation suitable for SDP.
        z%s %d %s %d %s %d typ %sNz	 raddr %sz	 rport %sz tcptype %sz generation %dr'   )r(   r*   r   r   r   to_sdpk   s$   
	


zCandidate.to_sdpotherc                 C   sD   t | j}t |j}| j|jko!| j |j ko!|j|jkS )z
        A local candidate is paired with a remote candidate if and only if
        the two candidates have the same component ID and have the same IP
        address version.
        )	ipaddress
ip_addressr   r   r   lowerversion)r(   r>   abr   r   r   can_pair_with   s   
zCandidate.can_pair_withc                 C   s   d|    S )NzCandidate(%s))r=   )r(   r   r   r   __repr__   s   zCandidate.__repr__)NNNN)__name__
__module____qualname____doc__strr8   r   r)   classmethodr<   r=   boolrE   rF   r   r   r   r   r   "   sH    	

)r   )r   )	r   r?   typingr   rK   r   r8   r   r   r   r   r   r   <module>   s.    

