
    l
j                         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mZmZm	Z	 d dl
Z
d dlZdad Z G d de	j                        Zy)    N)GLibGioGObjectc                  .    t         
t               a t         S N)network_monitorNetworkMonitor     )/usr/libexec/warpinator/networkmonitor.pyget_network_monitorr      s     (*r   c                       e Zd Zdej                  j
                  deffiZd ZddZ	d Z
d Zd ZddZd	 Zd
 Zd Zd Zd Zd Zd Zd Zy)r	   state-changedNc                     t         j                  j                  |        d| _        d | _        d | _        d | _        d| _        t        j                  j                  d| j                         y )NFr   changed)r   Object__init__online
current_ipcurrent_iface_settingcurrent_ip_infotimer_idprefsprefs_settingsconnecton_prefs_changedselfs    r   r   zNetworkMonitor.__init__   sU    %%)"#$$Y0E0EFr   c                 N    |dvry | j                          | j                          y )N)zpreferred-network-ifaceportzreg-port)stopstart)r   settingskeydatas       r   r   zNetworkMonitor.on_prefs_changed*   s&     # # 		

r   c                     t        j                  d       | j                          t        j                  d| j
                        | _        y )NzStarting network monitor   )loggingdebug_update_onliner   timeout_add_seconds_check_statusr   r   s    r   r"   zNetworkMonitor.start3   s5    0100D4F4FGr   c                     t        j                  d       | j                  dkD  r't        j                  | j                         d| _        y y )NzStopping network monitorr   )r(   r)   r   r   source_remover   s    r   r!   zNetworkMonitor.stop9   s9    01==1t}}-DM r   c                     | j                   S r   )r   r   s    r   get_current_ip_infoz"NetworkMonitor.get_current_ip_info?   s    ###r   c                 B    | j                          t        j                  S r   )r*   r   SOURCE_CONTINUE)r   r%   s     r   r,   zNetworkMonitor._check_statusB   s    ###r   c                    t        j                         }d }d}| j                         }|dk(  r t        |      dkD  r| j	                         }d}|D ]  }|j
                  |k(  s|}d} |t        j                  ddiddi|      }|| j                  k7  s| j                  |k7  s| j                  |k7  r&|| _	        || _        || _
        | j                          y y )NFautor   Taddr0.0.0.0[::])r   get_preferred_ifaceget_valid_interface_infoslenget_default_interface_infoifaceutilInterfaceInfor   r   r   emit_state_changed)r   new_iface_settingnew_ip_info
new_online	availableinfos         r   r*   zNetworkMonitor._update_onlineG   s    !557
224	&3y>A+=99;KJ 	"Dzz.."!
	"
 ,,vy-BffDVXijK$(<(<(KtOiOim~O~#.D $DK):D&##%	 Pr   c                 l   g }t        j                         D ]x  }|dk(  r	t        j                  |      }	 |t         j                     d   }	 |t         j
                     d   }||Qt        j                  |||      }|j                  |       z |S # t        $ r d }Y Uw xY w# t        $ r d }Y Ow xY w)Nlor   )		netifaces
interfacesifaddressesAF_INETKeyErrorAF_INET6r=   r>   append)r   validinamer<   ip4ip6rD   s          r   r9   z(NetworkMonitor.get_valid_interface_infos_   s    ))+ 	#E}))%0EI--.q1I../2 #/))#sE:T"#	#&     s#   BB%B"!B"%B32B3c                     | j                         }| j                         }d }| j                         D ]5  }||}	 ||j                  d   k(  r|c S 	 	 ||j                  d   k(  r|c S 7 |S #  Y xY w#  Y ExY w)Nr5   )get_default_ip4get_default_ip6r9   rP   rQ   )r   rP   rQ   fallback_inforD   s        r   r;   z)NetworkMonitor.get_default_interface_infov   s    ""$""$224 	D$ $$((6**K +$((6**K +	 s   A-A4-A14A8c                    t        j                   |t         j                        5 }|t         j                  k(  r	 |j                  d       n	 |j                  d       |j                         d   }|cd d d        S # t        $ r}Y d }~d d d        yd }~ww xY w# t        $ r}Y d }~d d d        yd }~ww xY w# 1 sw Y   y xY w)N)z8.8.8.8P   r6   )z2001:4860:4860::8888rW   r7   r   )socket
SOCK_DGRAMrJ   r   OSErrorgetsockname)r   
ip_versionseanss        r   get_default_ipzNetworkMonitor.get_default_ip   s    ]]:v'8'89 	QV^^+%IIo.
"II:; --/!$C	 	  %$	 	%  "!	 	"	 	sR   B8A<B8BB8<	BB8BB8	B5#B80B55B88Cc                 @    | j                  t        j                        S r   )r`   rX   rJ   r   s    r   rS   zNetworkMonitor.get_default_ip4   s    ""6>>22r   c                 @    | j                  t        j                        S r   )r`   rX   rL   r   s    r   rT   zNetworkMonitor.get_default_ip6   s    ""6??33r   c                     t        j                  dt        | j                        z         | j	                  d| j                         y )Nz"Network state changed: online = %sr   )r(   r)   strr   emitr   s    r   r?   z!NetworkMonitor.emit_state_changed   s/    :S=MMN		/4;;/r   c                 8   | j                   j                  |j                  t        j                  | j                   j                  d| j                   j                  d         }|j
                  }|y|j                  j                  dk(  rt        j                  d       yt        |j                               D ]  }|j                  |j                  k(  s y y| j                   j                  |j                  yt        j                  d| z         y)N/netmaskTz255.255.255.255z9Discovery: netmask is 255.255.255.255 - are you on a vpn?FzNo IP address found: %s)r   ip4_address	ipaddressIPv4InterfacerP   networkrh   explodedr(   warninglisthostsip6_addressr)   )r   other_ip_infor<   my_netr5   s        r   same_subnetzNetworkMonitor.same_subnet   s    ++7M<U<U<a++t7K7K7W7W484H4H4L4LY4W-Y ZE ]]F~~~&&*;; [\V\\^,   ,,=  ++7M<U<U<a/489r   r   )__name__
__module____qualname__r   SignalFlagsRUN_LASTbool__gsignals__r   r   r"   r!   r0   r,   r*   r9   r;   r`   rS   rT   r?   rt   r
   r   r   r	   r	      sk    '--66tgFL
GH$$
&0.*"340
r   r	   )	threadingr(   rG   rj   rX   gigi.repositoryr   r   r   r   r=   r   r   r   r	   r
   r   r   <module>r      sA         	 , ,  eW^^ er   