1*03f9172cSAndroid Build Coastguard Worker /* 2*03f9172cSAndroid Build Coastguard Worker * HTTP wrapper 3*03f9172cSAndroid Build Coastguard Worker * Copyright (c) 2012-2013, Qualcomm Atheros, Inc. 4*03f9172cSAndroid Build Coastguard Worker * 5*03f9172cSAndroid Build Coastguard Worker * This software may be distributed under the terms of the BSD license. 6*03f9172cSAndroid Build Coastguard Worker * See README for more details. 7*03f9172cSAndroid Build Coastguard Worker */ 8*03f9172cSAndroid Build Coastguard Worker 9*03f9172cSAndroid Build Coastguard Worker #ifndef HTTP_UTILS_H 10*03f9172cSAndroid Build Coastguard Worker #define HTTP_UTILS_H 11*03f9172cSAndroid Build Coastguard Worker 12*03f9172cSAndroid Build Coastguard Worker struct http_ctx; 13*03f9172cSAndroid Build Coastguard Worker 14*03f9172cSAndroid Build Coastguard Worker struct http_othername { 15*03f9172cSAndroid Build Coastguard Worker char *oid; 16*03f9172cSAndroid Build Coastguard Worker u8 *data; 17*03f9172cSAndroid Build Coastguard Worker size_t len; 18*03f9172cSAndroid Build Coastguard Worker }; 19*03f9172cSAndroid Build Coastguard Worker 20*03f9172cSAndroid Build Coastguard Worker #define HTTP_MAX_CERT_LOGO_HASH 32 21*03f9172cSAndroid Build Coastguard Worker 22*03f9172cSAndroid Build Coastguard Worker struct http_logo { 23*03f9172cSAndroid Build Coastguard Worker char *alg_oid; 24*03f9172cSAndroid Build Coastguard Worker u8 *hash; 25*03f9172cSAndroid Build Coastguard Worker size_t hash_len; 26*03f9172cSAndroid Build Coastguard Worker char *uri; 27*03f9172cSAndroid Build Coastguard Worker }; 28*03f9172cSAndroid Build Coastguard Worker 29*03f9172cSAndroid Build Coastguard Worker struct http_cert { 30*03f9172cSAndroid Build Coastguard Worker char **dnsname; 31*03f9172cSAndroid Build Coastguard Worker size_t num_dnsname; 32*03f9172cSAndroid Build Coastguard Worker struct http_othername *othername; 33*03f9172cSAndroid Build Coastguard Worker size_t num_othername; 34*03f9172cSAndroid Build Coastguard Worker struct http_logo *logo; 35*03f9172cSAndroid Build Coastguard Worker size_t num_logo; 36*03f9172cSAndroid Build Coastguard Worker const char *url; 37*03f9172cSAndroid Build Coastguard Worker }; 38*03f9172cSAndroid Build Coastguard Worker 39*03f9172cSAndroid Build Coastguard Worker int soap_init_client(struct http_ctx *ctx, const char *address, 40*03f9172cSAndroid Build Coastguard Worker const char *ca_fname, const char *username, 41*03f9172cSAndroid Build Coastguard Worker const char *password, const char *client_cert, 42*03f9172cSAndroid Build Coastguard Worker const char *client_key); 43*03f9172cSAndroid Build Coastguard Worker int soap_reinit_client(struct http_ctx *ctx); 44*03f9172cSAndroid Build Coastguard Worker xml_node_t * soap_send_receive(struct http_ctx *ctx, xml_node_t *node); 45*03f9172cSAndroid Build Coastguard Worker 46*03f9172cSAndroid Build Coastguard Worker struct http_ctx * http_init_ctx(void *upper_ctx, struct xml_node_ctx *xml_ctx); 47*03f9172cSAndroid Build Coastguard Worker void http_ocsp_set(struct http_ctx *ctx, int val); 48*03f9172cSAndroid Build Coastguard Worker void http_deinit_ctx(struct http_ctx *ctx); 49*03f9172cSAndroid Build Coastguard Worker 50*03f9172cSAndroid Build Coastguard Worker int http_download_file(struct http_ctx *ctx, const char *url, 51*03f9172cSAndroid Build Coastguard Worker const char *fname, const char *ca_fname); 52*03f9172cSAndroid Build Coastguard Worker char * http_post(struct http_ctx *ctx, const char *url, const char *data, 53*03f9172cSAndroid Build Coastguard Worker const char *content_type, const char *ext_hdr, 54*03f9172cSAndroid Build Coastguard Worker const char *ca_fname, 55*03f9172cSAndroid Build Coastguard Worker const char *username, const char *password, 56*03f9172cSAndroid Build Coastguard Worker const char *client_cert, const char *client_key, 57*03f9172cSAndroid Build Coastguard Worker size_t *resp_len); 58*03f9172cSAndroid Build Coastguard Worker void http_set_cert_cb(struct http_ctx *ctx, 59*03f9172cSAndroid Build Coastguard Worker int (*cb)(void *ctx, struct http_cert *cert), 60*03f9172cSAndroid Build Coastguard Worker void *cb_ctx); 61*03f9172cSAndroid Build Coastguard Worker const char * http_get_err(struct http_ctx *ctx); 62*03f9172cSAndroid Build Coastguard Worker void http_parse_x509_certificate(struct http_ctx *ctx, const char *fname); 63*03f9172cSAndroid Build Coastguard Worker 64*03f9172cSAndroid Build Coastguard Worker #endif /* HTTP_UTILS_H */ 65