ó
Ý#2Nc           @   sù   d  Z  d Z d Z d Z d Z d d l m Z m Z m Z d d l	 m
 Z
 d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z d d l Z e j d	 ƒ Z d
 e j f d „  ƒ  YZ d e j f d „  ƒ  YZ d e f d „  ƒ  YZ d S(   s   Cyril Jaquiers   $Revision: 567 $s5   $Date: 2007-03-26 23:17:31 +0200 (Mon, 26 Mar 2007) $s    Copyright (c) 2004 Cyril Jaquiert   GPLiÿÿÿÿ(   t   dumpst   loadst   HIGHEST_PROTOCOL(   t   helpersNs   fail2ban.servert   RequestHandlerc           B   s2   e  Z d  Z d „  Z d „  Z d „  Z d „  Z RS(   s   <F2B_END_COMMAND>c         C   s9   t  j j |  | ƒ | |  _ g  |  _ |  j t j ƒ d  S(   N(   t   asynchatt
   async_chatt   __init__t   _RequestHandler__transmittert   _RequestHandler__buffert   set_terminatorR   t
   END_STRING(   t   selft   connt   transmitter(    (    s)   /usr/share/fail2ban/server/asyncserver.pyR   ,   s    		c         C   s   |  j  j | ƒ d  S(   N(   R
   t   append(   R   t   data(    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   collect_incoming_data3   s    c         C   s[   t  d j |  j ƒ ƒ } |  j j | ƒ } t | t ƒ } |  j | t j	 ƒ |  j
 ƒ  d  S(   Nt    (   R   t   joinR
   R	   t   proceedR   R   t   sendR   R   t   close_when_done(   R   t   message(    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   found_terminator<   s
    c         C   sJ   t  j ƒ  \ } } t j d | ƒ t j t j ƒ  j ƒ  ƒ |  j ƒ  d  S(   Ns    Unexpected communication error: (   R   t   formatExceptionInfot   logSyst   errort	   tracebackt
   format_exct
   splitlinest   close(   R   t   e1t   e2(    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   handle_errorH   s    (   t   __name__t
   __module__R   R   R   R   R#   (    (    (    s)   /usr/share/fail2ban/server/asyncserver.pyR   (   s
   				t   AsyncServerc           B   s5   e  Z d  „  Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s/   t  j j |  ƒ | |  _ d |  _ t |  _ d  S(   Ns   /var/run/fail2ban/fail2ban.sock(   t   asyncoret
   dispatcherR   t   _AsyncServer__transmittert   _AsyncServer__sockt   Falset   _AsyncServer__init(   R   R   (    (    s)   /usr/share/fail2ban/server/asyncserver.pyR   V   s    		c         C   s   t  S(   N(   R+   (   R   (    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   writable_   s    c         C   sm   y |  j  ƒ  \ } } Wn@ t j k
 r: t j d ƒ d  St k
 rX t j d ƒ d  SXt | |  j ƒ d  S(   Ns   Socket errors
   Type error(   t   acceptt   socketR   R   t   warningt	   TypeErrorR   R)   (   R   R   t   addr(    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   handle_acceptb   s    c         C   s  | |  _  t j j | ƒ rZ t j d ƒ | rK t j d ƒ t j | ƒ qZ t d ƒ ‚ n  |  j	 t
 j t
 j ƒ |  j ƒ  y |  j | ƒ Wn$ t k
 r± t d |  j  ƒ ‚ n X|  j d ƒ t |  _ t j d k r÷ t j d ƒ t j d	 t ƒ n t j d
 ƒ t j d	 t ƒ d  S(   Ns$   Fail2ban seems to be already runnings   Forcing execution of the servers   Server already runnings   Unable to bind socket %si   i   i   s>   Detected Python 2.6 or greater. asyncore.loop() not using pollt   use_polls/   NOT Python 2.6/3.* - asyncore.loop() using poll(   i   i   (   R*   t   ost   patht   existsR   R   t   warnt   removet   AsyncServerExceptiont   create_socketR/   t   AF_UNIXt   SOCK_STREAMt   set_reuse_addrt   bindt	   Exceptiont   listent   TrueR,   t   syst   version_infot   debugR'   t   loopR+   (   R   t   sockt   force(    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   startu   s(    	
	c         C   sc   |  j  r |  j ƒ  n  t j j |  j ƒ rR t j d |  j ƒ t j |  j ƒ n  t j d ƒ d  S(   Ns   Removed socket file s   Socket shutdown(	   R,   R    R5   R6   R7   R*   R   RE   R9   (   R   (    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   stop•   s    	(   R$   R%   R   R-   R3   RI   RJ   (    (    (    s)   /usr/share/fail2ban/server/asyncserver.pyR&   T   s
   					 R:   c           B   s   e  Z RS(    (   R$   R%   (    (    (    s)   /usr/share/fail2ban/server/asyncserver.pyR:   £   s   (   t
   __author__t   __version__t   __date__t   __copyright__t   __license__t   pickleR   R   R   t   commonR   R'   R   R/   R5   t   loggingRC   R   t	   getLoggerR   R   R   R(   R&   R@   R:   (    (    (    s)   /usr/share/fail2ban/server/asyncserver.pyt   <module>   s   T,O