easegress_sdk/request/
mod.rs1use std::collections::HashMap;
4
5use crate::cookie::Cookie;
6use crate::marshal::{
7 marshal_all_header, marshal_cookie, marshal_data, marshal_string, unmarshal_all_header,
8 unmarshal_cookie, unmarshal_data, unmarshal_string, unmarshal_string_vec,
9};
10
11#[link(wasm_import_module = "easegress")]
12extern "C" {
13 fn host_req_get_real_ip() -> i32;
14 fn host_req_get_scheme() -> i32;
15 fn host_req_get_proto() -> i32;
16 fn host_req_get_method() -> i32;
17 fn host_req_set_method(addr: i32);
18 fn host_req_get_host() -> i32;
19 fn host_req_set_host(addr: i32);
20 fn host_req_get_path() -> i32;
21 fn host_req_set_path(addr: i32);
22 fn host_req_get_escaped_path() -> i32;
23 fn host_req_get_query() -> i32;
24 fn host_req_set_query(addr: i32);
25 fn host_req_get_fragment() -> i32;
26 fn host_req_get_header(addr: i32) -> i32;
27 fn host_req_get_all_header() -> i32;
28 fn host_req_set_header(name_addr: i32, value_addr: i32);
29 fn host_req_set_all_header(addr: i32);
30 fn host_req_add_header(name_addr: i32, value_addr: i32);
31 fn host_req_del_header(addr: i32);
32 fn host_req_get_cookie(addr: i32) -> i32;
33 fn host_req_get_all_cookie() -> i32;
34 fn host_req_add_cookie(addr: i32);
35 fn host_req_get_body() -> i32;
36 fn host_req_set_body(addr: i32);
37}
38
39#[no_mangle]
40pub fn get_real_ip() -> String {
41 let ptr = unsafe { host_req_get_real_ip() };
42 unmarshal_string(ptr)
43}
44
45#[no_mangle]
46pub fn get_scheme() -> String {
47 let ptr = unsafe { host_req_get_scheme() };
48 unmarshal_string(ptr)
49}
50
51#[no_mangle]
52pub fn get_proto() -> String {
53 let ptr = unsafe { host_req_get_proto() };
54 unmarshal_string(ptr)
55}
56
57#[no_mangle]
58pub fn get_method() -> String {
59 let ptr = unsafe { host_req_get_method() };
60 unmarshal_string(ptr)
61}
62
63#[no_mangle]
64pub fn set_method(method: String) {
65 let ptr = marshal_string(method);
66 unsafe { host_req_set_method(ptr.as_ptr() as i32) }
67}
68
69#[no_mangle]
70pub fn get_host() -> String {
71 let ptr = unsafe { host_req_get_host() };
72 unmarshal_string(ptr)
73}
74
75#[no_mangle]
76pub fn set_host(host: String) {
77 let ptr = marshal_string(host);
78 unsafe { host_req_set_host(ptr.as_ptr() as i32) }
79}
80
81#[no_mangle]
82pub fn get_path() -> String {
83 let ptr = unsafe { host_req_get_path() };
84 unmarshal_string(ptr)
85}
86
87#[no_mangle]
88pub fn set_path(path: String) {
89 let ptr = marshal_string(path);
90 unsafe { host_req_set_path(ptr.as_ptr() as i32) }
91}
92
93#[no_mangle]
94pub fn get_escape_path() -> String {
95 let ptr = unsafe { host_req_get_escaped_path() };
96 unmarshal_string(ptr)
97}
98
99#[no_mangle]
100pub fn get_query() -> String {
101 let ptr = unsafe { host_req_get_query() };
102 unmarshal_string(ptr)
103}
104
105#[no_mangle]
106pub fn set_query(query: String) {
107 let ptr = marshal_string(query);
108 unsafe { host_req_set_query(ptr.as_ptr() as i32) }
109}
110
111#[no_mangle]
112pub fn get_fragment() -> String {
113 let ptr = unsafe { host_req_get_fragment() };
114 unmarshal_string(ptr)
115}
116
117#[no_mangle]
118pub fn get_header(name: String) -> String {
119 let ptr = marshal_string(name);
120 let ptr = unsafe { host_req_get_header(ptr.as_ptr() as i32) };
121 drop(ptr);
122 unmarshal_string(ptr)
123}
124
125#[no_mangle]
126pub fn get_all_header() -> HashMap<String, Vec<String>> {
127 let ptr = unsafe { host_req_get_all_header() };
128 unmarshal_all_header(ptr)
129}
130
131#[no_mangle]
132pub fn set_header(name: String, value: String) {
133 let name_ptr = marshal_string(name);
134 let value_ptr = marshal_string(value);
135 unsafe { host_req_set_header(name_ptr.as_ptr() as i32, value_ptr.as_ptr() as i32) }
136}
137
138#[no_mangle]
139pub fn set_all_header(headers: HashMap<String, Vec<String>>) {
140 let ptr = marshal_all_header(headers);
141 unsafe { host_req_set_all_header(ptr.as_ptr() as i32) }
142}
143
144#[no_mangle]
145pub fn add_header(name: String, value: String) {
146 let name_ptr = marshal_string(name);
147 let value_ptr = marshal_string(value);
148 unsafe { host_req_add_header(name_ptr.as_ptr() as i32, value_ptr.as_ptr() as i32) }
149}
150
151#[no_mangle]
152pub fn del_header(name: String) {
153 let ptr = marshal_string(name);
154 unsafe { host_req_del_header(ptr.as_ptr() as i32) }
155}
156
157#[no_mangle]
158pub fn get_cookie(name: String) -> Option<Cookie> {
159 let ptr = marshal_string(name);
160 let data = unsafe { host_req_get_cookie(ptr.as_ptr() as i32) };
161 unmarshal_cookie(data)
162}
163
164#[no_mangle]
165pub fn get_all_cookie() -> Vec<Cookie> {
166 let mut result = Vec::<Cookie>::new();
167 let ptr = unsafe { host_req_get_all_cookie() };
168 let strs = unmarshal_string_vec(ptr);
169 for str in strs {
170 let c = Cookie::unmarshal(str);
171 if c.is_some() {
172 result.push(c.unwrap());
173 }
174 }
175 result
176}
177
178#[no_mangle]
179pub fn add_cookie(c: Cookie) {
180 let ptr = marshal_cookie(c);
181 unsafe { host_req_add_cookie(ptr.as_ptr() as i32) }
182}
183
184#[no_mangle]
185pub fn get_body() -> Vec<u8> {
186 let ptr = unsafe { host_req_get_body() };
187 unmarshal_data(ptr)
188}
189
190#[no_mangle]
191pub fn set_body(body: Vec<u8>) {
192 let ptr = marshal_data(body);
193 unsafe { host_req_set_body(ptr.as_ptr() as i32) }
194}