136d97821Schristos /* 236d97821Schristos * Hotspot 2.0 - OSU client 336d97821Schristos * Copyright (c) 2013-2014, Qualcomm Atheros, Inc. 436d97821Schristos * 536d97821Schristos * This software may be distributed under the terms of the BSD license. 636d97821Schristos * See README for more details. 736d97821Schristos */ 836d97821Schristos 936d97821Schristos #ifndef OSU_CLIENT_H 1036d97821Schristos #define OSU_CLIENT_H 1136d97821Schristos 1236d97821Schristos #define SPP_NS_URI "http://www.wi-fi.org/specifications/hotspot2dot0/v1.0/spp" 1336d97821Schristos 1436d97821Schristos #define URN_OMA_DM_DEVINFO "urn:oma:mo:oma-dm-devinfo:1.0" 1536d97821Schristos #define URN_OMA_DM_DEVDETAIL "urn:oma:mo:oma-dm-devdetail:1.0" 1636d97821Schristos #define URN_HS20_DEVDETAIL_EXT "urn:wfa:mo-ext:hotspot2dot0-devdetail-ext:1.0" 1736d97821Schristos #define URN_HS20_PPS "urn:wfa:mo:hotspot2dot0-perprovidersubscription:1.0" 1836d97821Schristos 1936d97821Schristos 2036d97821Schristos #define MAX_OSU_VALS 10 2136d97821Schristos 2236d97821Schristos struct osu_lang_text { 2336d97821Schristos char lang[4]; 2436d97821Schristos char text[253]; 2536d97821Schristos }; 2636d97821Schristos 2736d97821Schristos struct hs20_osu_client { 2836d97821Schristos struct xml_node_ctx *xml; 2936d97821Schristos struct http_ctx *http; 3036d97821Schristos int no_reconnect; 3136d97821Schristos char pps_fname[300]; 3236d97821Schristos char *devid; 3336d97821Schristos const char *result_file; 3436d97821Schristos const char *summary_file; 3536d97821Schristos const char *ifname; 3636d97821Schristos const char *ca_fname; 3736d97821Schristos int no_osu_cert_validation; /* for EST operations */ 3836d97821Schristos char *fqdn; 3936d97821Schristos char *server_url; 4036d97821Schristos struct osu_lang_text friendly_name[MAX_OSU_VALS]; 4136d97821Schristos size_t friendly_name_count; 4236d97821Schristos size_t icon_count; 4336d97821Schristos char icon_filename[MAX_OSU_VALS][256]; 4436d97821Schristos u8 icon_hash[MAX_OSU_VALS][32]; 4536d97821Schristos int pps_cred_set; 4636d97821Schristos int pps_updated; 4736d97821Schristos int client_cert_present; 4836d97821Schristos char **server_dnsname; 4936d97821Schristos size_t server_dnsname_count; 50*ebb5671cSchristos const char *osu_ssid; /* Enforced OSU_SSID for testing purposes */ 5136d97821Schristos #define WORKAROUND_OCSP_OPTIONAL 0x00000001 5236d97821Schristos unsigned long int workarounds; 5336d97821Schristos }; 5436d97821Schristos 5536d97821Schristos 5636d97821Schristos /* osu_client.c */ 5736d97821Schristos 5836d97821Schristos void write_result(struct hs20_osu_client *ctx, const char *fmt, ...) 5936d97821Schristos __attribute__ ((format (printf, 2, 3))); 6036d97821Schristos void write_summary(struct hs20_osu_client *ctx, const char *fmt, ...) 6136d97821Schristos __attribute__ ((format (printf, 2, 3))); 6236d97821Schristos 6336d97821Schristos void debug_dump_node(struct hs20_osu_client *ctx, const char *title, 6436d97821Schristos xml_node_t *node); 6536d97821Schristos int osu_get_certificate(struct hs20_osu_client *ctx, xml_node_t *getcert); 6636d97821Schristos int hs20_add_pps_mo(struct hs20_osu_client *ctx, const char *uri, 6736d97821Schristos xml_node_t *add_mo, char *fname, size_t fname_len); 6836d97821Schristos void get_user_pw(struct hs20_osu_client *ctx, xml_node_t *pps, 6936d97821Schristos const char *alt_loc, char **user, char **pw); 7036d97821Schristos int update_pps_file(struct hs20_osu_client *ctx, const char *pps_fname, 7136d97821Schristos xml_node_t *pps); 7236d97821Schristos void cmd_set_pps(struct hs20_osu_client *ctx, const char *pps_fname); 7336d97821Schristos 7436d97821Schristos 7536d97821Schristos /* spp_client.c */ 7636d97821Schristos 7736d97821Schristos void spp_sub_rem(struct hs20_osu_client *ctx, const char *address, 7836d97821Schristos const char *pps_fname, 7936d97821Schristos const char *client_cert, const char *client_key, 8036d97821Schristos const char *cred_username, const char *cred_password, 8136d97821Schristos xml_node_t *pps); 8236d97821Schristos void spp_pol_upd(struct hs20_osu_client *ctx, const char *address, 8336d97821Schristos const char *pps_fname, 8436d97821Schristos const char *client_cert, const char *client_key, 8536d97821Schristos const char *cred_username, const char *cred_password, 8636d97821Schristos xml_node_t *pps); 8736d97821Schristos int cmd_prov(struct hs20_osu_client *ctx, const char *url); 8836d97821Schristos int cmd_sim_prov(struct hs20_osu_client *ctx, const char *url); 8936d97821Schristos 9036d97821Schristos 9136d97821Schristos /* oma_dm_client.c */ 9236d97821Schristos 9336d97821Schristos int cmd_oma_dm_prov(struct hs20_osu_client *ctx, const char *url); 9436d97821Schristos int cmd_oma_dm_sim_prov(struct hs20_osu_client *ctx, const char *url); 9536d97821Schristos void oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 9636d97821Schristos const char *pps_fname, 9736d97821Schristos const char *client_cert, const char *client_key, 9836d97821Schristos const char *cred_username, const char *cred_password, 9936d97821Schristos xml_node_t *pps); 10036d97821Schristos void oma_dm_pol_upd(struct hs20_osu_client *ctx, const char *address, 10136d97821Schristos const char *pps_fname, 10236d97821Schristos const char *client_cert, const char *client_key, 10336d97821Schristos const char *cred_username, const char *cred_password, 10436d97821Schristos xml_node_t *pps); 10536d97821Schristos void cmd_oma_dm_sub_rem(struct hs20_osu_client *ctx, const char *address, 10636d97821Schristos const char *pps_fname); 10736d97821Schristos void cmd_oma_dm_add(struct hs20_osu_client *ctx, const char *pps_fname, 10836d97821Schristos const char *add_fname); 10936d97821Schristos void cmd_oma_dm_replace(struct hs20_osu_client *ctx, const char *pps_fname, 11036d97821Schristos const char *replace_fname); 11136d97821Schristos 11236d97821Schristos /* est.c */ 11336d97821Schristos 11436d97821Schristos int est_load_cacerts(struct hs20_osu_client *ctx, const char *url); 11536d97821Schristos int est_build_csr(struct hs20_osu_client *ctx, const char *url); 11636d97821Schristos int est_simple_enroll(struct hs20_osu_client *ctx, const char *url, 11736d97821Schristos const char *user, const char *pw); 11836d97821Schristos 11936d97821Schristos #endif /* OSU_CLIENT_H */ 120