/*
 *
 *  Connection Manager
 *
 *  Copyright (C) 2007-2009  Intel Corporation. All rights reserved.
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License version 2 as
 *  published by the Free Software Foundation.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */

#ifndef __CONNMAN_WIFI_H
#define __CONNMAN_WIFI_H

#ifdef __cplusplus
extern "C" {
#endif

char *connman_wifi_build_group_name(const unsigned char *ssid,
						unsigned int ssid_len,
							const char *mode,
							const char *security);
char *connman_wifi_build_group(const char *addr, const char *name,
			const unsigned char *ssid, unsigned int ssid_len,
					const char *mode, const char *security);

void connman_wifi_append_hidden_ssids(GSList **hidden_ssids);

#define	CONNMAN_WIFI_AUTHMODE  "WiFi.AuthMode"
#define	CONNMAN_WIFI_BSSID  "WiFi.BSSID"

#define CONNMAN_WIFI_EAP_IDENTITY "WiFi.EAP.Identity"
#define CONNMAN_WIFI_EAP_EAP "WiFi.EAP.EAP"
#define CONNMAN_WIFI_EAP_INNEREAP "WiFi.EAP.InnerEAP"
#define CONNMAN_WIFI_EAP_ANONYMOUSIDENTITY "WiFi.EAP.AnonymousIdentity"
#define CONNMAN_WIFI_EAP_CLIENTCERT "WiFi.EAP.ClientCert"
#define CONNMAN_WIFI_EAP_CERTID "WiFi.EAP.CertID"
#define CONNMAN_WIFI_EAP_PRIVATEKEY "WiFi.EAP.PrivateKey"
#define CONNMAN_WIFI_EAP_PRIVATEKEYPASSWORD "WiFi.EAP.PrivateKeyPassword"
#define CONNMAN_WIFI_EAP_KEYID "WiFi.EAP.KeyID"
#define CONNMAN_WIFI_EAP_CACERT "WiFi.EAP.CACert"
#define CONNMAN_WIFI_EAP_CACERTID "WiFi.EAP.CACertID"
#define CONNMAN_WIFI_EAP_CACERTNSS "WiFi.EAP.CACertNSS"
#define CONNMAN_WIFI_EAP_USESYSTEMCAS "WiFi.EAP.UseSystemCAS"
#define CONNMAN_WIFI_EAP_PIN "WiFi.EAP.PIN"
#define CONNMAN_WIFI_EAP_PASSWORD "WiFi.EAP.Password"
#define CONNMAN_WIFI_EAP_KEY_MGMT "WiFi.EAP.KeyMgmt"

/* NB: we pass directly to wpa_supplicant who requires upper case */
#define	CONNMAN_WIFI_EAP_KEY_MGMT_1X  "IEEE8021X"

#ifdef __cplusplus
}
#endif

#endif /* __CONNMAN_WIFI_H */
