HEX
Server: Apache
System: Linux box5154.bluehost.com 5.14.0-162.23.1.9991722448259.nf.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jul 31 18:11:45 UTC 2024 x86_64
User: almiraso (1849)
PHP: 8.2.31
Disabled: NONE
Upload Files
File: //lib64/python3.9/site-packages/ntp/__pycache__/util.cpython-39.pyc
a

\��d9��@s�dZddlmZmZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZ
ddlZ
ddlZ
dZdZdZdZdZd	ZdZd
ZdZdZd
ZdadZdZdZeteeegZdZ dZ!dZ"da#e e!e"t#gZ$ee$fZ%dd�Z&dd�Z'dZ(dZ)dZ*dd�Z+dd �Z,d!d"�Z-d#d$�Z.d%d&�Z/d'd(�Z0d)d*�Z1d+d,�Z2d-d.�Z3d/d0�Z4d1d2�Z5d3d4�Z6d5d6�Z7d7d8�Z8d9d:�Z9d;d<�Z:d=d>�Z;d?d@�Z<dAdB�Z=dCdD�Z>dEdF�Z?dGdH�Z@dIdJ�ZAdudLdM�ZBdvdNdO�ZCdPdQ�ZDdRdS�ZEdTdU�ZFGdVdW�dW�ZGeG�ZHejIfdXdY�ZJe�KdZd[d\g�ZLeMeNu�r.ddlOZOddlPZPddlQZQd]d^�ZRGd_d`�d`�ZSdwdbdc�ZTGddde�de�ZUGdfdg�dg�ZVGdhdi�di�ZWGdjdk�dk�ZXzddllmYZYWn$eZ�y�Gdmdn�dne[�ZYYn0dxdodp�Z\dydqdr�Z]dsdt�Z^dS)zzCommon utility functions�)�print_function�divisionN��@� �������nsuµs�ms�s�ksZpptZppbZppmu‰cCsdtjjkrt�dSdS)NzUTF-8TF)�sys�stdout�encoding�deunicode_units�rr�./usr/lib64/python3.9/site-packages/ntp/util.py�
check_unicode5srcCs0d}d}|tt�t�<|tt�t�<|a|adS)z�Under certain conditions it is not possible to force unicode output,
    this overwrites units that contain unicode with safe versions�usZppkN)�	UNITS_SEC�index�UNIT_US�	UNITS_PPX�UNIT_PPK)Znew_usZnew_ppkrrrr<sr)ZtaiZpoll)�	rootdelay�rootdispZrootdist�offsetZ
