a \dh@sdZddlmZddlZddlZddlZddlZddlZddlZddl Z dZ ddZ ddZ d d Ze Zejed Zejed jZejed jZejedjZddZddZddZddZddZddZddZddZejZ de _!ejejge _"ej#Z$de$_!ejge$_"ej%Z&eje&_!ejge&_"ej'Z(ej)e(_!ejge(_"ejZ*eje*_!ejejge*_"ej+Z,ej-e,_!ej)ge,_"ej.Z/ej-e/_!ej)ge/_"dS)z#Access libntp funtions from Python.)absolute_importNZntpccCs4tjdrdStjdr dStjdr0dSdS)zProduce library naming scheme.darwinz lib%s.dylibZwin32z%s.dllcygwinz lib%s.dllzlib%s.so)sysplatform startswithrr./usr/lib64/python3.9/site-packages/ntp/ntpc.py_fmts   r cCsXg}ttjdd}|tj|ttgtj t}|rP||t |S)z1Load the ntpc library or throw an OSError trying.N) __file__splitossepappendjoinr LIBctypesutilZ find_library_dlo)Z ntpc_pathsj ntpc_pathrrr _importados  rc Cs~|D]h}zPtj|dd}d}tjtj|dj}||krPtj d||f|WSt yjYq0qt dt dS)z Try opening library from a list.T)Z use_errnoz1.2.2aversionz$ntp.ntpc wrong version '%s' != '%s' zCan't find %s libraryN) rZCDLLntppolypolystrc_char_pin_dllvaluerstderrwriteOSErrorr)pathsrlibZ wrap_versionZ clib_versionrrr r)s  rprognameZSYS_TYPEZ PEER_TYPEZ CLOCK_TYPEcCs,tjtj_tj|}tjgtj_ t|S)z(Check if name is a valid algorithm name.) rc_int_ntpcZ do_checknamerestyperr polybytesrargtypes)name mid_bytesrrr checknameDs   r-c Cs~t}tjd}d|_dtj_ttj |tj |t |tj |t |t |t |tj t |d|jS)z8Compute HMAC or CMAC from data, key, and algorithm name.@s@N) rZc_size_tZc_ubyterr'Zdo_macr(rrr)lenZbyref bytearray)datakeyr+Z resultlenresultrrr macLs r4cCstj|}t|dS)z&Set program name for logging purposes.N)rrr) _setprogname) in_stringr,rrr setprognameYs r7cCs2tj|}||}t}|tjkr.td|S)z&NTP l_fp to other Python-style format.zill-formed hex date)rrr)rZ get_errnoerrnoZEINVAL ValueError)callbackr6r,Z out_valueerrrrr _lfp_wrap_s   r<cCst||}tj|Sz+Convert a time stamp to something readable.) _statustoarrr)Zi_typeZi_stmid_strrrr statustoais r@cCstt|}tj|Sr=)r< _prettydaterrr)r6r?rrr prettydateos rBcCs tt|S)z$NTP l_fp to Python-style float time.)r< _lfptofloat)r6rrr lfptofloatusrDcCstj|}t||dS)z)Log send a message to terminal or output.N)rrr)_msyslog)levelr6r,rrr msyslogzs rG)0__doc__Z __future__rrZ ctypes.utilr8rZos.pathrZntp.polyrrr rrr'rrr%r&rZTYPE_SYSZ TYPE_PEERZ TYPE_CLOCKr-r4r7r<r@rBrDrGrEr(r*Zntpc_setprognamer5Zntpc_prettydaterAZntpc_lfptofloatrCZc_doubler>Zntpc_adj_systimeZ adj_systimeZc_boolZntpc_step_systimeZ step_systimerrrr s\