teleport/client/tp_assist_win/ts_http_rpc.h

95 lines
2.7 KiB
C
Raw Normal View History

2017-10-11 00:53:01 +00:00
#ifndef __TS_HTTP_RPC_H__
#define __TS_HTTP_RPC_H__
#include "../../external/mongoose/mongoose.h"
2017-10-11 00:53:01 +00:00
#include "ts_const.h"
#include <vector>
#include <string>
#include <map>
#include <ex.h>
#include <json/json.h>
/*
//=================================================================
2018-12-25 08:47:32 +00:00
<EFBFBD>ӿ<EFBFBD>ʹ<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
2017-10-11 00:53:01 +00:00
2018-12-25 08:47:32 +00:00
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬼<EFBFBD><EFBFBD><EFBFBD> localhost:50022<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>http<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽҪ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
2017-10-11 00:53:01 +00:00
2018-12-25 08:47:32 +00:00
GET <EFBFBD><EFBFBD>ʽ
http://localhost:50022/method/json_param
2018-12-25 08:47:32 +00:00
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>json_param<EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>url_encode<EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json<EFBFBD><EFBFBD>ʽ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD>
2017-10-11 00:53:01 +00:00
2018-12-25 08:47:32 +00:00
POST <EFBFBD><EFBFBD>ʽ
http://localhost:50022/method
2018-12-25 08:47:32 +00:00
post<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>json_param
2017-10-11 00:53:01 +00:00
2018-12-25 08:47:32 +00:00
<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>URI<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD>
method <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>񷽷<EFBFBD><EFBFBD><EFBFBD>
json_param <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>񷽷<EFBFBD><EFBFBD>ĸ<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>и<EFBFBD><EFBFBD>Ӳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD>ֿ<EFBFBD><EFBFBD><EFBFBD>ʡ<EFBFBD>ԡ<EFBFBD>
2017-10-11 00:53:01 +00:00
2018-12-25 08:47:32 +00:00
<EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ʽ<EFBFBD><EFBFBD>ִ<EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD>󣬷<EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>json<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>£<EFBFBD>
2017-10-11 00:53:01 +00:00
{"code":0,"data":varb}
2018-12-25 08:47:32 +00:00
<EFBFBD><EFBFBD><EFBFBD>У<EFBFBD>code<EFBFBD>DZ<EFBFBD><EFBFBD>еģ<EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>0<EFBFBD><EFBFBD>ʾ<EFBFBD>ɹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><EFBFBD>data<EFBFBD>򡣲<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>ʱ<EFBFBD><EFBFBD>data<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD>ݾ<EFBFBD><EFBFBD><EFBFBD>ִ<EFBFBD>е<EFBFBD><EFBFBD><EFBFBD><EFBFBD>񷽷<EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><EFBFBD>
2017-10-11 00:53:01 +00:00
*/
void http_rpc_main_loop(bool is_https);
void http_rpc_stop(bool is_https);
2017-10-11 00:53:01 +00:00
typedef std::map<ex_astr, ex_astr> content_type_map;
2018-11-06 19:34:30 +00:00
// for https server, see
// http://www.xiaovdiy.cn/?post=284
class TsHttpRpc {
2017-10-11 00:53:01 +00:00
public:
TsHttpRpc();
~TsHttpRpc();
bool init_http();
bool init_https();
void run(void);
void stop(void);
2018-12-18 03:37:49 +00:00
void _rpc_func_url_protocol(const ex_astr& func_args, ex_astr& buf);
ex_astr get_content_type(ex_astr file_suffix) {
content_type_map::iterator it=m_content_type_map.find(file_suffix);
if (it != m_content_type_map.end()) {
return it->second;
} else {
return "application/octet-stream";
}
};
2017-10-11 00:53:01 +00:00
private:
bool _on_init();
int _parse_request(struct http_message* req, ex_astr& func_cmd, ex_astr& func_args);
void _process_js_request(const ex_astr& func_cmd, const ex_astr& func_args, ex_astr& buf);
void _create_json_ret(ex_astr& buf, int errcode);
void _create_json_ret(ex_astr& buf, Json::Value& jr_root);
void _rpc_func_run_client(const ex_astr& func_args, ex_astr& buf);
// void _rpc_func_check(const ex_astr& func_args, ex_astr& buf);
void _rpc_func_rdp_play(const ex_astr& func_args, ex_astr& buf);
void _rpc_func_get_config(const ex_astr& func_args, ex_astr& buf);
void _rpc_func_set_config(const ex_astr& func_args, ex_astr& buf);
void _rpc_func_file_action(const ex_astr& func_args, ex_astr& buf);
void _rpc_func_get_version(const ex_astr& func_args, ex_astr& buf);
static void _mg_event_handler(struct mg_connection *nc, int ev, void *ev_data);
2017-10-11 00:53:01 +00:00
private:
content_type_map m_content_type_map;
struct mg_mgr m_mg_mgr;
bool m_stop;
2017-10-11 00:53:01 +00:00
};
#endif // __TS_HTTP_RPC_H__