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.dylibwin32z%s.dllcygwinz lib%s.dllzlib%s.so)sysplatform startswithr r ./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_pathr r r _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_versionr r r 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_bytesr r r 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_ubyter r(Zdo_macr)rrr*lenZbyref bytearray)datakeyr,Z resultlenresultr r r macLs r5cCstj|}t|dS)z&Set program name for logging purposes.N)rrr* _setprogname) in_stringr-r r r setprognameYs r8cCs2tj|}||}t}|tjkr.td|S)z&NTP l_fp to other Python-style format.zill-formed hex date)rrr*rZ get_errnoerrnoEINVAL ValueError)callbackr7r-Z out_valueerrr r r _lfp_wrap_s   r>cCst||}tj|Sz+Convert a time stamp to something readable.) _statustoarrr)Zi_typeZi_stmid_strr r r statustoais rBcCstt|}tj|Sr?)r> _prettydaterrr)r7rAr r r prettydateos rDcCs tt|S)z$NTP l_fp to Python-style float time.)r> _lfptofloat)r7r r r lfptofloatusrFcCstj|}t||dS)z)Log send a message to terminal or output.N)rrr*_msyslog)levelr7r-r r r msyslogzs rI)0__doc__Z __future__rrZ ctypes.utilr9rZos.pathrZntp.polyrrr rrr(rrr&r'r ZTYPE_SYSZ TYPE_PEERZ TYPE_CLOCKr.r5r8r>rBrDrFrIrGr)r+Zntpc_setprognamer6Zntpc_prettydaterCZntpc_lfptofloatrEZc_doubler@Zntpc_adj_systimeZ adj_systimeZc_boolZntpc_step_systimeZ step_systimer r r r s\