1 /*
2  * Copyright (c) 2023, Arm Limited and Contributors. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef HTTP_CALLER_H
8 #define HTTP_CALLER_H
9 
10 #include <stdbool.h>
11 #include <stdint.h>
12 
13 #include "rpc_caller.h"
14 
15 #ifdef __cplusplus
16 extern "C" {
17 #endif
18 
19 #define HTTP_CALLER_MAX_URL_LEN (2048)
20 
21 /*
22  * An RPC caller that makes call requests via a REST API 'call' endpoint
23  * that provides a generic way to call trusted service operations via HTTP.
24  * The fw-test-api supports a call endpoint with the path:
25  * /services/{servicename}/call/{opcode}. A call request body carries the
26  * rpc header defined in protocols/rpc/common/packed-c.header.h, followed by
27  * serialized call parameters. A call response body carries the response header
28  * defined in the same file, followed by any serialized response parameters.
29  */
30 struct http_caller {
31 	struct rpc_caller rpc_caller;
32 	char rpc_call_url[HTTP_CALLER_MAX_URL_LEN];
33 	size_t req_body_size;
34 	uint8_t *req_body_buf;
35 	uint8_t *resp_body_buf;
36 };
37 
38 struct rpc_caller *http_caller_init(struct http_caller *s);
39 void http_caller_deinit(struct http_caller *s);
40 
41 bool http_caller_probe(const char *url, long *http_code);
42 
43 int http_caller_open(struct http_caller *s, const char *rpc_call_url);
44 int http_caller_close(struct http_caller *s);
45 
46 #ifdef __cplusplus
47 }
48 #endif
49 
50 #endif /* HTTP_CALLER_H */
51