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