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 const char *osu_ssid; /* Enforced OSU_SSID for testing purposes */ 51 #define WORKAROUND_OCSP_OPTIONAL 0x00000001 52 unsigned long int workarounds; 53 }; 54 55 56 /* osu_client.c */ 57 58 void write_result(struct hs20_osu_client *ctx, const char *fmt, ...) 59 __attribute__ ((format (printf, 2, 3))); 60 void write_summary(struct hs20_osu_client *ctx, const char *fmt, ...) 61 __attribute__ ((format (printf, 2, 3))); 62 63 void debug_dump_node(struct hs20_osu_client *ctx, const char *title, 64 xml_node_t *node); 65 int osu_get_certificate(struct hs20_osu_client *ctx, xml_node_t *getcert); 66 int hs20_add_pps_mo(struct hs20_osu_client *ctx, const char *uri, 67 xml_node_t *add_mo, char *fname, size_t fname_len); 68 void get_user_pw(struct hs20_osu_client *ctx, xml_node_t *pps, 69 const char *alt_loc, char **user, char **pw); 70 int update_pps_file(struct hs20_osu_client *ctx, const char *pps_fname, 71 xml_node_t *pps); 72 void cmd_set_pps(struct hs20_osu_client *ctx, const char *pps_fname); 73 74 75 /* spp_client.c */ 76 77 void spp_sub_rem(struct hs20_osu_client *ctx, const char *address, 78 const char *pps_fname, 79 const char *client_cert, const char *client_key, 80 const char *cred_username, const char *cred_password, 81 xml_node_t *pps); 82 void spp_pol_upd(struct hs20_osu_client *ctx, const char *address, 83 const char *pps_fname, 84 const char *client_cert, const char *client_key, 85 const char *cred_username, const char *cred_password, 86 xml_node_t *pps); 87 int cmd_prov(struct hs20_osu_client *ctx, const char *url); 88 int cmd_sim_prov(struct hs20_osu_client *ctx, const char *url); 89 90 91 /* oma_dm_client.c */ 92 93 int cmd_oma_dm_prov(struct hs20_osu_client *ctx, const char *url); 94 int cmd_oma_dm_sim_prov(struct hs20_osu_client *ctx, const char *url); 95 void oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 96 const char *pps_fname, 97 const char *client_cert, const char *client_key, 98 const char *cred_username, const char *cred_password, 99 xml_node_t *pps); 100 void oma_dm_pol_upd(struct hs20_osu_client *ctx, const char *address, 101 const char *pps_fname, 102 const char *client_cert, const char *client_key, 103 const char *cred_username, const char *cred_password, 104 xml_node_t *pps); 105 void cmd_oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 106 const char *pps_fname); 107 void cmd_oma_dm_add(struct hs20_osu_client *ctx, const char *pps_fname, 108 const char *add_fname); 109 void cmd_oma_dm_replace(struct hs20_osu_client *ctx, const char *pps_fname, 110 const char *replace_fname); 111 112 /* est.c */ 113 114 int est_load_cacerts(struct hs20_osu_client *ctx, const char *url); 115 int est_build_csr(struct hs20_osu_client *ctx, const char *url); 116 int est_simple_enroll(struct hs20_osu_client *ctx, const char *url, 117 const char *user, const char *pw); 118 119 #endif /* OSU_CLIENT_H */ 120