%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /lib/python2.7/site-packages/salt/utils/
Upload File :
Create Path :
Current File : //lib/python2.7/site-packages/salt/utils/ssdp.pyo

�
���^c@@s�dZddlmZmZmZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZddl
ZddlZejjj�Zeed�s�dZnyddlZee_WnDek
ryddlZee_Wqek
rdZqXnXdefd��YZdefd	��YZd
efd��YZ de fd
��YZ!de fd��YZ"de fd��YZ#dS(uq
Salt Service Discovery Protocol.
JSON-based service discovery protocol, used by minions to find running Master.
i(tabsolute_importtprint_functiontunicode_literalsN(tOrderedDictudumpstTimeOutExceptioncB@seZRS((t__name__t
__module__(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR2stTimeStampExceptioncB@seZRS((RR(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR6stSSDPBasecB@s�eZdZeje�ZdZdZdZdZ	dZ
ide6de6de	6d	e
6ie6Zed
��Z
ed��ZRS(u*
    Salt Service Discovery Protocol.
    u	signatureuansweruportu	listen_iputimeoutu__salt_master_servicei�u0.0.0.0icC@sttot�S(uW
        Return True if the USSDP dependencies are satisfied.
        :return:
        (tbooltasynciot_json(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt
_is_availablePscC@sxtjtjtj�}zNy!|jd�|j�d}Wn&tk
rdtjtj��}nXWd|j�X|S(uB
        Find out localhost outside IP.

        :return:
        u
1.255.255.255iiN(u
1.255.255.255i(	tsockettAF_INETt
SOCK_DGRAMtconnecttgetsocknamet	Exceptiont
gethostbynametgethostnametclose(tscktip_addr((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytget_self_ipXs

(RRt__doc__tloggingt	getLoggertlogt	SIGNATUREtANSWERtPORTt	LISTEN_IPtTIMEOUTtDEFAULTStstaticmethodRR(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR:s
tSSDPFactorycB@sAeZdZd�Zd�Zd�Zddd�Zd�ZRS(u"
    Socket protocol factory.
    cK@snx=|j|jfD])}t|||j||j|��qWt|_d|_t	j
t	j��|_dS(u4
        Initialize

        :param config:
        N(
RRtsetattrtgetR"tFalsetdisable_hiddentNonet	transportR
RRtmy_ip(tselftconfigtattr((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt__init__os
'		cO@s|S(uo
        Return instance on Factory call.
        :param args:
        :param kwargs:
        :return:
        ((R,targstkwargs((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt__call__{scC@s
||_dS(uL
        On connection.

        :param transport:
        :return:
        N(R*(R,R*((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytconnection_made�si
cC@s�d}d�}|�}x�||kr�y.|jj|d|�|jjd�dSWqtk
r�}|jjd|�tj|�|d7}||�7}qXqWdS(u�
        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:
        icS@sdtjdd�S(Ng�?i
i(trandomtrandint(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt<lambda>�staddruSent successfullyNuPermission error: %si(R*tsendtoRtdebugtAttributeErrorttimetsleep(R,tdataR7tattemptsttriestslp_timetslptex((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt_sendto�s		

cC@s�tjjj|�}|j|j�ruyt|t|j��}WnVtt	fk
r�|j
jd|�|jr�|j
dj|jd�|�ndSXtjj|�tjj�tjdd�kr|jr�|j
dj|jd�|�n|j
jd|�dS|j
jd	||�|j
tjjjtd
�j|jtjjj|jdt���|�nM|jr�|j
tjjjdj|jd�|��n|j
jd
|�dS(ub
        On datagram receive.

        :param data:
        :param addr:
        :return:
        u0Received invalid timestamp in package from %s:%su	{0}:E:{1}uInvalid timestampNtsecondsiuTimestamp is too oldu$Received outdated package from %s:%suReceived "%s" from %s:%su	{0}:@:{1}t_json_moduleuInvalid packet signatureu!Received bad signature from %s:%s(tsalttutilststringutilst
to_unicodet
startswitht	signaturetfloattlent	TypeErrort
ValueErrorRR9R(RCtformattdatetimet
fromtimestamptnowt	timedeltatto_byteststrtjsontdumpstanswerR(R,R=R7tmessaget	timestamp((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytdatagram_received�s8		"1	"!
	
N(	RRRR/R2R3R)RCR\(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR$js					tSSDPDiscoveryServercB@sMeZdZed��Zd�Zedddddd��Zd�ZRS(u'
    Discovery service publisher.

    cC@s
tj�S(uE
        Return availability of the Server.
        :return:
        (RR(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytis_available�scK@s_tj|�|_|j|jkr7i|j|j<n|j|jji|j�d6�dS(u5
        Initialize.

        :param config:
        umasterN(tcopytdeepcopyt_configRtupdateR(R,R-((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR/�sic
c@sc|p	|s9|s!td��n||fdff}nUt�}x�d|fd|ffD]�\}	}
|
dk	r[tjj|jd|dtjd|d||
��V}|s�tj	d��nxY|D]N\}}
}}
}||f}||kr	ddg||<n||||	<q�Wq[q[Wg|j
�D]D\}}|rQ|ddkpd|od|ddks/||f^q/}|s�td	��ng}xG|D]5\\}}\}}d}}y�tjd|dtjd|�}x0tjtjgD]}|j
tj|d�q�W|jt�|r7|j|�n|rctjj|j||��V|}nWnhtj	k
r�}|dk	r�|j�n|j|�q�tk
r�|dk	r�|j�n�q�XPq�W|d�|�}tjjd
|�}|j||||�}ytjj|�VWntk
rI|j��nXtjj||��dS(
u�
        Create datagram connection.

        Based on code from Python 3.5 version, this method is used
        only in Python 2.7+ versions, since Trollius library did not
        ported UDP packets broadcast.
        uunexpected address familyiitfamilyttypetprototflagsu!getaddrinfo() returned empty listucan not get address informationtloopN(NN(ROR)RR
t
coroutinestFromtgetaddrinfoR
RterrortitemstSO_REUSEADDRtSO_BROADCASTt
setsockoptt
SOL_SOCKETtsetblockingR'tbindtsock_connectRtappendRtfuturestFuturet_make_datagram_transporttReturn(Rgtprotocol_factoryt
local_addrtremote_addrRcReRftaddr_pairs_infot
addr_infostidxR7tinfostfamt_tprotaddresstkeyt	addr_pairt
exceptionst
local_addresstremote_addresstsocktr_addrtopttexctprotocoltwaiterR*((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytcreate_datagram_endpoint�sl		%%(
!





	

cC@s"|jj|j|j|j�}|jj|j|j|j�}|jjd||�tj�}t	d|j|j
�}tjr�|jt
j||d||f��\}}n0|j|j|d||fdt��\}}z|j�Wd|jjd�|j�|j�XdS(u.
        Run server.
        :return:
        u2Starting service discovery listener on udp://%s:%sRYRztallow_broadcastNu$Stopping service discovery listener.(RaR&R R"RRtinfoR
tget_event_loopR$Rtportedtrun_until_completeR]R�tTruetrun_foreverR(R,t	listen_iptportRgR�R*((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytrun3s""	**
N(	RRRR#R^R/R)R�R�(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR]�s	EtSSDPDiscoveryClientcB@sAeZdZed��Zd�Zd�Zd�Zd�ZRS(u:
    Class to discover Salt Master via UDP broadcast.
    cC@s
tj�S(uD
        Return availability of the Client
        :return:
        (RR(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR^OscK@s�||_tjtjtj�|_|jjtjtjd�|jj|jj	|j
|j|j
��xF|j|j
|j
gD],}t|||jj	||j|��q�WdS(u
        Initialize
        iN(RaR
RRt_socketRoRpRnt
settimeoutR&R!R"RRR%(R,R-R.((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR/Ws	,cC@sJtjjjdj|jtj���}|jj|d|j	f�|S(uL
        Query the broadcast for defined services.
        :return:
        u{}{}u<broadcast>(
RFRGRHRURPRKR;R�R8R�(R,tquery((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt_querycscC@s�x�tr�yP|jjd�\}}|rW||krCg||<n||j|�nPWqtk
r�}|jjd|�PqXqWdS(uH
        Collect masters map from the network.
        :return:
        iu'Discovery master collection failure: %sN(R�R�trecvfromRtRRRk(R,tresponseR=R7terr((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt_collect_masters_mapns	
cC@s�i}i}|jjd�|j�|j|�|sRd}|jj|�n5x2|j�D]$\}}x|D]
}tjjj|�}|j	|j
�rr|j|j
�d}|jjd|d|d|�d|kr0|jd�d}|jj
d||�d	|kr||jj
d
|�q|q||krIg||<n||jtjjj|jd�ddt��qrqrWq_W|S(
uY
        Gather the information of currently declared servers.

        :return:
        uLooking for a server discoveryuNo master has been discovered.i����u/Service announcement at '%s:%s'. Response: '%s'iiu:E:u3Error response from the service publisher at %s: %su	timestampu(Publisher sent shifted timestamp from %su:@:RE(RR�R�R�RlRFRGRHRIRJRKtsplitR9RkRtRWtloadsR(R,R�tmasterstmsgR7tdescriptionsR=R�((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pytdiscover�s8


		


4(	RRRR#R^R/R�R�R�(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyR�Ks			($Rt
__future__RRRRQR;RR4R
R_tcollectionsRtsalt.utils.jsonRFtsalt.utils.stringutilsRGRWtimport_jsonRthasattrR)R
R'R�tImportErrorttrolliusR�RRRtobjectRR$R]R�(((s3/usr/lib/python2.7/site-packages/salt/utils/ssdp.pyt<module>s8	



0kv

Zerion Mini Shell 1.0