easegress_sdk/request/
mod.rs

1// Copyright (c) 2017, MegaEase All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
2
3use 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}