sys_jitterZ
clk_jitterZleapsmearoffsetZ	authdelayZkoffsetZkmaxerrZkesterrZkprecisZ
kppsjitterZfuzzZclk_wander_thresholdZtick�in�outZbias�delay�jitter�
dispersionZ
fudgetime1Z
fudgetime2)Z	frequencyZ
clk_wandercCsB|durdStt���d|d}||kr>|�|�|��dS)zQdebug is the current debug value
    threshold is the trigger for the current logN� �
)�rfc3339�time�write�flush)�logfp�text�debugZ	thresholdrrr�dologVs
r/cCsHz||�}Wn6tyBtj�||�tj�|�td��Yn0|S)z�Attempts to typecast an argument, prints and dies on failure.
    errtext must contain a %s for splicing in the argument, and be
    newline terminated.r
)�
ValueErrorr�stderrr*�
SystemExit)�argZcastfuncZerrtext�usageZcastedrrr�safeargcastasr5cCsddS)z6Returns the NTPsec version string in a standard formatz	ntpsec-%sz1.2.2arrrrr�
stdversionnsr6cCsVt�dt�|��}t|�}d|vrJ|�dd�d}t|�dkrJ|d|7}|d7}|S)z<RFC 3339 string from Unix time, including fractional second.z%Y-%m-%dT%H:%M:%S�.r
r�Z)r)�strftime�gmtime�str�split�int)�tZrepZsubsecrrrr(ssr(cCs,|dd�}d�|�d��}tj�|�}|S)Nr�r7)�joinr<�ntp�util�
hexstr2octets)Ztxt�valuerrr�deformatNTPTimesrEc	Cs`t|�ddkr|dd�}g}tdt|�d�D]$}|�tt|||d�d���q0d�|�S)Nrr���rr?)�len�range�append�chrr=r@)Zhexstr�valuesrrrrrC�s"rCcCs|d|�||d�fS)z4Breaks a sequence into two pieces at the slice pointNr)�dataZ
slicepointrrr�	slicedata�srMcCs�d}|�d�dkr*|�d�\}}d|}nPd|vrz|�d�}d||d�vrz|�d�}||d�}|d|�}|dd�}||fS)Nr?�:r
�]rF)�countr<�rindex)�hostname�
portsuffixZrbrakZportseprrr�	portsplit�s


rTcs�d�d}g�g�g����fdd������fdd�}d}t|�}||k�r��r�|||krl��d}d�nJ||dkr�|d	7}||d
vr���td||d��n��||�n�||d
kr�||kr�||dkr�|d	7}q�|d	8}n�||dv�rd�||}��r���nl||dk�r>|d	7}||dk�r�t�nB||dk�rT|�n,||tjv�rr��r���n��||�|d	7}qB|��S)NFr?cspd���}�sNzt|�}Wn2tyLzt|�}WntyFYn0Yn0�|f}��|�g�dd�<dS)Nr?)r@r=r0�floatrI)�token�wrapper)�current�inQuote�tokensrr�	pushToken�s

zparseConf.<locals>.pushTokencs0�r
���r,���dd��g�dd�<dS�N)rIr)rX�linesr[rZrr�pushLine�s
zparseConf.<locals>.pushLiner�\r
z'"n\z'\�'�#r'z'"T)rGrI�eval�SyntaxError�stringZ
whitespace)r-ZquoteStarterr^�i�tlenr)rXrYr]r[rZr�	parseConf�sT



rgcCs8|��}g}|D]}t|d�}|�|�qd�|�}|S)z.Pretty print string of space separated numbers�r&)r<�
fitinfieldrIr@)rL�parts�cooked�part�fitted�renderedrrr�
stringfilt�s

rocCs�|��}i}d}|D]6}t|�\}}t|�}t||�}|�|d�d||<qd}d}	|��D]&}
|
|krjq\||
}||	kr\|
}|}	q\g}|D]"}t||�}t|d�}
|�|
�q�d�	|�dt
|t
�t�}|S)zECooks a filt* string of space separated numbers, expects millisecondsi`y��rr
rhr&)
r<�scalestring�maxdownscale�max�get�keys�
rescalestringrirIr@rr�UNIT_MS)rLrjZoomcountZminscalerlrDZoomZdsZ
mostcommonZhighestcount�keyrPrkrmrnrrr�stringfiltcooker�s4


�rxcCstD]}||vr|SqdS)z2Returns the unit group which contains a given unitN)�
unitgroups)�unit�grouprrr�getunitgroupsr|cCsNt|�}|dur|�|�dS||vrJ|�|�}|�|�}t||d�SdS)z:Calculates how many orders of magnitude separate two unitsNr)r|r�abs)�a�br{�iaZibrrr�oomsbetweenunitss

r�cCsL|ddkr|dd�}d}nd}d|vr:|�d�\}}n|}d}|||fS)	zEBreaks a number string into (aboveDecimal, belowDecimal, isNegative?)r�-r
NTFr7r?)r<)rD�negative�above�belowrrr�breaknumberstring+sr�cCs4|dkrd}|r d�||f�}n|}|r0d|}|S)z'Glues together parts of a number stringr?�0r7r�)r@)r�r�Z
isnegative�newvaluerrr�gluenumberstring:sr�cCs,d|vr$t|�d�d�}|dSdSdS)z?Maximum units a value can be scaled down without inventing datar7r
rrN)rGr<)rDZ
digitcountrrrrqGs
rqc
Cs�t|�\}}}|dkr&t|||�}|St|�}t|�}t|d�}|dkr�||krp||}d}	d|||}
q�|}||d�|}
|d|�}	n0|dkr�||kr�dS||d|�}	||d�}
|	�d�}	t|	|
|�}|S)z2Rescale a number string by a given number of unitsrrr?r�N)r�r�rGr}�lstrip)
rDZunitsscaled�whole�decr��hilen�lolenZdigitsmoved�padcount�newwhole�newdecZ	choppointr�rrrruRs.
rucCs t|�}t||��d�}||fS)zDScale a zero value for the unit with the highest available precisionr�)rqrur�)rDZscaler�rrr�
formatzerousr�cCst|�rt|�St|�\}}}t|�}|dks6t|�r�d}t|�}||krb||dkrXqb|d7}qB|dd}|d}||kr�|d}|d}|d|��d�}	||d�}
|}nD|d}|d}
|
dkr�|d8}d}
|d|
�}	||
d�|}
|}t|	|
|�}||fS)z4Scales a number string to fit in the range 1.0-999.9rr�r
rN)�isstringzeror�r�rGr�r�)rDr�r�r�r�rer�ZlounitsZ	movecharsr�r��
unitsmovedZhiunitsZhidigitsr�rrrrp|s:
rpcCs�t|�}|dur|}n�||kr$|}n�||krBd||}||}n�d|vr�||}t|�d�d�}t||�}||}ttt|�|��}|�d�}	t|	d�}|dkr�|	dd}q�||kr�||}
|d|
}n|}|S)zFAttempt to fit value into a field, preserving as much data as possibleNr&r7r
rr�)rGr<�minr;�roundrU)rDZ	fieldsizeZvallenr�Zpad�diffZdeclenZcroplenZroundlenZsplittedr�rrrri�s.


