1#!/usr/bin/env python3.4
2#
3#   Copyright 2016 - Google
4#
5#   Licensed under the Apache License, Version 2.0 (the "License");
6#   you may not use this file except in compliance with the License.
7#   You may obtain a copy of the License at
8#
9#       http://www.apache.org/licenses/LICENSE-2.0
10#
11#   Unless required by applicable law or agreed to in writing, software
12#   distributed under the License is distributed on an "AS IS" BASIS,
13#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14#   See the License for the specific language governing permissions and
15#   limitations under the License.
16
17import enum
18
19######################################################
20# ConnectivityManager.NetworkCallback events
21######################################################
22EVENT_NETWORK_CALLBACK = "NetworkCallback"
23
24# event types
25NETWORK_CB_PRE_CHECK = "PreCheck"
26NETWORK_CB_AVAILABLE = "Available"
27NETWORK_CB_LOSING = "Losing"
28NETWORK_CB_LOST = "Lost"
29NETWORK_CB_UNAVAILABLE = "Unavailable"
30NETWORK_CB_CAPABILITIES_CHANGED = "CapabilitiesChanged"
31NETWORK_CB_SUSPENDED = "Suspended"
32NETWORK_CB_RESUMED = "Resumed"
33NETWORK_CB_LINK_PROPERTIES_CHANGED = "LinkPropertiesChanged"
34NETWORK_CB_INVALID = "Invalid"
35
36# event data keys
37NETWORK_CB_KEY_ID = "id"
38NETWORK_CB_KEY_EVENT = "networkCallbackEvent"
39NETWORK_CB_KEY_MAX_MS_TO_LIVE = "maxMsToLive"
40NETWORK_CB_KEY_RSSI = "rssi"
41NETWORK_CB_KEY_INTERFACE_NAME = "interfaceName"
42NETWORK_CB_KEY_CREATE_TS = "creation_timestamp"
43NETWORK_CB_KEY_CURRENT_TS = "current_timestamp"
44
45# Constants for VPN connection status
46VPN_STATE_DISCONNECTED = 0
47VPN_STATE_INITIALIZING = 1
48VPN_STATE_CONNECTING = 2
49VPN_STATE_CONNECTED = 3
50VPN_STATE_TIMEOUT = 4
51VPN_STATE_FAILED = 5
52# TODO gmoturu: determine the exact timeout value
53# This is a random value as of now
54VPN_TIMEOUT = 15
55
56# Connectiivty Manager constants
57TYPE_MOBILE = 0
58TYPE_WIFI = 1
59
60# Multipath preference constants
61MULTIPATH_PREFERENCE_NONE = 0
62MULTIPATH_PREFERENCE_HANDOVER = 1 << 0
63MULTIPATH_PREFERENCE_RELIABILITY = 1 << 1
64MULTIPATH_PREFERENCE_PERFORMANCE = 1 << 2
65
66# IpSec constants
67SOCK_STREAM = 1
68SOCK_DGRAM = 2
69AF_INET = 2
70AF_INET6 = 10
71DIRECTION_IN = 0
72DIRECTION_OUT = 1
73MODE_TRANSPORT = 0
74MODE_TUNNEL = 1
75CRYPT_NULL = "ecb(cipher_null)"
76CRYPT_AES_CBC = "cbc(aes)"
77AUTH_HMAC_MD5 = "hmac(md5)"
78AUTH_HMAC_SHA1 = "hmac(sha1)"
79AUTH_HMAC_SHA256 = "hmac(sha256)"
80AUTH_HMAC_SHA384 = "hmac(sha384)"
81AUTH_HMAC_SHA512 = "hmac(sha512)"
82AUTH_CRYPT_AES_GCM = "rfc4106(gcm(aes))"
83
84# Constants for VpnProfile
85class VpnProfile(object):
86    """ This class contains all the possible
87        parameters required for VPN connection
88    """
89    NAME = "name"
90    TYPE = "type"
91    SERVER = "server"
92    USER = "username"
93    PWD = "password"
94    DNS = "dnsServers"
95    SEARCH_DOMAINS = "searchDomains"
96    ROUTES = "routes"
97    MPPE = "mppe"
98    L2TP_SECRET = "l2tpSecret"
99    IPSEC_ID = "ipsecIdentifier"
100    IPSEC_SECRET = "ipsecSecret"
101    IPSEC_USER_CERT = "ipsecUserCert"
102    IPSEC_CA_CERT = "ipsecCaCert"
103    IPSEC_SERVER_CERT = "ipsecServerCert"
104
105# Enums for VPN profile types
106class VpnProfileType(enum.Enum):
107    """ Integer constant for each type of VPN
108    """
109    PPTP = 0
110    L2TP_IPSEC_PSK = 1
111    L2TP_IPSEC_RSA = 2
112    IPSEC_XAUTH_PSK = 3
113    IPSEC_XAUTH_RSA = 4
114    IPSEC_HYBRID_RSA = 5
115
116# Constants for config file
117class VpnReqParams(object):
118    """ Config file parameters required for
119        VPN connection
120    """
121    wifi_network = "wifi_network"
122    vpn_server_addresses = "vpn_server_addresses"
123    vpn_verify_address = "vpn_verify_address"
124    vpn_username = "vpn_username"
125    vpn_password = "vpn_password"
126    psk_secret = "psk_secret"
127    client_pkcs_file_name = "client_pkcs_file_name"
128    cert_path_vpnserver = "cert_path_vpnserver"
129    cert_password = "cert_password"
130    pptp_mppe = "pptp_mppe"
131    ipsec_server_type = "ipsec_server_type"
132