pull/105/head
Apex Liu 2017-10-12 20:35:57 +08:00
parent 178f53a28f
commit 7e7c63253a
12 changed files with 167 additions and 184 deletions

View File

@ -23,7 +23,7 @@
<div class="header">
<div class="container">
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport助手本地配置</span>
<span class="sub-title">此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</span>
<span class="sub-title" id="version"></span>
</div>
</div>
<div class="header-fix"></div>
@ -40,6 +40,7 @@
<div class="content">
<div class="arg-detail arg-detail-common">
<p><strong>此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</strong></p>
<span><strong>注意:</strong>命令参数设置中,如需传递主机信息和登录信息,可以用以下变量替换(注意大小写!):</span>
<ul>
<li><span class="arg-varb">{host_ip}</span> 替换主机IP地址</li>
@ -78,13 +79,6 @@
<input id="ssh-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数"/>
</div>
</div>
<!--<div class="form-group form-group-sm">-->
<!--<div class="col-sm-2"></div>-->
<!--<div class="col-sm-6">-->
<!--<a id="ssh-btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置!</a>-->
<!--</div>-->
<!--</div>-->
</div>
@ -117,12 +111,6 @@
</div>
</div>
<!--<div class="form-group form-group-sm">-->
<!--<div class="col-sm-1"></div>-->
<!--<div class="col-sm-6">-->
<!--<a id="sftp-btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置!</a>-->
<!--</div>-->
<!--</div>-->
</div>

View File

