1281681Srpaulo/* 2281681Srpaulo * Hotspot 2.0 - OSU client 3281681Srpaulo * Copyright (c) 2013-2014, Qualcomm Atheros, Inc. 4281681Srpaulo * 5281681Srpaulo * This software may be distributed under the terms of the BSD license. 6281681Srpaulo * See README for more details. 7281681Srpaulo */ 8281681Srpaulo 9281681Srpaulo#ifndef OSU_CLIENT_H 10281681Srpaulo#define OSU_CLIENT_H 11281681Srpaulo 12281681Srpaulo#define SPP_NS_URI "http://www.wi-fi.org/specifications/hotspot2dot0/v1.0/spp" 13281681Srpaulo 14281681Srpaulo#define URN_OMA_DM_DEVINFO "urn:oma:mo:oma-dm-devinfo:1.0" 15281681Srpaulo#define URN_OMA_DM_DEVDETAIL "urn:oma:mo:oma-dm-devdetail:1.0" 16281681Srpaulo#define URN_HS20_DEVDETAIL_EXT "urn:wfa:mo-ext:hotspot2dot0-devdetail-ext:1.0" 17281681Srpaulo#define URN_HS20_PPS "urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0" 18281681Srpaulo 19281681Srpaulo 20281681Srpaulo#define MAX_OSU_VALS 10 21281681Srpaulo 22281681Srpaulostruct osu_lang_text { 23281681Srpaulo char lang[4]; 24281681Srpaulo char text[253]; 25281681Srpaulo}; 26281681Srpaulo 27281681Srpaulostruct hs20_osu_client { 28281681Srpaulo struct xml_node_ctx *xml; 29281681Srpaulo struct http_ctx *http; 30281681Srpaulo int no_reconnect; 31281681Srpaulo char pps_fname[300]; 32281681Srpaulo char *devid; 33281681Srpaulo const char *result_file; 34281681Srpaulo const char *summary_file; 35281681Srpaulo const char *ifname; 36281681Srpaulo const char *ca_fname; 37281681Srpaulo int no_osu_cert_validation; /* for EST operations */ 38281681Srpaulo char *fqdn; 39281681Srpaulo char *server_url; 40281681Srpaulo struct osu_lang_text friendly_name[MAX_OSU_VALS]; 41281681Srpaulo size_t friendly_name_count; 42281681Srpaulo size_t icon_count; 43281681Srpaulo char icon_filename[MAX_OSU_VALS][256]; 44281681Srpaulo u8 icon_hash[MAX_OSU_VALS][32]; 45281681Srpaulo int pps_cred_set; 46281681Srpaulo int pps_updated; 47281681Srpaulo int client_cert_present; 48281681Srpaulo char **server_dnsname; 49281681Srpaulo size_t server_dnsname_count; 50346981Scy const char *osu_ssid; /* Enforced OSU_SSID for testing purposes */ 51281681Srpaulo#define WORKAROUND_OCSP_OPTIONAL 0x00000001 52281681Srpaulo unsigned long int workarounds; 53281681Srpaulo}; 54281681Srpaulo 55281681Srpaulo 56281681Srpaulo/* osu_client.c */ 57281681Srpaulo 58281681Srpaulovoid write_result(struct hs20_osu_client *ctx, const char *fmt, ...) 59281681Srpaulo __attribute__ ((format (printf, 2, 3))); 60281681Srpaulovoid write_summary(struct hs20_osu_client *ctx, const char *fmt, ...) 61281681Srpaulo __attribute__ ((format (printf, 2, 3))); 62281681Srpaulo 63281681Srpaulovoid debug_dump_node(struct hs20_osu_client *ctx, const char *title, 64281681Srpaulo xml_node_t *node); 65281681Srpauloint osu_get_certificate(struct hs20_osu_client *ctx, xml_node_t *getcert); 66281681Srpauloint hs20_add_pps_mo(struct hs20_osu_client *ctx, const char *uri, 67281681Srpaulo xml_node_t *add_mo, char *fname, size_t fname_len); 68281681Srpaulovoid get_user_pw(struct hs20_osu_client *ctx, xml_node_t *pps, 69281681Srpaulo const char *alt_loc, char **user, char **pw); 70281681Srpauloint update_pps_file(struct hs20_osu_client *ctx, const char *pps_fname, 71281681Srpaulo xml_node_t *pps); 72281681Srpaulovoid cmd_set_pps(struct hs20_osu_client *ctx, const char *pps_fname); 73281681Srpaulo 74281681Srpaulo 75281681Srpaulo/* spp_client.c */ 76281681Srpaulo 77281681Srpaulovoid spp_sub_rem(struct hs20_osu_client *ctx, const char *address, 78281681Srpaulo const char *pps_fname, 79281681Srpaulo const char *client_cert, const char *client_key, 80281681Srpaulo const char *cred_username, const char *cred_password, 81281681Srpaulo xml_node_t *pps); 82281681Srpaulovoid spp_pol_upd(struct hs20_osu_client *ctx, const char *address, 83281681Srpaulo const char *pps_fname, 84281681Srpaulo const char *client_cert, const char *client_key, 85281681Srpaulo const char *cred_username, const char *cred_password, 86281681Srpaulo xml_node_t *pps); 87281681Srpauloint cmd_prov(struct hs20_osu_client *ctx, const char *url); 88281681Srpauloint cmd_sim_prov(struct hs20_osu_client *ctx, const char *url); 89281681Srpaulo 90281681Srpaulo 91281681Srpaulo/* oma_dm_client.c */ 92281681Srpaulo 93281681Srpauloint cmd_oma_dm_prov(struct hs20_osu_client *ctx, const char *url); 94281681Srpauloint cmd_oma_dm_sim_prov(struct hs20_osu_client *ctx, const char *url); 95281681Srpaulovoid oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 96281681Srpaulo const char *pps_fname, 97281681Srpaulo const char *client_cert, const char *client_key, 98281681Srpaulo const char *cred_username, const char *cred_password, 99281681Srpaulo xml_node_t *pps); 100281681Srpaulovoid oma_dm_pol_upd(struct hs20_osu_client *ctx, const char *address, 101281681Srpaulo const char *pps_fname, 102281681Srpaulo const char *client_cert, const char *client_key, 103281681Srpaulo const char *cred_username, const char *cred_password, 104281681Srpaulo xml_node_t *pps); 105281681Srpaulovoid cmd_oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 106281681Srpaulo const char *pps_fname); 107281681Srpaulovoid cmd_oma_dm_add(struct hs20_osu_client *ctx, const char *pps_fname, 108281681Srpaulo const char *add_fname); 109281681Srpaulovoid cmd_oma_dm_replace(struct hs20_osu_client *ctx, const char *pps_fname, 110281681Srpaulo const char *replace_fname); 111281681Srpaulo 112281681Srpaulo/* est.c */ 113281681Srpaulo 114281681Srpauloint est_load_cacerts(struct hs20_osu_client *ctx, const char *url); 115281681Srpauloint est_build_csr(struct hs20_osu_client *ctx, const char *url); 116281681Srpauloint est_simple_enroll(struct hs20_osu_client *ctx, const char *url, 117281681Srpaulo const char *user, const char *pw); 118281681Srpaulo 119281681Srpaulo#endif /* OSU_CLIENT_H */ 120