ricCshd|vr|S|dkr"|�d�dS|�d�d}t|�|}t||�}||}|dkrd|d|�}|S)z(Crops digits below the maximum precisionr7rr
N)r<�findrGr�)rD�oomsZdstartZdsize�	precisionZ	cropcountrrr�
cropprecision�s
r�cCs|D]}|dvrdSqdS)z)Detects whether a string is equal to zero)r�r7r�FTr)rDrerrrr��sr�cCsjtD]`}||vr|dur$|dS|�|�}||7}d|krNt|�kr^nn||SdSqdS)z7Returns a unit at a different scale from the input unitNr)ryrrG)rz�mover{rrrr�unitrelativeto�s
r�FcCs>|tvrt}n |tvrt}n|tvr*t}n|St|||||�S)z1Call unitify() with the correct units for varname)�S_VARS�UNIT_S�MS_VARSrv�PPM_VARS�UNIT_PPM�unitify)rDZvarname�baseunit�width�	unitSpace�startrrr�
unitifyvar�sr�cCs�|durt|�d}t||�}t|�r4t|�\}}nt||�}t|�\}}t||�}|rbd}	d}
nd}	d}
|dur�|dur�d}n|t|�|	}t||�|
|}n||
|}|dur�|�	�}|S)zEFormats a numberstring with relevant units. Attempts to fit in width.Nrr
r&r?)
r|r�r�r�r�rpr�rGri�strip)rDZstartingunitr�r�r�r�r�r�ZunitgetZspaceWidthAdjustmentZspacerZ	realwidthrrrr��s,


r�cCs�t|t�rd|St|ttf�s$dStt|����dkr<dSd}|dkr�|dkrVd}q�|d	krdd
}q�|dkrrd}q�|d
kr�d}n6|dkr�d}n(|dkr�d
}n|dkr�d}n|dkr�d}||S)�7Scaled floating point formatting to fit in 8 characters�%8s�       X�nan�     nan�%8drg@�@z%8.4f���@�%8.3f�j�@�%8.2f���.A�%8.1fgY��@������j����
isinstancer;r=rU�lower��f�fmtrrr�f8dot4s2
r�cCs�t|t�rd|St|ttf�s$dStt|����dkr<dSd}|dkrr|dkrVd}q�|d	krdd
}q�|dkr�d}n(|d
kr�d}n|dkr�d
}n|dkr�d}||S)r�r�r�r�r�r�rr�r�r�r�r�r�r�r�r�r�r�rrr�f8dot36s*
r�cCs*z
t��WSty$t��YS0dS)z>Try to get a monotonic clock value unaffected by NTP stepping.N)r)�	monotonic�AttributeErrorrrrr�	monoclockWs
r�c@s,eZdZdZd
dd�Zdd�Zddd	�ZdS)�CachezSimple time-based cache�,cCs||_i|_dSr\)�defaultTimeout�_cache)�selfr�rrr�__init__cszCache.__init__cCsB||jvr:|j|\}}}|t�|kr,|S|j|=dSndSdSr\)r�r�)r�rwrDZsettime�ttlrrrrsgs
z	Cache.getNcCs(|dur|n|j}|t�|f|j|<dSr\)r�r�r�)r�rwrDZ	customTTLr�rrr�setrsz	Cache.set)r�)N)�__name__�
__module__�__qualname__�__doc__r�rsr�rrrrr�`s
r�cCs�t�|�}|dur|St�d|�}|s*t�t|�\}}zt�|d|ddtj�}Wntj	yld|YS0|d\}}}}	}
z"t�
|
tj�}|d��|}Wn(tj	y�|	p�|}
|
��|}Yn0t�
||�|S)z.Canonicalize a hostname or numeric IP address.Nz
([:.[\]]|\w)*rz
DNSFAIL:%s)�canonicalization_cachers�re�match�	TypeErrorrT�socket�getaddrinfoZAI_CANONNAME�gaierrorZgetnameinfoZNI_NAMEREQDr�r�)ZinhostZfamilyZresname�mrRrS�aiZsocktype�protoZ	canonname�sockaddr�name�resultZ
canonicalizedrrr�canonicalize_dns{s,
�r��TermSizer�ZheightcCs�d}t�d�r|ttur.t�d�\}}||f}nNz:t�dt�	dt
jt�ddddd���\}}}}||f}Wnt
yzYn0t|�S)z!Return the current terminal size.)�P�r
ZHHHHrr)�os�isattyr;�bytes�shutil�get_terminal_size�struct�unpack�fcntlZioctl�termiosZ
TIOCGWINSZ�pack�IOErrorr�)�size�w�hZhpZwprrr�termsize�s 