@ -5,6 +5,8 @@ var g_url_base = 'http://127.0.0.1:50022';
var g_cfg = null;
var dom = {
version: $('#version'),
ssh_type: $('#ssh-type'),
ssh_app: $('#ssh-app'),
ssh_cmdline: $('#ssh-cmdline'),
@ -23,6 +25,27 @@ var dom = {
btn_save: $('#btn-save')
};
function get_version() {
$.ajax({
type: 'GET',
timeout: 5000,
url: g_url_base + '/api/get_version',
jsonp: 'callback',
dataType: 'json',
success: function (ret) {
if (ret.code == 0) {
dom.version.text('v' + ret.version);
} else {
alert("获取助手版本信息失败!");
}
},
error: function (jqXhr, _error, _e) {
console.log('state:', jqXhr.state());
alert("获取助手版本信息失败!");
}
});
}
function get_config() {
$.ajax({
type: 'GET',
@ -32,7 +55,6 @@ function get_config() {
dataType: 'json',
success: function (ret) {
if (ret.code == 0) {
console.log(ret.data);
g_cfg = ret.data;
update_dom();
} else {
@ -82,8 +104,6 @@ function update_dom() {
}
}
dom.scp_type.html('');
if (!_.isUndefined(g_cfg.scp)) {
if (_.isUndefined(g_cfg.scp.selected)) {
@ -215,7 +235,8 @@ var select_local_file = function (callback) {
jsonp: 'callback',
dataType: 'json',
success: function (ret) {
callback(0, ret.path);
if(ret.code === 0)
callback(0, ret.path);
},
error: function (jqXhr, _error, _e) {
console.log('state:', jqXhr.state());
@ -249,6 +270,8 @@ function notify_success(message_, title_) {
};
$(document).ready(function () {
get_version();
get_config();
dom.ssh_type.change(function () {
@ -322,81 +345,5 @@ $(document).ready(function () {
dom.btn_save.click(function () {
on_save();
// var name = $("#ssh-client-type").val();
// var path = $("#ssh-exec-path").val();
// if (path == "") {
// alert("请选择路径");
// return;
// }
// var command_line = $("#ssh-exec-args").val();
// if (command_line == "") {
// alert("请输入命令行");
// return;
// }
// set_current_client_config(1, name, path, command_line);
});
// $("#sftp-client-type").change(function () {
// var i = 0;
// var name = $("#sftp-client-type").val();
// var item = g_sftp_config_dict[name];
// init_config_param(2, item.build_in, item.path, item.commandline);
// g_current_sftp = item.name;
// });
// $("#sftp-select-path").click(function () {
// open_exist_file(function (code, path) {
// if (code == 0) {
// $("#sftp-exec-path").val(path);
// } else {
// console.log("can not select file.");
// }
// });
// });
// $("#sftp-btn-save").click(function () {
// var name = $("#sftp-client-type").val();
// var path = $("#sftp-exec-path").val();
// if (path == "") {
// alert("请选择路径");
// return;
// }
// var command_line = $("#sftp-exec-args").val();
// if (command_line == "") {
// alert("请输入命令行");
// return;
// }
// set_current_client_config(2, name, path, command_line);
// });
//
//
// $("#telnet-client-type").change(function () {
// var i = 0;
// var name = $("#telnet-client-type").val();
// var item = g_telnet_config_dict[name];
// init_config_param(3, item.build_in, item.path, item.commandline);
// g_current_telnet = item.name;
// });
// $("#telnet-select-path").click(function () {
// open_exist_file(function (code, path) {
// if (code == 0) {
// $("#telnet-exec-path").val(path);
// } else {
// console.log("can not select file.");
// }
// });
// });
// $("#telnet-btn-save").click(function () {
// var name = $("#telnet-client-type").val();
// var path = $("#telnet-exec-path").val();
// if (path == "") {
// alert("请选择路径");
// return;
// }
// var command_line = $("#telnet-exec-args").val();
// if (command_line == "") {
// alert("请输入命令行");
// return;
// }
// set_current_client_config(3, name, path, command_line);
// });
});

View File

@ -1331,6 +1331,7 @@ void TsHttpRpc::_rpc_func_file_action(const ex_astr& func_args, ex_astr& buf) {
ex_astr utf8_path;
ex_wstr2astr(wszReturnPath, utf8_path, EX_CODEPAGE_UTF8);
Json::Value root;
root["code"] = TPE_OK;
root["path"] = utf8_path;
_create_json_ret(buf, root);

View File

@ -30,8 +30,8 @@ typedef struct TS_RECORD_HEADER_BASIC
ex_u64 timestamp; // 本次录像的起始时间UTC时间戳
ex_u16 width; // 初始屏幕尺寸:宽
ex_u16 height; // 初始屏幕尺寸:高
char user_username[32]; // teleport账号
char acc_username[32]; // 远程主机用户名
char user_username[64]; // teleport账号
char acc_username[64]; // 远程主机用户名
char host_ip[40]; // 远程主机IP
char conn_ip[40]; // 远程主机IP
@ -42,7 +42,7 @@ typedef struct TS_RECORD_HEADER_BASIC
// RDP专有
ex_u8 rdp_security; // 0 = RDP, 1 = TLS
ex_u8 reserve[256 - 4 - 2 - 2 - 2 - 8 - 2 - 2 - 32 - 32 - 40 - 2 - 40 - 40 - 1 - 12]; // 保留,其中,最后12B是为header-info留出的空间
ex_u8 reserve[512 - 4 - 2 - 2 - 2 - 8 - 2 - 2 - 64 - 64 - 40 - 2 - 40 - 40 - 1 - 12]; // 保留,其中,12B是为header-info留出的空间
}TS_RECORD_HEADER_BASIC;
#define ts_record_header_basic_size sizeof(TS_RECORD_HEADER_BASIC)
@ -52,7 +52,7 @@ typedef struct TS_RECORD_HEADER
TS_RECORD_HEADER_BASIC basic;
}TS_RECORD_HEADER;
// header部分header-info + header-basic = 256B
// header部分header-info + header-basic = 512B
#define ts_record_header_size sizeof(TS_RECORD_HEADER)

View File

@ -71,6 +71,7 @@ extern "C"
TPP_API ex_rv tpp_init(TPP_INIT_ARGS* init_args);
TPP_API ex_rv tpp_start(void);
TPP_API ex_rv tpp_stop(void);
TPP_API void tpp_timer(void);
#ifdef __cplusplus
}
@ -78,6 +79,7 @@ extern "C"
typedef ex_rv (*TPP_INIT_FUNC)(TPP_INIT_ARGS* init_args);
typedef ex_rv (*TPP_START_FUNC)(void);
typedef ex_rv (*TPP_STOP_FUNC)(void);
typedef ex_rv(*TPP_STOP_FUNC)(void);
typedef void(*TPP_TIMER_FUNC)(void);
#endif // __TP_PROTOCOL_INTERFACE_H__

View File

@ -1,6 +1,7 @@
#include "ts_env.h"
#include "ts_ver.h"
#include "ts_main.h"
#include "ts_http_client.h"
#include <ex.h>
@ -11,15 +12,18 @@
// -u 卸载服务然后退出仅限Win平台
// --version 打印版本号然后退出
// start 以服务方式运行
// stop Í£Ö¹ÔËÐÐÖеijÌÐò
//
ExLogger g_ex_logger;
bool g_is_debug = false;
extern bool g_exit_flag;
#define RUN_UNKNOWN 0
#define RUN_CORE 1
#define RUN_INSTALL_SRV 2
#define RUN_UNINST_SRV 3
#define RUN_STOP 4
static ex_u8 g_run_type = RUN_UNKNOWN;
#define EOM_CORE_SERVICE_NAME L"Teleport Core Service"
@ -83,6 +87,10 @@ static bool _process_cmd_line(int argc, wchar_t** argv)
g_run_type = RUN_CORE;
continue;
}
else if (0 == wcscmp(argv[i], L"stop")) {
g_run_type = RUN_STOP;
continue;
}
if (0 == wcscmp(argv[i], L"-d"))
{
@ -153,6 +161,15 @@ int _app_main(int argc, wchar_t** argv)
return 1;
}
if (g_run_type == RUN_STOP) {
char url[1024] = {0};
ex_strformat(url, 1023, "http://%s:%d/rpc?{\"method\":\"exit\"}", g_env.rpc_bind_ip.c_str(), g_env.rpc_bind_port);
ex_astr body;
ts_http_get(url, body);
ex_printf("%s\n", body.c_str());
return 0;
}
if (!g_is_debug)
{
if (!_run_daemon())
@ -244,14 +261,21 @@ static void WINAPI service_handler(DWORD fdwControl)
{
if (g_hWorkerThread)
{
TerminateThread(g_hWorkerThread, 1);
g_hWorkerThread = NULL;
}
// TerminateThread(g_hWorkerThread, 1);
// g_hWorkerThread = NULL;
g_exit_flag = true;
g_ServiceStatus.dwWin32ExitCode = 0;
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
g_ServiceStatus.dwCheckPoint = 0;
g_ServiceStatus.dwWaitHint = 0;
g_ServiceStatus.dwWin32ExitCode = 0;
g_ServiceStatus.dwCurrentState = SERVICE_STOP_PENDING;
g_ServiceStatus.dwCheckPoint = 0;
g_ServiceStatus.dwWaitHint = 0;
}
else {
g_ServiceStatus.dwWin32ExitCode = 0;
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
g_ServiceStatus.dwCheckPoint = 0;
g_ServiceStatus.dwWaitHint = 0;
}
}break;
@ -286,7 +310,7 @@ VOID WINAPI service_main(DWORD argc, wchar_t** argv)
g_hWorkerThread = CreateThread(NULL, 0, service_thread_func, NULL, 0, &tid);
if (NULL == g_hWorkerThread)
{
EXLOGE_WIN("CreateThread(python)");
EXLOGE_WIN("CreateThread()");
g_ServiceStatus.dwWin32ExitCode = 0;
g_ServiceStatus.dwCurrentState = SERVICE_STOPPED;
@ -336,7 +360,8 @@ void _sig_handler(int signum, siginfo_t* info, void* ptr)
if (signum == SIGINT || signum == SIGTERM)
{
EXLOGW("[core] received signal SIGINT, exit now.\n");
exit(1);
g_exit_flag = true;
// exit(1);
}
}

View File

@ -327,7 +327,6 @@ void TsHttpRpc::_rpc_func_get_config(const Json::Value& json_param, ex_astr& buf
_create_json_ret(buf, TPE_OK, jr_data);
}
void TsHttpRpc::_rpc_func_request_session(const Json::Value& json_param, ex_astr& buf)
{
// https://github.com/eomsoft/teleport/wiki/TELEPORT-CORE-JSON-RPC#request_session

View File

@ -114,6 +114,7 @@ typedef struct TPP_LIB
TPP_INIT_FUNC init;
TPP_START_FUNC start;
TPP_STOP_FUNC stop;
TPP_TIMER_FUNC timer;
}TPP_LIB;
typedef std::list<TPP_LIB*> tpp_libs;
@ -136,6 +137,7 @@ public:
bool load_tpp(const ex_wstr& libfile);
void stop_all(void);
void timer(void); // ´óÔ¼1Ãëµ÷ÓÃÒ»´Î
int count(void) { return m_libs.size(); }
private:
@ -178,13 +180,15 @@ bool TppManager::load_tpp(const ex_wstr& libname)
lib->init = (TPP_INIT_FUNC)GetProcAddress(lib->dylib, "tpp_init");
lib->start = (TPP_START_FUNC)GetProcAddress(lib->dylib, "tpp_start");
lib->stop = (TPP_STOP_FUNC)GetProcAddress(lib->dylib, "tpp_stop");
lib->timer = (TPP_TIMER_FUNC)GetProcAddress(lib->dylib, "tpp_timer");
#else
lib->init = (TPP_INIT_FUNC)dlsym(lib->dylib, "tpp_init");
lib->start = (TPP_START_FUNC)dlsym(lib->dylib, "tpp_start");
lib->stop = (TPP_STOP_FUNC)dlsym(lib->dylib, "tpp_stop");
lib->stop = (TPP_STOP_FUNC)dlsym(lib->dylib, "tpp_stop");
lib->timer = (TPP_TIMER_FUNC)dlsym(lib->dylib, "tpp_timer");
#endif
if (lib->init == NULL || lib->start == NULL || lib->stop == NULL)
if (lib->init == NULL || lib->start == NULL || lib->stop == NULL || lib->timer == NULL)
{
EXLOGE(L"[core] load dylib `%ls` failed, can not locate all functions.\n", libfile.c_str());
delete lib;
@ -219,8 +223,7 @@ bool TppManager::load_tpp(const ex_wstr& libname)
return true;
}
void TppManager::stop_all(void)
{
void TppManager::stop_all(void) {
tpp_libs::iterator it = m_libs.begin();
for (; it != m_libs.end(); ++it)
{
@ -228,6 +231,14 @@ void TppManager::stop_all(void)
}
}
void TppManager::timer(void) {
tpp_libs::iterator it = m_libs.begin();
for (; it != m_libs.end(); ++it)
{
(*it)->timer();
}
}
int ts_main(void)
{
ExIniFile& ini = g_env.get_ini();
@ -302,6 +313,7 @@ int ts_main(void)
while (!g_exit_flag)
{
ex_sleep_ms(1000);
g_tpp_mgr.timer();
}
}

View File

@ -68,6 +68,10 @@ bool SshProxy::init(void)
return true;
}
void SshProxy::timer(void) {
EXLOGV("[ssh] on-timer.\n");
}
void SshProxy::_thread_loop(void)
{
EXLOGV("[ssh] TeleportServer-SSH ready on %s:%d\n", m_host_ip.c_str(), m_host_port);

View File

@ -1,69 +1,70 @@
#ifndef __SSH_PROXY_H__
#define __SSH_PROXY_H__
#include "ssh_session.h"
#include <ex.h>
typedef std::map<SshSession*, unsigned char> ts_ssh_sessions;
typedef struct TS_SFTP_SESSION_INFO
{
ex_astr host_ip;
int host_port;
ex_astr user_name;
ex_astr user_auth;
int auth_mode;
int ref_count; // 引用计数器但所有引用本登录信息的ssh-sftp通道关闭就销毁之
}TS_SFTP_SESSION_INFO;
typedef std::map<ex_astr, TS_SFTP_SESSION_INFO*> ts_sftp_sessions;
class SshProxy : public ExThreadBase
{
public:
SshProxy();
~SshProxy();
bool init(void);
void add_sftp_session_info(
const ex_astr& sid,
const ex_astr& host_ip,
int host_port,
const ex_astr& user_name,
const ex_astr& user_auth,
int auth_mode
);
bool get_sftp_session_info(const ex_astr& sid, TS_SFTP_SESSION_INFO& info);
void remove_sftp_sid(const ex_astr& sid);
void session_finished(SshSession* sess);
protected:
void _thread_loop(void);
void _set_stop_flag(void);
void _run(void);
private:
void _dump_sftp_sessions(void);
private:
ssh_bind m_bind;
bool m_stop_flag;
ExThreadLock m_lock;
ex_astr m_host_ip;
int m_host_port;
ts_ssh_sessions m_sessions;
ts_sftp_sessions m_sftp_sessions;
ExThreadManager m_thread_mgr;
};
extern SshProxy g_ssh_proxy;
#endif // __SSH_PROXY_H__
#ifndef __SSH_PROXY_H__
#define __SSH_PROXY_H__
#include "ssh_session.h"
#include <ex.h>
typedef std::map<SshSession*, unsigned char> ts_ssh_sessions;
typedef struct TS_SFTP_SESSION_INFO
{
ex_astr host_ip;
int host_port;
ex_astr user_name;
ex_astr user_auth;
int auth_mode;
int ref_count; // 引用计数器但所有引用本登录信息的ssh-sftp通道关闭就销毁之
}TS_SFTP_SESSION_INFO;
typedef std::map<ex_astr, TS_SFTP_SESSION_INFO*> ts_sftp_sessions;
class SshProxy : public ExThreadBase
{
public:
SshProxy();
~SshProxy();
bool init(void);
void timer(void);
void add_sftp_session_info(
const ex_astr& sid,
const ex_astr& host_ip,
int host_port,
const ex_astr& user_name,
const ex_astr& user_auth,
int auth_mode
);
bool get_sftp_session_info(const ex_astr& sid, TS_SFTP_SESSION_INFO& info);
void remove_sftp_sid(const ex_astr& sid);
void session_finished(SshSession* sess);
protected:
void _thread_loop(void);
void _set_stop_flag(void);
void _run(void);
private:
void _dump_sftp_sessions(void);
private:
ssh_bind m_bind;
bool m_stop_flag;
ExThreadLock m_lock;
ex_astr m_host_ip;
int m_host_port;
ts_ssh_sessions m_sessions;
ts_sftp_sessions m_sftp_sessions;
ExThreadManager m_thread_mgr;
};
extern SshProxy g_ssh_proxy;
#endif // __SSH_PROXY_H__

View File

@ -29,8 +29,8 @@ void TppSshRec::_on_begin(const TPP_CONNECT_INFO* info)
// memcpy(m_head.username, info.user_username.c_str(), info.user_username.length() > 15 ? 15 : info.user_username.length());
// memcpy(m_head.ip, info.host_ip.c_str(), info.host_ip.length() > 17 ? 17 : info.host_ip.length());
memcpy(m_head.basic.acc_username, info->acc_username, strlen(info->acc_username) >= 31 ? 31 : strlen(info->acc_username));
memcpy(m_head.basic.user_username, info->user_username, strlen(info->user_username) >= 31 ? 31 : strlen(info->user_username));
memcpy(m_head.basic.acc_username, info->acc_username, strlen(info->acc_username) >= 63 ? 63 : strlen(info->acc_username));
memcpy(m_head.basic.user_username, info->user_username, strlen(info->user_username) >= 63 ? 63 : strlen(info->user_username));
memcpy(m_head.basic.host_ip, info->host_ip, strlen(info->host_ip) >= 39 ? 39 : strlen(info->host_ip));
memcpy(m_head.basic.conn_ip, info->conn_ip, strlen(info->conn_ip) >= 39 ? 39 : strlen(info->conn_ip));
}

View File

@ -33,3 +33,7 @@ TPP_API ex_rv tpp_stop(void)
g_ssh_proxy.stop();
return 0;
}
TPP_API void tpp_timer(void) {
g_ssh_proxy.timer();
}