Home | History | Annotate | Download | only in client
      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 
     22 struct osu_lang_text {
     23 	char lang[4];
     24 	char text[253];
     25 };
     26 
     27 struct 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 
     57 void write_result(struct hs20_osu_client *ctx, const char *fmt, ...)
     58 	__attribute__ ((format (printf, 2, 3)));
     59 void write_summary(struct hs20_osu_client *ctx, const char *fmt, ...)
     60 	__attribute__ ((format (printf, 2, 3)));
     61 
     62 void debug_dump_node(struct hs20_osu_client *ctx, const char *title,
     63 		     xml_node_t *node);
     64 int osu_get_certificate(struct hs20_osu_client *ctx, xml_node_t *getcert);
     65 int hs20_add_pps_mo(struct hs20_osu_client *ctx, const char *uri,
     66 		    xml_node_t *add_mo, char *fname, size_t fname_len);
     67 void get_user_pw(struct hs20_osu_client *ctx, xml_node_t *pps,
     68 		 const char *alt_loc, char **user, char **pw);
     69 int update_pps_file(struct hs20_osu_client *ctx, const char *pps_fname,
     70 		    xml_node_t *pps);
     71 void cmd_set_pps(struct hs20_osu_client *ctx, const char *pps_fname);
     72 
     73 
     74 /* spp_client.c */
     75 
     76 void 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);
     81 void 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);
     86 int cmd_prov(struct hs20_osu_client *ctx, const char *url);
     87 int cmd_sim_prov(struct hs20_osu_client *ctx, const char *url);
     88 
     89 
     90 /* oma_dm_client.c */
     91 
     92 int cmd_oma_dm_prov(struct hs20_osu_client *ctx, const char *url);
     93 int cmd_oma_dm_sim_prov(struct hs20_osu_client *ctx, const char *url);
     94 void 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);
     99 void 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);
    104 void cmd_oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address,
    105 			const char *pps_fname);
    106 void cmd_oma_dm_add(struct hs20_osu_client *ctx, const char *pps_fname,
    107 		    const char *add_fname);
    108 void cmd_oma_dm_replace(struct hs20_osu_client *ctx, const char *pps_fname,
    109 			const char *replace_fname);
    110 
    111 /* est.c */
    112 
    113 int est_load_cacerts(struct hs20_osu_client *ctx, const char *url);
    114 int est_build_csr(struct hs20_osu_client *ctx, const char *url);
    115 int 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