��r�c@s(eZdZdZejjfdd�Zdd�ZdS)�PeerStatusWordz:A peer status word from readstats(), dissected for displaycCs�tj�|�|_tj�|�|_tj�|�}|tjj@r<d|_nd|_|tjj	@rVd|_
n|tjj@rjd|_
nd|_
|tjj@dkr�d|_
n|tjj@r�d|_
nd|_
|tjjk�rtjjdtjjdtjjd	tjjd
tjjdtjjdtjjd
tjjdi}||d@|_n�|d@tk�rF|t@dk�r(d|_n|t@dk�r>d|_nd|_n@|d@tk�r\d|_n*|d@tk�rrd|_n|d@tk�r�d|_tjj dtjj!dtjj"dtjj#dtjj$dtjj%dtjj&dtjj'dtjj(dtjj)dtjj*d i}|�+tjj,|jBd�|_-dS)!NZyes�noZnoner�ok ZbadZrejectZ	falsetickZexcessZoutlier�	candidateZbackupzsys.peerzpps.peerrhrZinsaneZhi_dispr?Zsel_candZ	sync_candZsys_peerZmobilizeZ
demobilizeZunreachableZ	reachableZrestartZno_replyZ
rate_exceededZ
access_deniedZ
leap_armedZclock_alarm).rA�controlZCTL_PEER_EVENTZeventZCTL_PEER_NEVNTZevent_count�CTL_PEER_STATVALZCTL_PST_CONFIGZconfZ
CTL_PST_BCAST�reachZ
CTL_PST_REACHZCTL_PST_AUTHENABLEZauthZCTL_PST_AUTHENTIC�magic�NTP_OLDVERSIONZCTL_PST_SEL_REJECTZCTL_PST_SEL_SANEZCTL_PST_SEL_CORRECTZCTL_PST_SEL_SELCANDZCTL_PST_SEL_SYNCCANDZCTL_PST_SEL_EXCESSZCTL_PST_SEL_SYSPEERZCTL_PST_SEL_PPSZ	condition�OLD_CTL_PST_SEL_REJECT�OLD_CTL_PST_SANE�OLD_CTL_PST_DISP�OLD_CTL_PST_SEL_SELCAND�OLD_CTL_PST_SEL_SYNCCAND�OLD_CTL_PST_SEL_SYSPEERZPEVNT_MOBILZ
PEVNT_DEMOBILZ
PEVNT_UNREACHZPEVNT_REACHZ
PEVNT_RESTARTZPEVNT_REPLYZ
PEVNT_RATEZ
PEVNT_DENYZPEVNT_ARMEDZ
PEVNT_NEWPEERZPEVNT_CLOCKrsZ
PEER_EVENTZ
last_event)r��status�
pktversionZstatvalZseldictZ
event_dictrrrr��sh�
�
zPeerStatusWord.__init__cCs
d|jS)Nzjconf=%(conf)s, reach=%(reach)s, auth=%(auth)s, cond=%(condition)s, event=%(last_event)s ec=%(event_count)s)�__dict__�r�rrr�__str__s�zPeerStatusWord.__str__N)	r�r�r�r�rAr�ZNTP_VERSIONr�rrrrrr��sDr��, cCs|tj��jd}d}d}tt|td��}|��D�]4\}\}}	||vr`dt|�d}
|
|}nd|}|dvr�|tj�	|�7}�n�|d	vr�||7}�nt|d
kr�|d|7}�n\|dkr�|d
|7}�nD||vr�|r�|t
|�7}n|d�|���7}�n|dk�rf|d|7}|dk�r"|d7}n6d}t
|�D](\}
}d|
>|@�r.|||
d7}�q.|dd�}n�|tv�r�|�r�|t|	ttdd�7}n|t|�7}nr|tv�r�|�r�|t|	ttdd�7}n|t|�7}n>|tv�r|�r�|t|	tdd�7}n|t|�7}n|t|�7}||7}d}|D]}|dk�r0d}n|d7}�q|t|�|k�r^|dd�d}||7}q0|dd�d}|S)zCooked-mode variable display.rr?)�	filtdelay�
filtoffset�filtdispZ	filterror)rw�%zs =z%s=)�reftimeZclockZorg�rec�xmt)�srcadr�peeradr�dstadr�refid�leap)Z00Z01Z10Z11r�z%03lo�	�flashz%02x rr�)
Zpkt_dupZ	pkt_bogusZ
pkt_unsyncZ
pkt_deniedZpkt_authZpkt_stratumZ
pkt_headerZpkt_autokeyZ
pkt_cryptoZpeer_stratumZ	peer_distZ	peer_loopZpeer_unreachr
r&NrF)r�r'���)rArBr�r�rGrr�itemsr;�ntpcZ
prettydaterxr@r<�	enumerater�r�rv�UNIT_NS�reprr�r�r�r�)�	variables�	showunits�sepr�r-ZspecialsZlongestspecialr�rD�rawvalue�	formatter�itemZtstflagnamesre�nZ	lastcount�crrr�cook	sl








r!c@sheZdZdZdddejfdd�Zedd��Zed	d
��Z	edd��Z
d
d�Zdd�Zdd�Z
dd�ZdS)�PeerSummaryz-Reusable report generator for peer statisticsFNrc		Csz||_||_||_||_||_||_||_||_t|p8ddd�|_	d|j	|_
d|_d�|j
�|_
d|_d|_g|_dS)Nr�r��z     remote    z(st t when poll reach   delay   offset   )�displaymoder�
showhostnamesr�
wideremoter.r,�	termwidthr��horizontal_slack�	namewidth�
refidwidth�ljust�_PeerSummary__remote�_PeerSummary__common�_PeerSummary__header�polls)	r�r$rr%r&rr'r.r,rrrr�gszPeerSummary.__init__cCsrt|t�r|dkrdS|dkr&t|�S|dd}|dkrBd|S|dd}|dkr^d	|S|d
d}d|S)
z(Print an interval in natural time units.rr�i��<r�z%dm�`z%dh�r�z%dd)r�r=r;)r�rrr�prettyinterval�szPeerSummary.prettyintervalcCs*t|�|kr|Sd||dd�SdS)z8Truncate on the left using leading _ to indicate 'more'.r�r
N)rG)rR�maxlenrrr�
high_truncate�szPeerSummary.high_truncatecCsd|vod|ddvS)z;Does a set of variables look like it returned from a clock?�srchost�(rr)rrrr�is_clock�szPeerSummary.is_clockcCs�|jdkr*|jd�|j�|jd|_nZ|jdkrT|jd�|j�|jd|_n0|jdkrfd|_n|jd	�|j�|jd|_|jS)
zColumn headers for peer display�apeersz   refid   assid  r$Zopeersz       local      z  disp�rpeerszH st t when poll reach   delay   offset   jitter refid           T remotez       refid      )r$r,r+r*r-r.rrrr�header�s4

