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