Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 1 | /* |
| 2 | * Hotspot 2.0 - OSU client |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 3 | * Copyright (c) 2013-2014, Qualcomm Atheros, Inc. |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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; |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 37 | int no_osu_cert_validation; /* for EST operations */ |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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, |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 77 | const char *pps_fname, |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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, |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 82 | const char *pps_fname, |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 83 | const char *client_cert, const char *client_key, |
| 84 | const char *cred_username, const char *cred_password, |
| 85 | xml_node_t *pps); |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 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); |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 88 | |
| 89 | |
| 90 | /* oma_dm_client.c */ |
| 91 | |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 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); |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 94 | void oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 95 | const char *pps_fname, |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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, |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 100 | const char *pps_fname, |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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, |
Dmitry Shmidt | 6cb1f65 | 2014-03-21 10:54:03 -0700 | [diff] [blame^] | 105 | const char *pps_fname); |
Dmitry Shmidt | d5dc24e | 2014-03-12 14:22:04 -0700 | [diff] [blame] | 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 */ |