���

���

���zPeerSummary.headercCs
d|jS)zWidth of display�O)r(rrrrr��szPeerSummary.widthc3Cs0d}d}d}d}d}d}	d}
d}d}d}
d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d}d} d}!d}"d}#d}$d}%d	}&t��}'|��D�]�}(d
t|(�ks�d
t|(d�kr�q�|(\})\}*}+|)dk�r|jr�|+n|*}t|+�d
k�r�|+ddk�r�d}q�|)dk�r"d|jv�r�|+}q�|)dk�r2|*}q�|)dk�rB|*}q�|)dk�rR|*}q�|)dk�rb|*}
q�|)dk�rr|*}q�|)dk�r�|*}q�|)dk�r�|*}q�|)dk�r�|*}|dk�r�tjj}q�|)dk�r�d|jv�r�|j�r�|+n|*}	d}q�|)dk�r�|*}q�|)dk�r|*}q�|)dk�r|j�r|+n|*}
q�|)dk�r,|*}q�|)dk�rN|*}|dk�r�tjj}q�|)d k�r^|*}q�|)d!k�rn|*}q�|)d"k�r�d"|jv�r�|+}q�|)d#k�r�|*}t|'tj	�
|��}q�|)d$k�r�|*}t|'tj	�
|��}q�|)d%k�r�|*}q�|)d&k�s�|)d'k�r|j�r|+n|*}q�|)d(v�r|*}q�|)d)k�r(|*} q�|)d*k�s<|)d+k�rB|*}!q�|)d,k�rR|*}"q�|)d-k�rb|*}#q�|)d.k�rr|*}$q�|)d/k�r�|*}%q�|)d0kr�|*}&q�q�q�|tjjk�r�d1}n�|tjjk�r�|�
d2��r�d3}nd4}n�|tjjk�r2t�|��r�d5}nB|d6k�r�d7}n2|�
d2��rd8}n |&d	k�r,t|&td9��}nd:}n&|tjjk�rFd;}n|tjjk�rXd<}d},dt||�>}-|j�|-�|jtjjk�r�d=tj�|�d>@}.nd?tj�|�d@@}.|du�r^|dAk�r^|�
dB��s^|dCk�r^|jd
@�r�d)t�v�r�| �r�| }n^|jd@�rXz4|j�r |j� dD�t!|�}|j�r<|j� dE�Wnt"�yTYdS0n|}n| }|du�r||�rx|}nd}|j#dFk�r�|j$�r�t|�|j%k�r�|,dG|.|f7},|,dH|j%d
7},n"|,dI|.|j%|j%|d|j%�f7},|j#dJk�r�d>nd}/d|v�rdK|v�rd|d}|/�r:t|�|j&|/k�r:dL}0n|}0|j#dFk�r�|,|�'|0|j&�7},|j#dJk�r�|,dH|j&t|0�|/d7},|,dM|7},n|,dH|j&t|0�7},|du�r�|'}|�r�|	n|}1|j�r�dNdO�}2n|�r�dPdO�}2ndQdO�}2|,dR|"|t�(|�t�(|-�||2|�|2|
�|2|1�f7},|,dS7},|,S)TzPeer status summary line.r?rr7gFN�?�rFrr
r#�i����Tr�local�dstportrrrr�headway�hmode�hpollr$�keyidrr �pmode�ppollr�r�rr
r	rrr%)rr
r7�srcportZpeerport�stratum�mode�unreachr�
ntscookiesrz224.�M�B�lZPOOL�pr~r��ur�Sz x.-+#*orhz .+*rz0.0.0.0z127.127z::zDNS lookup begins...
zDNS lookup ends.
r;z%c%s
r&z	%c%-*.*s r:rNz...z%-6dcSs
t|t�Sr\)r�rv��xrrr�<lambda>��z%PeerSummary.summary.<locals>.<lambda>cSst|�Sr\)r�rTrrrrV�rWcSst|�Sr\)r�rTrrrrV�rWz# %2ld %c %4.4s %4.4s  %3lo %s %s %sr'))r)rrGrr.rAr�ZNTP_MINPOLLr=r�
lfptofloatZ
MODE_BCLIENTXZMODE_BROADCASTx�
startswithZMODE_CLIENTr"r9rJ�ordZMODE_ACTIVExZ
MODE_PASSIVExr�r/rIrr�r�r�r%�localsr.r,r*r�r�r$r&r)r*r6r4)3r�ZrstatusrZassocidZ
clock_nameZdstadr_refidrBZestdelayZestdispZ	estjitterZ	estoffsetrrrrZhave_jitterrCrDrErFZ	last_syncrrGrHr�Zptyper�r
r	rZsaw6rr7rIrJrKrLrrM�nowrr�rDr�lineZpoll_secr Z
assocwidthZvisibleZjdZfinirrr�summary�s�


































