3 h>`@sddlmZddlZddlZejd kr.ddlZddlmZddl Z ddl Z ddl Z ddl ZddlZddlZddlZddlZddlZddlmZmZddlmZmZddlmZddlmZdd lmZm Z d gZ!Gd d d eeeejZ"dS) )absolute_importN)GObject)parse_config_setting get_config) RpcChannelConnectionState)SETroubleshootServerInterface)SETroubleshootDatabaseInterface)Retryget_error_from_socket_exceptionServerConnectionHandlerc @seZdZejjdejffejjdejejejejffejjdejejffejjdejejffejjdejejejffdZ ddZ ddZ dddZ d d Z d d Zd dZddZddZddZddZddZdS)r N)alertconnection_state_changedsignatures_updated database_bindz async-errorcCstj|ddtjj||jjd|j|jd||jd|tdd|_tdd|_ ||_ d |_ t |j |jd d |_d |_d |_dS)NZsealert) channel_typeZchangedZSEAlertZSETroubleshootDatabaseNotifyZgeneral pkg_version rpc_versionFg?)Znotify_intervalTZaudit_listener)r__init__rconnection_stateconnecton_connection_state_changeZconnect_rpc_interfacerrrusernameretry_connection_if_closedr retry_connectionget_connection_retry_intervalconnection_retryreport_connect_failure database_name)selfrr!&/usr/lib/python3.6/serverconnection.pyr0s     z ServerConnectionHandler.__init__cCsZ|jd|||||tj@s,|tjtjB@rV|jrV|tj@ rV|jjtj|j j dS)Nr) emitrOPENHUPERRORrRETRYrupdaterstart)r rflagsZ flags_addedZ flags_removedr!r!r"r@s z2ServerConnectionHandler.on_connection_state_changecCsD|dk r||_|jjtj@r dSy|jjtjtjtjBtj |jj |jj |j_ t j |jj j t jt j|jj j|jj|j|j|jjtjtjtjB|jjd|_|jWntjk r>}z`t|\}}|jdkrtjtjd|d|_|tjkrtj}ntj}|j |tj||dSd}~XnXdS)NTz,attempt to open server connection failed: %sF)!socket_addressrr*rr$r(Z CONNECTINGr&SocketsocketZfamilytypefcntlfilenoZF_SETFDZ FD_CLOEXECrZget_py_addressZ io_watch_addZhandle_client_ior'rstoprdo_logonerrorr syslogLOG_ERRErrnoZEPIPEr%Zclose_connection)r r+eerrnostrerror add_flagsr!r!r"openPs2      zServerConnectionHandler.opencCs|j|jrdSdSdS)NTF)r;r+)r retry user_datar!r!r"ros z(ServerConnectionHandler.retry_connectioncCs|jdkrdSdSdS)N <)Zfailed_attempts)r r<r=r!r!r"rus z5ServerConnectionHandler.get_connection_retry_intervalcCs,tjtjd|||f|jd|||dS)Nz#async_error: method=%s errno=%s: %sz async-error)r4r5r#)r methodr8r9r!r!r"async_error_callback{sz,ServerConnectionHandler.async_error_callbackcs2fdd}jj}|j||jjdS)Ncsjd|dS)Nr)r#)Z properties)r r!r"database_bind_callbacksz.database_bind_callback)rr add_callback add_errbackrB)r rC async_rpcr!)r r"binds   zServerConnectionHandler.bindcs@fdd}j_jjjd}|j||jjdS)NcsjjtjdS)N)rr(rZ AUTHENTICATED)rr)r r!r"logon_callbacksz8ServerConnectionHandler.do_logon..logon_callbackZpasswd)rZ channel_nameZlogonrrDrErB)r rHrFr!)r r"r2s   z ServerConnectionHandler.do_logoncCs"tj|||||}|j|jdS)N)r set_filterrErB)r ZsiguserZ filter_typedatarFr!r!r"rIsz"ServerConnectionHandler.set_filtercCs|jd|dS)Nr)r#)r Zsiginfor!r!r"rszServerConnectionHandler.alertcCs|jd||dS)Nr)r#)r r.itemr!r!r"rsz*ServerConnectionHandler.signatures_updated)N)__name__ __module__ __qualname__rZ SignalFlagsZRUN_LASTZ TYPE_PYOBJECTZTYPE_INTZ TYPE_STRINGZ __gsignals__rrr;rrrBrGr2rIrrr!r!r!r"r s   )r)#Z __future__rr4sys version_infoZ$setroubleshoot.default_encoding_utf8ZsetroubleshootZ gi.repositoryrr8r6gettextosZsix.moves.queueZsixresignalZselinuxr-r,r/Zsetroubleshoot.configrrZsetroubleshoot.rpcrrZsetroubleshoot.rpc_interfacesr r Zsetroubleshoot.utilr r __all__r r!r!r!r"s0