File: //opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/__pycache__/ssdp.cpython-310.pyc
o
�N�g�: � @ s@ d Z ddlZddlZddlZddlZddlZddlZddlZddl Zzddl
mZ W n ey9 ddl
mZ Y nw ejj�� Zeed�sGdZz ddlZde_W n eyn z ddlZde_W n eyk dZY nw Y nw G dd� de�ZG d d
� d
e�ZG dd� d�ZG d
d� de�ZG dd� de�ZG dd� de�ZdS )zq
Salt Service Discovery Protocol.
JSON-based service discovery protocol, used by minions to find running Master.
� N)�OrderedDict�dumpsFTc @ � e Zd ZdS )�TimeOutExceptionN��__name__�
__module__�__qualname__� r
r
�C/opt/saltstack/salt/lib/python3.10/site-packages/salt/utils/ssdp.pyr 7 � r c @ r )�TimeStampExceptionNr r
r
r
r r
; r r
c
@ s^ e Zd ZdZe�e �ZdZdZdZ dZ
dZede de
d ed
ei iZe
dd� �Ze
d
d� �ZdS )�SSDPBasez*
Salt Service Discovery Protocol.
� signature�answer�port� listen_ip�timeoutZ__salt_master_servicei� z0.0.0.0� c C s t tot�S )zW
Return True if the USSDP dependencies are satisfied.
:return:
)�bool�asyncio�_jsonr
r
r
r �
_is_availableV s zSSDPBase._is_availablec C st t � t jt j�} z,z
| �d� | �� d }W n ty& t �t �� �}Y nw W | �� |S W | �� |S | �� w )zB
Find out localhost outside IP.
:return:
)z
1.255.255.255� r ) �socket�AF_INET�
SOCK_DGRAM�connect�getsockname� Exception�
gethostbyname�gethostname�close)ZsckZip_addrr
r
r �get_self_ip^ s
���
�zSSDPBase.get_self_ipN)r r r �__doc__�logging� getLogger�log� SIGNATURE�ANSWER�PORT� LISTEN_IP�TIMEOUT�DEFAULTS�staticmethodr r# r
r
r
r r ? s$
�
r c @ s: e Zd ZdZdd� Zdd� Zdd� Zdd
d�Zdd
� ZdS )�SSDPFactoryz"
Socket protocol factory.
c K sL | j | jfD ]}t| ||�|| j| �� qd| _d| _t�t� � �| _
dS )z4
Initialize
:param config:
FN)r( r) �setattr�getr- �disable_hidden� transportr r r! Zmy_ip��self�config�attrr
r
r �__init__u s
zSSDPFactory.__init__c O s | S )zo
Return instance on Factory call.
:param args:
:param kwargs:
:return:
r
)r5 �args�kwargsr
r
r �__call__� s zSSDPFactory.__call__c C s
|| _ dS )zL
On connection.
:param transport:
:return:
N)r3 )r5 r3 r
r
r �connection_made� s
zSSDPFactory.connection_madeN�
c
C s� d}dd� }|� }||k rLz| j j||d� | j�d� W dS tyE } z| j�d|� t�|� |d7 }||� 7 }W Y d}~nd}~ww ||k s
dS dS ) a�
On multi-master environments, running on the same machine,
transport sending to the destination can be allowed only at once.
Since every machine will immediately respond, high chance to
get sending fired at the same time, which will result to a PermissionError
at socket level. We are attempting to send it in a different time.
:param data:
:param addr:
:return:
r c S s dt �dd� S )Ng �?r= � )�random�randintr
r
r
r �slp_time� s z%SSDPFactory._sendto.<locals>.slp_time)�addrzSent successfullyNzPermission error: %sr )r3 �sendtor'