���

�



���zPeerSummary.summarycCs|jdd�}g|_|S)z3Return and flush the list of actual poll intervals.N)r/)r��resrrr�	intervals�szPeerSummary.intervals)r�r�r�r�rr1r��staticmethodr4r6r9r<r�r^r`rrrrr"ds �



r"c@s.eZdZdZddejfdd�ZdZdd�Zd	S)
�
MRUSummaryz0Reusable class for MRU entry summary generation.FrcCs"||_||_d|_||_||_dSr\)r.r,r\r%r&)r�r%r&r.r,rrrr��s
zMRUSummary.__init__zE lstint avgint rstr r m v  count    score   drop rport remote addresscCs�tj�|j�}tj�|j�}t||�}t|j�}|jr�t|j|d�}d|}|dkr`d}n||d}t|d�}	d|ks�d|kr�|d|	7}q�d|kr�|d|7}q�|d	|7}n(d
}
t	t|�d�\}}d||
||f}|j
tjj@r�d
}n|j
tjj
@�rd}nd}t|j�\}
}�zh|jd@�s4|
}n�t|
�}t�|�}|du�r�d}zDt�|d�}|D].\}}}}}|�rf|d|
k�rfd}�q��qfWntj�y�Yn0t�||�|�s�d|
|f}|j�s�|dd�}|j�r&t|j�}|dk�rd|}n|dk�rd|}nd|}nd}|jdk�rBd|j}nd}|d|j
|tj�|j�tj�|j�|j|||dd�|f	7}|WSt�y�YdS0dS)Ng�?z%7dr
rg@z %6dg�?z %6.2fz %6.3fi���Qz%5d %5d %6d�K�Lr7FTz%s (%s)�(r�r�r�r�r�r�z%4dz! %4hx %c %d %d %6d %8s %6s %5s %sr?)rArrX�first�lastrUr=Zctr\�divmodZrsr�ZRES_KODZRES_LIMITEDrT�addrr%r�r�rsr�r�r�r�r&ZscZdrZPKT_MODE�mvZPKT_VERSIONr0)r��entryrgrhZactiverPZlstintZstatsZfavgintZavgintZMJD_1970ZdaysZrscodeZip�portZdnsZ	confirmedr��_r�ZscoreZdroprrrr^�s�








