1/*
2 * Hotspot 2.0 - OSU client
3 * Copyright (c) 2013-2014, Qualcomm Atheros, Inc.
4 *
5 * This software may be distributed under the terms of the BSD license.
6 * See README for more details.
7 */
8
9#ifndef OSU_CLIENT_H
10#define OSU_CLIENT_H
11
12#define SPP_NS_URI "http://www.wi-fi.org/specifications/hotspot2dot0/v1.0/spp"
13
14#define URN_OMA_DM_DEVINFO "urn:oma:mo:oma-dm-devinfo:1.0"
15#define URN_OMA_DM_DEVDETAIL "urn:oma:mo:oma-dm-devdetail:1.0"
16#define URN_HS20_DEVDETAIL_EXT "urn:wfa:mo-ext:hotspot2dot0-devdetail-ext:1.0"
17#define URN_HS20_PPS "urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0"
18
19
20#define MAX_OSU_VALS 10
21
22struct osu_lang_text {
23	char lang[4];
24	char text[253];
25};
26
27struct hs20_osu_client {
28	struct xml_node_ctx *xml;
29	struct http_ctx *http;
30	int no_reconnect;
31	char pps_fname[300];
32	char *devid;
33	const char *result_file;
34	const char *summary_file;
35	const char *ifname;
36	const char *ca_fname;
37	int no_osu_cert_validation; /* for EST operations */
38	char *fqdn;
39	char *server_url;
40	struct osu_lang_text friendly_name[MAX_OSU_VALS];
41	size_t friendly_name_count;
42	size_t icon_count;
43	char icon_filename[MAX_OSU_VALS][256];
44	u8 icon_hash[MAX_OSU_VALS][32];
45	int pps_cred_set;
46	int pps_updated;
47	int client_cert_present;
48	char **server_dnsname;
49	size_t server_dnsname_count;
50#define WORKAROUND_OCSP_OPTIONAL 0x00000001
51	unsigned long int workarounds;
52};
53
54
55/* osu_client.c */
56
57void write_result(struct hs20_osu_client *ctx, const char *fmt, ...)
58	__attribute__ ((format (printf, 2, 3)));
59void write_summary(struct hs20_osu_client *ctx, const char *fmt, ...)
60	__attribute__ ((format (printf, 2, 3)));
61
62void debug_dump_node(struct hs20_osu_client *ctx, const char *title,
63		     xml_node_t *node);
64int osu_get_certificate(struct hs20_osu_client *ctx, xml_node_t *getcert);
65int hs20_add_pps_mo(struct hs20_osu_client *ctx, const char *uri,
66		    xml_node_t *add_mo, char *fname, size_t fname_len);
67void get_user_pw(struct hs20_osu_client *ctx, xml_node_t *pps,
68		 const char *alt_loc, char **user, char **pw);
69int update_pps_file(struct hs20_osu_client *ctx, const char *pps_fname,
70		    xml_node_t *pps);
71void cmd_set_pps(struct hs20_osu_client *ctx, const char *pps_fname);
72
73
74/* spp_client.c */
75
76void spp_sub_rem(struct hs20_osu_client *ctx, const char *address,
77		 const char *pps_fname,
78		 const char *client_cert, const char *client_key,
79		 const char *cred_username, const char *cred_password,
80		 xml_node_t *pps);
81void spp_pol_upd(struct hs20_osu_client *ctx, const char *address,
82		 const char *pps_fname,
83		 const char *client_cert, const char *client_key,
84		 const char *cred_username, const char *cred_password,
85		 xml_node_t *pps);
86int cmd_prov(struct hs20_osu_client *ctx, const char *url);
87int cmd_sim_prov(struct hs20_osu_client *ctx, const char *url);
88
89
90/* oma_dm_client.c */
91
92int cmd_oma_dm_prov(struct hs20_osu_client *ctx, const char *url);
93int cmd_oma_dm_sim_prov(struct hs20_osu_client *ctx, const char *url);
94void oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address,
95		    const char *pps_fname,
96		    const char *client_cert, const char *client_key,
97		    const char *cred_username, const char *cred_password,
98		    xml_node_t *pps);
99void oma_dm_pol_upd(struct hs20_osu_client *ctx, const char *address,
100		    const char *pps_fname,
101		    const char *client_cert, const char *client_key,
102		    const char *cred_username, const char *cred_password,
103		    xml_node_t *pps);
104void cmd_oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address,
105			const char *pps_fname);
106void cmd_oma_dm_add(struct hs20_osu_client *ctx, const char *pps_fname,
107		    const char *add_fname);
108void cmd_oma_dm_replace(struct hs20_osu_client *ctx, const char *pps_fname,
109			const char *replace_fname);
110
111/* est.c */
112
113int est_load_cacerts(struct hs20_osu_client *ctx, const char *url);
114int est_build_csr(struct hs20_osu_client *ctx, const char *url);
115int est_simple_enroll(struct hs20_osu_client *ctx, const char *url,
116		      const char *user, const char *pw);
117
118#endif /* OSU_CLIENT_H */
119