From eef2ce4460da8992ae718263c70754865ca4518a Mon Sep 17 00:00:00 2001 From: Apex Liu Date: Mon, 21 Aug 2017 17:32:17 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=8F=82=E6=95=B0=E5=90=8D=E7=A7=B0=EF=BC=8C?= =?UTF-8?q?=E9=81=BF=E5=85=8D=E6=B7=B7=E6=B7=86=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/tp_core/common/protocol_interface.h | 20 +- server/tp_core/core/main.cpp | 3 +- server/tp_core/core/ts_env.cpp | 2 +- server/tp_core/core/ts_http_client.cpp | 210 ++++++++++---------- server/tp_core/core/ts_main.cpp | 73 +++---- server/tp_core/core/ts_session.cpp | 55 ++--- server/tp_core/core/ts_session.h | 50 +++-- server/tp_core/core/ts_web_rpc.cpp | 17 +- server/tp_core/core/ts_web_rpc.h | 2 +- server/tp_core/protocol/ssh/ssh_session.cpp | 8 +- 10 files changed, 230 insertions(+), 210 deletions(-) diff --git a/server/tp_core/common/protocol_interface.h b/server/tp_core/common/protocol_interface.h index 06ecd02..bbeb9d1 100644 --- a/server/tp_core/common/protocol_interface.h +++ b/server/tp_core/common/protocol_interface.h @@ -17,20 +17,30 @@ typedef struct TPP_CONNECT_INFO { char* sid; + + // 与此连接信息相关的三个要素的ID + int user_id; + int host_id; + int account_id; + char* user_name; // 申请本次连接的用户名 + char* real_remote_host_ip; // 真正的远程主机IP(如果是直接连接模式,则与remote_host_ip相同) char* remote_host_ip; // 要连接的远程主机的IP(如果是端口映射模式,则为路由主机的IP) + int remote_host_port; // 要连接的远程主机的端口(如果是端口映射模式,则为路由主机的端口) + char* client_ip; + char* account_name; // 远程主机的账号 char* account_secret; // 远程主机账号的密码(或者私钥) - char* user_param; - int remote_host_port; // 要连接的远程主机的端口(如果是端口映射模式,则为路由主机的端口) + char* account_param; + int protocol_type; int protocol_sub_type; - //int auth_id; int auth_type; int sys_type; - int ref_count; // 这个连接信息的引用计数,如果创建的连接信息从来未被使用,则超过60秒后自动销毁 - ex_u64 ticket_start; // 此连接信息的创建时间(用于超时未使用就销毁的功能) + +// int ref_count; // 这个连接信息的引用计数,如果创建的连接信息从来未被使用,则超过60秒后自动销毁 +// ex_u64 ticket_start; // 此连接信息的创建时间(用于超时未使用就销毁的功能) }TPP_CONNECT_INFO; typedef TPP_CONNECT_INFO* (*TPP_GET_CONNNECT_INFO_FUNC)(const char* sid); diff --git a/server/tp_core/core/main.cpp b/server/tp_core/core/main.cpp index 2ad559f..a212c64 100644 --- a/server/tp_core/core/main.cpp +++ b/server/tp_core/core/main.cpp @@ -17,12 +17,11 @@ ExLogger g_ex_logger; bool g_is_debug = false; #define RUN_UNKNOWN 0 -#define RUN_CORE 1 +#define RUN_CORE 1 #define RUN_INSTALL_SRV 2 #define RUN_UNINST_SRV 3 static ex_u8 g_run_type = RUN_UNKNOWN; - #define EOM_CORE_SERVICE_NAME L"Teleport Core Service" static bool _run_daemon(void); diff --git a/server/tp_core/core/ts_env.cpp b/server/tp_core/core/ts_env.cpp index 06a3a4c..74f0783 100644 --- a/server/tp_core/core/ts_env.cpp +++ b/server/tp_core/core/ts_env.cpp @@ -113,7 +113,7 @@ bool TsEnv::init(bool load_config) if (!ps->GetStr(L"web-server-rpc", tmp)) { - web_server_rpc = "http://127.0.0.1:7190/rpc"; + web_server_rpc = "http://localhost:7190/rpc"; } else { diff --git a/server/tp_core/core/ts_http_client.cpp b/server/tp_core/core/ts_http_client.cpp index a8a1c69..be43bfc 100644 --- a/server/tp_core/core/ts_http_client.cpp +++ b/server/tp_core/core/ts_http_client.cpp @@ -1,108 +1,102 @@ -#include "ts_http_client.h" -#include - -#include - -// #include -// using namespace std; -//map session_map; - -void ts_url_encode(const char *src, ex_astr& out) -{ - static const char *dont_escape = "._-$,;~()/"; - static const char *hex = "0123456789abcdef"; - - size_t s_len = strlen(src); - size_t dst_len = s_len * 3 + 1; - char* dst = new char[dst_len]; - memset(dst, 0, dst_len); - - size_t i = 0, j = 0; - - for (i = j = 0; dst_len > 0 && i < s_len && j + 2 < dst_len - 1; i++, j++) { - if (isalnum(*(const unsigned char *)(src + i)) || - strchr(dont_escape, *(const unsigned char *)(src + i)) != NULL) { - dst[j] = src[i]; - } - else if (j + 3 < dst_len) { - dst[j] = '%'; - dst[j + 1] = hex[(*(const unsigned char *)(src + i)) >> 4]; - dst[j + 2] = hex[(*(const unsigned char *)(src + i)) & 0xf]; - j += 2; - } - } - - dst[j] = '\0'; - out = dst; - delete []dst; -} - -typedef struct HTTP_DATA { - bool exit_flag; - bool have_error; - ex_astr body; -}HTTP_DATA; - -//int s_exit_flag = 0; - -static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) -{ - HTTP_DATA* hdata = (HTTP_DATA*)nc->user_data; - struct http_message *hm = (struct http_message *) ev_data; - - switch (ev) { - case MG_EV_CONNECT: - if (*(int *)ev_data != 0) { - hdata->exit_flag = true; - hdata->have_error = true; - } - break; - case MG_EV_HTTP_REPLY: - nc->flags |= MG_F_CLOSE_IMMEDIATELY; - hdata->exit_flag = true; - hdata->body.assign(hm->body.p, hm->body.len); - break; - case MG_EV_CLOSE: -// if (s_exit_flag == 0) { -// printf("Server closed connection\n"); -// s_exit_flag = 1; -// } - hdata->exit_flag = true; - break; - default: - break; - } -} - -bool ts_http_get(const ex_astr& url, ex_astr& body) -{ - struct mg_mgr mgr; - mg_mgr_init(&mgr, NULL); - - mg_connection* nc = mg_connect_http(&mgr, ev_handler, url.c_str(), NULL, NULL); - if (NULL == nc) - return false; - - HTTP_DATA* hdata = new HTTP_DATA; - hdata->exit_flag = false; - hdata->have_error = false; - - nc->user_data = hdata; - -// int count = 0; - while (!hdata->exit_flag) - { - mg_mgr_poll(&mgr, 100); -// count++; -// if (count > 2) -// break; - } - - bool ret = !hdata->have_error; - if (ret) - body = hdata->body; - - delete hdata; - mg_mgr_free(&mgr); - return ret; -} +#include "ts_http_client.h" +#include + +#include + +void ts_url_encode(const char *src, ex_astr& out) +{ + static const char *dont_escape = "._-$,;~()/"; + static const char *hex = "0123456789abcdef"; + + size_t s_len = strlen(src); + size_t dst_len = s_len * 3 + 1; + char* dst = new char[dst_len]; + memset(dst, 0, dst_len); + + size_t i = 0, j = 0; + + for (i = j = 0; dst_len > 0 && i < s_len && j + 2 < dst_len - 1; i++, j++) { + if (isalnum(*(const unsigned char *)(src + i)) || + strchr(dont_escape, *(const unsigned char *)(src + i)) != NULL) { + dst[j] = src[i]; + } + else if (j + 3 < dst_len) { + dst[j] = '%'; + dst[j + 1] = hex[(*(const unsigned char *)(src + i)) >> 4]; + dst[j + 2] = hex[(*(const unsigned char *)(src + i)) & 0xf]; + j += 2; + } + } + + dst[j] = '\0'; + out = dst; + delete []dst; +} + +typedef struct HTTP_DATA { + bool exit_flag; + bool have_error; + ex_astr body; +}HTTP_DATA; + +static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) +{ + HTTP_DATA* hdata = (HTTP_DATA*)nc->user_data; + struct http_message *hm = (struct http_message *) ev_data; + + switch (ev) { + case MG_EV_CONNECT: + if (*(int *)ev_data != 0) { + hdata->exit_flag = true; + hdata->have_error = true; + } + break; + case MG_EV_HTTP_REPLY: + nc->flags |= MG_F_CLOSE_IMMEDIATELY; + hdata->exit_flag = true; + hdata->body.assign(hm->body.p, hm->body.len); + break; + case MG_EV_CLOSE: +// if (s_exit_flag == 0) { +// printf("Server closed connection\n"); +// s_exit_flag = 1; +// } + hdata->exit_flag = true; + break; + default: + break; + } +} + +bool ts_http_get(const ex_astr& url, ex_astr& body) +{ + struct mg_mgr mgr; + mg_mgr_init(&mgr, NULL); + + mg_connection* nc = mg_connect_http(&mgr, ev_handler, url.c_str(), NULL, NULL); + if (NULL == nc) + return false; + + HTTP_DATA* hdata = new HTTP_DATA; + hdata->exit_flag = false; + hdata->have_error = false; + + nc->user_data = hdata; + +// int count = 0; + while (!hdata->exit_flag) + { + mg_mgr_poll(&mgr, 100); +// count++; +// if (count > 2) +// break; + } + + bool ret = !hdata->have_error; + if (ret) + body = hdata->body; + + delete hdata; + mg_mgr_free(&mgr); + return ret; +} diff --git a/server/tp_core/core/ts_main.cpp b/server/tp_core/core/ts_main.cpp index 3c90050..4b3a959 100644 --- a/server/tp_core/core/ts_main.cpp +++ b/server/tp_core/core/ts_main.cpp @@ -9,42 +9,45 @@ bool g_exit_flag = false; -TPP_CONNECT_INFO* tpp_get_session(const char* sid) +TPP_CONNECT_INFO* tpp_get_connect_info(const char* sid) { - TS_SESSION_INFO sinfo; - bool ret = g_session_mgr.take_session(sid, sinfo); + TS_CONNECT_INFO sinfo; + bool ret = g_session_mgr.get_connect_info(sid, sinfo); if (!ret) return NULL; TPP_CONNECT_INFO* info = (TPP_CONNECT_INFO*)calloc(1, sizeof(TPP_CONNECT_INFO)); - + info->sid = (char*)calloc(1, sinfo.sid.length() + 1); ex_strcpy(info->sid, sinfo.sid.length() + 1, sinfo.sid.c_str()); - info->account_name = (char*)calloc(1, sinfo.account_name.length() + 1); - ex_strcpy(info->account_name, sinfo.account_name.length() + 1, sinfo.account_name.c_str()); - info->real_remote_host_ip = (char*)calloc(1, sinfo.host_ip.length() + 1); - ex_strcpy(info->real_remote_host_ip, sinfo.host_ip.length() + 1, sinfo.host_ip.c_str()); - info->remote_host_ip = (char*)calloc(1, sinfo.host_ip.length() + 1); - ex_strcpy(info->remote_host_ip, sinfo.host_ip.length() + 1, sinfo.host_ip.c_str()); info->user_name = (char*)calloc(1, sinfo.user_name.length() + 1); ex_strcpy(info->user_name, sinfo.user_name.length() + 1, sinfo.user_name.c_str()); - info->account_secret = (char*)calloc(1, sinfo.user_auth.length() + 1); - ex_strcpy(info->account_secret, sinfo.user_auth.length() + 1, sinfo.user_auth.c_str()); - info->user_param = (char*)calloc(1, sinfo.user_param.length() + 1); - ex_strcpy(info->user_param, sinfo.user_param.length() + 1, sinfo.user_param.c_str()); + info->real_remote_host_ip = (char*)calloc(1, sinfo.real_remote_host_ip.length() + 1); + ex_strcpy(info->real_remote_host_ip, sinfo.real_remote_host_ip.length() + 1, sinfo.real_remote_host_ip.c_str()); + info->remote_host_ip = (char*)calloc(1, sinfo.remote_host_ip.length() + 1); + ex_strcpy(info->remote_host_ip, sinfo.remote_host_ip.length() + 1, sinfo.remote_host_ip.c_str()); + info->client_ip = (char*)calloc(1, sinfo.client_ip.length() + 1); + ex_strcpy(info->client_ip, sinfo.client_ip.length() + 1, sinfo.client_ip.c_str()); + info->account_name = (char*)calloc(1, sinfo.account_name.length() + 1); + ex_strcpy(info->account_name, sinfo.account_name.length() + 1, sinfo.account_name.c_str()); + info->account_secret = (char*)calloc(1, sinfo.account_secret.length() + 1); + ex_strcpy(info->account_secret, sinfo.account_secret.length() + 1, sinfo.account_secret.c_str()); + info->account_param = (char*)calloc(1, sinfo.account_param.length() + 1); + ex_strcpy(info->account_param, sinfo.account_param.length() + 1, sinfo.account_param.c_str()); - //info->auth_id = sinfo.auth_id; - info->remote_host_port = sinfo.host_port; - info->protocol_type = sinfo.protocol; - info->auth_type= sinfo.auth_mode; + info->user_id = sinfo.user_id; + info->host_id = sinfo.host_id; + info->account_id = sinfo.account_id; + info->remote_host_port = sinfo.remote_host_port; + info->protocol_type = sinfo.protocol_type; + info->protocol_sub_type = sinfo.protocol_sub_type; + info->auth_type= sinfo.auth_type; info->sys_type = sinfo.sys_type; - info->ref_count = sinfo.ref_count; - info->ticket_start = sinfo.ticket_start; return info; } -void tpp_free_session(TPP_CONNECT_INFO* info) +void tpp_free_connect_info(TPP_CONNECT_INFO* info) { if (NULL == info) return; @@ -53,9 +56,10 @@ void tpp_free_session(TPP_CONNECT_INFO* info) free(info->user_name); free(info->real_remote_host_ip); free(info->remote_host_ip); + free(info->client_ip); free(info->account_name); free(info->account_secret); - free(info->user_param); + free(info->account_param); free(info); } @@ -64,20 +68,19 @@ bool tpp_session_begin(const TPP_CONNECT_INFO* info, int* db_id) if (NULL == info || NULL == db_id) return false; - TS_SESSION_INFO sinfo; + TS_CONNECT_INFO sinfo; sinfo.sid = info->sid; - sinfo.account_name = info->account_name; - sinfo.auth_id = info->auth_id; - sinfo.host_ip = info->host_ip; - sinfo.host_port = info->host_port; - sinfo.protocol = info->protocol; sinfo.user_name = info->user_name; - sinfo.user_auth = info->user_auth; - sinfo.user_param = info->user_param; - sinfo.auth_mode = info->auth_mode; + sinfo.real_remote_host_ip = info->real_remote_host_ip; + sinfo.remote_host_ip = info->remote_host_ip; + sinfo.client_ip = info->client_ip; + sinfo.account_name = info->account_name; + + sinfo.remote_host_port = info->remote_host_port; + sinfo.protocol_type = info->protocol_type; + sinfo.protocol_sub_type = info->protocol_sub_type; + sinfo.auth_type = info->auth_type; sinfo.sys_type = info->sys_type; - sinfo.ref_count = info->ref_count; - sinfo.ticket_start = info->ticket_start; return ts_web_rpc_session_begin(sinfo, *db_id); } @@ -184,8 +187,8 @@ bool TppManager::load_tpp(const ex_wstr& libname) init_args.etc_path = g_env.m_etc_path; init_args.replay_path = g_env.m_replay_path; init_args.cfg = &g_env.get_ini(); - init_args.func_take_session = tpp_take_session; - init_args.func_free_session = tpp_free_session; + init_args.func_get_connect_info = tpp_get_connect_info; + init_args.func_free_connect_info = tpp_free_connect_info; init_args.func_session_begin = tpp_session_begin; init_args.func_session_end = tpp_session_end; diff --git a/server/tp_core/core/ts_session.cpp b/server/tp_core/core/ts_session.cpp index 3aeb3d9..a7ae597 100644 --- a/server/tp_core/core/ts_session.cpp +++ b/server/tp_core/core/ts_session.cpp @@ -13,12 +13,12 @@ TsSessionManager::TsSessionManager() : TsSessionManager::~TsSessionManager() { - ts_sessiones::iterator it = m_sessions.begin(); - for (; it != m_sessions.end(); ++it) + ts_connections::iterator it_conn = m_connections.begin(); + for (; it_conn != m_connections.end(); ++it_conn) { - delete it->second; + delete it_conn->second; } - m_sessions.clear(); + m_connections.clear(); } void TsSessionManager::_thread_loop(void) @@ -28,7 +28,7 @@ void TsSessionManager::_thread_loop(void) ex_sleep_ms(1000); if (m_stop_flag) return; - _check_sessions(); + _check_connect_info(); } } @@ -38,25 +38,25 @@ void TsSessionManager::_set_stop_flag(void) } -void TsSessionManager::_check_sessions(void) +void TsSessionManager::_check_connect_info(void) { - // 超过10秒未进行连接的session-id会被移除 + // 超过30秒未进行连接的connect-info会被移除 ExThreadSmartLock locker(m_lock); ex_u64 _now = ex_get_tick_count(); - ts_sessiones::iterator it = m_sessions.begin(); - for (; it != m_sessions.end(); ) + ts_connections::iterator it = m_connections.begin(); + for (; it != m_connections.end(); ) { #ifdef EX_DEBUG - if (_now - it->second->ticket_start >= 60*1000*60) + if (it->second->ref_count == 0 && _now - it->second->ticket_start >= 60*1000*60) #else - if (_now - it->second->ticket_start >= 10000) + if (it->second->ref_count == 0 && _now - it->second->ticket_start >= 30000) #endif { - EXLOGV("[core] remove session: %s\n", it->first.c_str()); + EXLOGV("[core] remove connection info: %s\n", it->first.c_str()); delete it->second; - m_sessions.erase(it++); + m_connections.erase(it++); } else { @@ -98,19 +98,19 @@ ex_rv TsSessionManager::request_session( EXLOGD("[core] request session: user-name: [%s], protocol: [%d], auth-mode: [%d]\n", info->user_name.c_str(), info->protocol, info->auth_mode); - if (_add_session(sid, info)) + if (_add_connect_info(sid, info)) return EXRV_OK; delete info; return EXRV_FAILED; } -bool TsSessionManager::get_session(const ex_astr& sid, TS_SESSION_INFO& info) +bool TsSessionManager::get_connect_info(const ex_astr& sid, TS_CONNECT_INFO& info) { ExThreadSmartLock locker(m_lock); - ts_sessiones::iterator it = m_sessions.find(sid); - if (it == m_sessions.end()) + ts_connections::iterator it = m_connections.find(sid); + if (it == m_connections.end()) return false; info.sid = it->second->sid; @@ -139,18 +139,18 @@ bool TsSessionManager::get_session(const ex_astr& sid, TS_SESSION_INFO& info) return true; } -bool TsSessionManager::_add_session(ex_astr& sid, TS_SESSION_INFO* info) +bool TsSessionManager::_add_connect_info(ex_astr& sid, TS_CONNECT_INFO* info) { ExThreadSmartLock locker(m_lock); ex_astr _sid; int retried = 0; - ts_sessiones::iterator it; + ts_connections::iterator it; for (;;) { _gen_session_id(_sid, info, 6); - it = m_sessions.find(_sid); - if (it == m_sessions.end()) + it = m_connections.find(_sid); + if (it == m_connections.end()) break; retried++; @@ -159,20 +159,20 @@ bool TsSessionManager::_add_session(ex_astr& sid, TS_SESSION_INFO* info) } info->sid = _sid; - m_sessions.insert(std::make_pair(_sid, info)); + m_connections.insert(std::make_pair(_sid, info)); sid = _sid; - if (info->protocol == 1) + if (info->protocol_type == TP_PROTOCOL_TYPE_RDP) { char szTmp[8] = { 0 }; - snprintf(szTmp, 8, "%02X", (unsigned char)(info->user_name.length() + info->user_auth.length())); + snprintf(szTmp, 8, "%02X", (unsigned char)(info->account_name.length() + info->account_secret.length())); sid += szTmp; } return true; } -void TsSessionManager::_gen_session_id(ex_astr& sid, const TS_SESSION_INFO* info, int len) +void TsSessionManager::_gen_session_id(ex_astr& sid, const TS_CONNECT_INFO* info, int len) { mbedtls_sha1_context sha; ex_u8 sha_digist[20] = { 0 }; @@ -184,8 +184,9 @@ void TsSessionManager::_gen_session_id(ex_astr& sid, const TS_SESSION_INFO* info mbedtls_sha1_starts(&sha); mbedtls_sha1_update(&sha, (const unsigned char*)&_tick, sizeof(ex_u64)); mbedtls_sha1_update(&sha, (const unsigned char*)&_tid, sizeof(ex_u64)); - mbedtls_sha1_update(&sha, (const unsigned char*)info->host_ip.c_str(), info->host_ip.length()); - mbedtls_sha1_update(&sha, (const unsigned char*)info->user_name.c_str(), info->user_name.length()); + mbedtls_sha1_update(&sha, (const unsigned char*)info->remote_host_ip.c_str(), info->remote_host_ip.length()); + mbedtls_sha1_update(&sha, (const unsigned char*)info->client_ip.c_str(), info->client_ip.length()); + mbedtls_sha1_update(&sha, (const unsigned char*)info->account_name.c_str(), info->account_name.length()); mbedtls_sha1_finish(&sha, sha_digist); mbedtls_sha1_free(&sha); diff --git a/server/tp_core/core/ts_session.h b/server/tp_core/core/ts_session.h index 651341e..3e63f86 100644 --- a/server/tp_core/core/ts_session.h +++ b/server/tp_core/core/ts_session.h @@ -6,26 +6,36 @@ #include -typedef struct TS_SESSION_INFO +typedef struct TS_CONNECT_INFO { ex_astr sid; - ex_astr account_name; // 申请本次连接的用户名 - //int auth_id; - ex_astr host_ip; - int host_port; - int protocol; - ex_astr user_name; - ex_astr user_auth; - ex_astr user_param; - int auth_mode; + // 与此连接信息相关的三个要素的ID + int user_id; + int host_id; + int account_id; + + ex_astr user_name;// 申请本次连接的用户名 + + ex_astr real_remote_host_ip;// 真正的远程主机IP(如果是直接连接模式,则与remote_host_ip相同) + ex_astr remote_host_ip;// 要连接的远程主机的IP(如果是端口映射模式,则为路由主机的IP) + int remote_host_port;// 要连接的远程主机的端口(如果是端口映射模式,则为路由主机的端口) + ex_astr client_ip; + + ex_astr account_name; // 远程主机的账号 + ex_astr account_secret;// 远程主机账号的密码(或者私钥) + ex_astr account_param; + + int protocol_type; + int protocol_sub_type; + int auth_type; int sys_type; + + int ref_count;// 这个连接信息的引用计数,如果创建的连接信息从来未被使用,则超过30秒后自动销毁 + ex_u64 ticket_start;// 此连接信息的创建时间(用于超时未使用就销毁的功能) +}TS_CONNECT_INFO; - int ref_count; - ex_u64 ticket_start; -}TS_SESSION_INFO; - -typedef std::map ts_sessiones; +typedef std::map ts_connections; class TsSessionManager : public ExThreadBase { @@ -49,7 +59,7 @@ public: ); // 根据sid得到session信息 - bool get_session(const ex_astr& sid, TS_SESSION_INFO& info); + bool get_connect_info(const ex_astr& sid, TS_CONNECT_INFO& info); protected: // 线程循环 @@ -58,13 +68,13 @@ protected: void _set_stop_flag(void); private: - bool _add_session(ex_astr& sid, TS_SESSION_INFO* info); - void _gen_session_id(ex_astr& sid, const TS_SESSION_INFO* info, int len); - void _check_sessions(void); + void _gen_session_id(ex_astr& sid, const TS_CONNECT_INFO* info, int len); + bool _add_connect_info(ex_astr& sid, TS_CONNECT_INFO* info); + void _check_connect_info(void); private: ExThreadLock m_lock; - ts_sessiones m_sessions; + ts_connections m_connections; }; extern TsSessionManager g_session_mgr; diff --git a/server/tp_core/core/ts_web_rpc.cpp b/server/tp_core/core/ts_web_rpc.cpp index 349d31b..c7004b5 100644 --- a/server/tp_core/core/ts_web_rpc.cpp +++ b/server/tp_core/core/ts_web_rpc.cpp @@ -92,20 +92,23 @@ int ts_web_rpc_get_conn_info(int conn_id, Json::Value& jret) return TPE_OK; } -bool ts_web_rpc_session_begin(TS_SESSION_INFO& info, int& record_id) +bool ts_web_rpc_session_begin(TS_CONNECT_INFO& info, int& record_id) { Json::FastWriter json_writer; Json::Value jreq; jreq["method"] = "session_begin"; jreq["param"]["sid"] = info.sid.c_str(); - jreq["param"]["account_name"] = info.account_name.c_str(); - jreq["param"]["host_ip"] = info.host_ip.c_str(); - jreq["param"]["sys_type"] = info.sys_type; - jreq["param"]["host_port"] = info.host_port; - jreq["param"]["auth_mode"] = info.auth_mode, jreq["param"]["user_name"] = info.user_name.c_str(); - jreq["param"]["protocol"] = info.protocol; + jreq["param"]["account_name"] = info.account_name.c_str(); + jreq["param"]["real_remote_host_ip"] = info.real_remote_host_ip.c_str(); + jreq["param"]["remote_host_ip"] = info.remote_host_ip.c_str(); + jreq["param"]["client_ip"] = info.client_ip.c_str(); + jreq["param"]["sys_type"] = info.sys_type; + jreq["param"]["remote_host_port"] = info.remote_host_port; + jreq["param"]["auth_type"] = info.auth_type; + jreq["param"]["protocol_type"] = info.protocol_type; + jreq["param"]["protocol_sub_type"] = info.protocol_sub_type; ex_astr json_param; json_param = json_writer.write(jreq); diff --git a/server/tp_core/core/ts_web_rpc.h b/server/tp_core/core/ts_web_rpc.h index a9d3a91..f085e22 100644 --- a/server/tp_core/core/ts_web_rpc.h +++ b/server/tp_core/core/ts_web_rpc.h @@ -12,7 +12,7 @@ bool ts_web_rpc_register_core(); int ts_web_rpc_get_conn_info(int conn_id, Json::Value& jret); // 记录会话的开始 -bool ts_web_rpc_session_begin(TS_SESSION_INFO& info, int& record_id); +bool ts_web_rpc_session_begin(TS_CONNECT_INFO& info, int& record_id); //session 结束 bool ts_web_rpc_session_end(const char* sid, int id, int ret_code); diff --git a/server/tp_core/protocol/ssh/ssh_session.cpp b/server/tp_core/protocol/ssh/ssh_session.cpp index 1a438f8..4da5d6a 100644 --- a/server/tp_core/protocol/ssh/ssh_session.cpp +++ b/server/tp_core/protocol/ssh/ssh_session.cpp @@ -228,7 +228,7 @@ int SshSession::_on_auth_password_request(ssh_session session, const char *user, EXLOGV("[ssh] authenticating, session-id: %s\n", _this->m_sid.c_str()); int protocol = 0; - TPP_CONNECT_INFO* sess_info = g_ssh_env.get_session(_this->m_sid.c_str()); + TPP_CONNECT_INFO* sess_info = g_ssh_env.get_connect_info(_this->m_sid.c_str()); if (NULL == sess_info) { // EXLOGW("[ssh] try to get login-info from ssh-sftp-session.\n"); @@ -261,7 +261,7 @@ int SshSession::_on_auth_password_request(ssh_session session, const char *user, } if (protocol != TP_PROTOCOL_TYPE_SSH) { - g_ssh_env.free_session(sess_info); + g_ssh_env.free_connect_info(sess_info); EXLOGE("[ssh] session '%s' is not for SSH.\n", _this->m_sid.c_str()); _this->m_have_error = true; _this->m_retcode = TP_SESS_STAT_ERR_AUTH_DENIED; @@ -270,13 +270,13 @@ int SshSession::_on_auth_password_request(ssh_session session, const char *user, if (!_this->_on_session_begin(sess_info)) { - g_ssh_env.free_session(sess_info); + g_ssh_env.free_connect_info(sess_info); _this->m_have_error = true; _this->m_retcode = TP_SESS_STAT_ERR_AUTH_DENIED; return SSH_AUTH_DENIED; } - g_ssh_env.free_session(sess_info); + g_ssh_env.free_connect_info(sess_info); sess_info = NULL; // 现在尝试根据session-id获取得到的信息,连接并登录真正的SSH服务器