��zMRUSummary.summaryN)	r�r�r�r�rr1r�r<r^rrrrrb�s�
rbc@s,eZdZdZdZdZedd��Zdd�ZdS)	�ReslistSummaryz4Reusable class for reslist entry summary generation.z<   hits    addr/prefix or addr mask
           restrictions
�HcsJ|sd}d|vrd}d�nd}d�t�fdd�|�|�D��}dt|�S)	Nr?rNrr7�
cs$g|]}|rtt|����d��qS)�1)�binr=rP)�.0rU��baserr�
<listcomp>-s�z.ReslistSummary.__getPrefix.<locals>.<listcomp>�/)�sumr<r;)�mask�prefixrrrurZ__getPrefix#s�zReslistSummary.__getPrefixcCs�|�dd�}|�dd�}|�dd�}|dks4|dkr8dS|t�|�7}|�dd�}d|||f}|D]}|��sd|dvrddSqd|S)	N�hitsr>rjrzr?�flagsz%10s %s
           %s
z/.: 
)rsro�_ReslistSummary__getPrefix�isalnum)r�rr|�addressrzr}rr rrrr^1szReslistSummary.summaryN)	r�r�r�r�r<r�rar~r^rrrrros

roc@s4eZdZdZdZdZdddddddd	�Zd
d�ZdS)
�IfstatsSummaryz4Reusable class for ifstats entry summary generation.z�    interface name                                  send
 #  address/broadcast     drop flag received sent failed peers   uptime
 �Jz%-24.24sz%4xz%6dz%5dr�)r�r}�rx�tx�txerr�pc�upcCs�i}z�|j��D]4}|�|d�}|dkr.|}n|j||}|||<q|�dd�rVdnd}|�dd�}|�d�}	d||d	||d
|d|d|d
|d|d|f
}
|	r�|
d|	7}
Wnty�YdS0|
D]}|��s�|dvr�dSq�|
S)Nr>�enFr7�Drj�bcastz#%3u %s %s %s %s %s %s %s %s
    %s
r�r}r�r�r�r�r�z    %s
r?z	/.:[] \%
)�fieldsrtrsr�r)r�rer�	formattedr�rDr�ZenFlagr�r�rr rrrr^Ss@

��zIfstatsSummary.summaryN)r�r�r�r�r<r�r�r^rrrrr�Cs�r�)�OrderedDictc@sBeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dS)r�zBA stupid simple implementation in order to be back-portable to 2.6NcCs.t�|�g|_|r*|D]\}}|||<qdSr\)�dictr��_OrderedDict__keys)r�r�k�vrrrr��s

zOrderedDict.__init__cCst�|||�|j�|�dSr\)r��__setitem__r�rI)r�rw�valrrrr��szOrderedDict.__setitem__cCst�||�|j�|�dSr\)r��__delitem__r��remove�r�rwrrrr��szOrderedDict.__delitem__cCs|jSr\�r�rrrrrt�szOrderedDict.keyscst�fdd��jD��S)Ncsg|]}|�|f�qSrr)rtr�rrrrw�rWz%OrderedDict.items.<locals>.<listcomp>)�tupler�rrrrr�szOrderedDict.itemsccs|jD]
}|VqdSr\r�r�rrr�__iter__�s
zOrderedDict.__iter__)N)
r�r�r�r�r�r�r�rtrr�rrrrr�~s
r�cCszt|t�sdS|dks$t|ttf�s.|ddfS||krJ|t|||�dfS|rf|t|||�ddfS|t|||�dfS)a
Given a number of packets and a duration (s) return a tuple.

    return the packet quantity, and a two part rate in packets/seconds
    or seconds/packet. On error the latter fields should be blank, the
    first the number of packets if zero otherwise unhelpful text.)�???r?r?rr?zp/sr
z/pzs/p)r�r=rUr��	periodize)Zpackets�period�
clipdigitsZ
periodizedrrr�	packetize�s

r�cCs�t|ttf�r|nd}t|ttf�s(dSd}t||�}|dkrFt|�n|}|dkrb|d|d7}|d|dd|dd	|d	f7}||fS)
z}Given a number of seconds, return number and pretty string.

    On error return None for the number and an unhelpful string.r)Nr�r?r
rcz%dD z%02d:%02d:%02dir1)r�r=rUr�)r�r�Zclipr�rnZnperiodrrrr��s


�r�cCst|�dS)Nr
)r�)rQrrrrV�rWrV)NrF)NrF)Fr)rF)r)_r�Z
__future__rr�collectionsr�r�r�r�rdrr)Zntp.ntpcrAZ	ntp.magicZntp.controlZOLD_CTL_PST_CONFIGZOLD_CTL_PST_AUTHENABLEZOLD_CTL_PST_AUTHENTICZOLD_CTL_PST_REACHr�r�r�r�r�r�rrrvr�ZUNIT_KSrZUNIT_PPTZUNIT_PPBr�rrryrrr�r�r�r/r5r6r(rErCrMrTrgrorxr|r�r�r�rqrur�rprir�r�r�r�r�r�r�r�r�r�Z	AF_UNSPECr��
namedtupler�r;r�r�r�r�r�r�r!r"rbror�r��ImportErrorr�r�r�Zuptimerrrr�<module>s�
	D"
#$

&!	
M
[^[(8