解决助手在某些情况下无法启动HTTPS服务的问题,重新颁发针对127.0.0.1的IP证书,助手版本号升级到3.2.2.

pull/173/head
Apex Liu 2019-01-26 04:23:28 +08:00
parent 951af98f51
commit cad9beb31f
14 changed files with 356 additions and 165 deletions

View File

@ -1,3 +1,3 @@
# -*- coding: utf8 -*- # -*- coding: utf8 -*-
VER_TP_SERVER = "3.2.2" VER_TP_SERVER = "3.2.2"
VER_TP_ASSIST = "3.2.0" VER_TP_ASSIST = "3.2.2"

View File

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
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
uDJ1AAnWjX3KvcyZeWLFTU2/ UI4+yvEjUIpuQt35cyE9K/nx
-----END PRIVATE KEY----- -----END PRIVATE KEY-----

View File

@ -1,24 +1,25 @@
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
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
GAyD
-----END CERTIFICATE----- -----END CERTIFICATE-----

View File

@ -32,7 +32,7 @@
<div class="footer"> <div class="footer">
<div class="container"> <div class="container">
<p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2018,保留所有权利。</p> <p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2019,保留所有权利。</p>
</div> </div>
</div> </div>

View File

@ -0,0 +1,94 @@
<!DOCTYPE html>
<!--[if IE 8]>
<html lang="en" class="ie8"><![endif]-->
<!--[if !IE]><!-->
<html lang="zh_CN">
<!--<![endif]-->
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>TELEPORT助手</title>
<link rel="shortcut icon" href="favicon.png">
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.info-box {
padding:20px;
margin:40px;
border:1px solid #78b17c;
background-color:#e4ffe5;
font-size: 140%;
}
.warning-box {
padding:20px;
margin:40px;
border:1px solid #eac781;
background-color: #f9f5d7;
}
</style>
</head>
<body>
<div class="header">
<div class="container">
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport 助手</span>
<span class="sub-title" id="version"></span>
</div>
</div>
<div class="header-fix"></div>
<div class="footer">
<div class="container">
<p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2019保留所有权利。</p>
</div>
</div>
<div class="container">
<div class="content">
<div class="info-box">
Teleport助手工作正常
</div>
<div class="warning-box">
<p>如果在使用 HTTPS 方式访问 teleport 的 web 服务时检测不到助手,请<a href="https://127.0.0.1:50023" target="_blank">点击这里</a>,查看页面是否能够正常显示。</p>
<p>因为助手在配合HTTPS访问时使用了<strong>自签名证书</strong>,而自签名证书的颁发机构的根证书<strong>默认不被浏览器信任</strong>,因此,还<strong>需要将其设置为浏览器信任的根证书</strong>才行,根据浏览器的不同,具体设置方法有两种:</p>
<p><strong>Chrome/IE/Edge/Opera 等浏览器</strong></p>
<ol>
<li>在桌面的助手快捷方式上点击右键,然后选择“打开文件所在的位置”;</li>
<li>右键点击 <strong>cacert.cer</strong>,在弹出菜单中选择“安装证书”;</li>
<li>在打开的“证书导入向导”对话框中选择“当前用户”,点击下一步;</li>
<li>选择“将所有的证书都放入下列存储”,然后点击“浏览”按钮;</li>
<li>在打开的“选择证书存储”对话框中选择<strong>“受信任的根证书颁发机构”</strong>,点击确定;</li>
<li>点击“下一步”,然后点击“完成”;</li>
<li>系统提示“导入成功”,大功告成。</li>
</ol>
<p><strong>FireFox火狐浏览器</strong></p>
<ol>
<li>打开火狐浏览器的选项页面;</li>
<li>点击左侧的“隐私与安全”,然后滚动页面到底部,点击“查看证书”按钮;</li>
<li>在打开的“证书管理器”对话框中选择“证书颁发机构”选项卡;</li>
<li>点击对话框底部的“导入”按钮,然后选择 <strong>cacert.cer</strong> 文件并点击“打开”按钮;</li>
<li>在“下载证书”对话框中,勾选“信任由此证书颁发机构来标识网站”,然后点击“确定”;</li>
<li>点击“确定”来关闭证书管理器对话框,大功告成。</li>
</ol>
<p><strong>注意:</strong>导入证书后,请再次<a href="https://127.0.0.1:50023" target="_blank">点击这里</a>,查看页面是否能够正常显示。</p>
</div>
</div>
</div>
</body>
</html>

View File

@ -17,11 +17,11 @@
<key>CFBundlePackageType</key> <key>CFBundlePackageType</key>
<string>APPL</string> <string>APPL</string>
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>3.2.0</string> <string>3.2.2</string>
<key>CFBundleSignature</key> <key>CFBundleSignature</key>
<string>????</string> <string>????</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>3.2.0</string> <string>3.2.2</string>
<key>LSApplicationCategoryType</key> <key>LSApplicationCategoryType</key>
<string>public.app-category.productivity</string> <string>public.app-category.productivity</string>
<key>LSMinimumSystemVersion</key> <key>LSMinimumSystemVersion</key>

View File

@ -33,7 +33,7 @@ int http_rpc_start(void* app) {
return -1; return -1;
} }
EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on localhost:%d\n", TS_HTTP_RPC_PORT); EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on 127.0.0.1:%d\n", TS_HTTP_RPC_PORT);
if(!g_http_interface.start()) if(!g_http_interface.start())
return -2; return -2;
@ -44,7 +44,7 @@ int http_rpc_start(void* app) {
return -1; return -1;
} }
EXLOGW("[rpc] TeleportAssist-HTTPS-RPC ready on localhost:%d\n", TS_HTTPS_RPC_PORT); EXLOGW("[rpc] TeleportAssist-HTTPS-RPC ready on 127.0.0.1:%d\n", TS_HTTPS_RPC_PORT);
if(!g_https_interface.start()) if(!g_https_interface.start())
return -2; return -2;
@ -107,15 +107,14 @@ TsHttpRpc::~TsHttpRpc()
} }
bool TsHttpRpc::init_http() bool TsHttpRpc::init_http()
{ struct mg_connection* nc = nullptr;
char addr[128] = { 0 }; char addr[128] = { 0 };
ex_strformat(addr, 128, "tcp://localhost:%d", TS_HTTP_RPC_PORT); ex_strformat(addr, 128, "tcp://127.0.0.1:%d", TS_HTTP_RPC_PORT);
struct mg_connection* nc = NULL;
nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler); nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler);
if (nc == NULL) { if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init_http() localhost:%d\n", TS_HTTP_RPC_PORT); EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%d\n", TS_HTTP_RPC_PORT);
return false; return false;
} }
nc->user_data = this; nc->user_data = this;
@ -144,12 +143,12 @@ bool TsHttpRpc::init_https()
bind_opts.error_string = &err; bind_opts.error_string = &err;
char addr[128] = { 0 }; char addr[128] = { 0 };
ex_strformat(addr, 128, "tcp://localhost:%d", TS_HTTPS_RPC_PORT); ex_strformat(addr, 128, "tcp://127.0.0.1:%d", TS_HTTPS_RPC_PORT);
struct mg_connection* nc = NULL; struct mg_connection* nc = NULL;
nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts); nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts);
if (nc == NULL) { if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init_https() localhost:%d\n", TS_HTTPS_RPC_PORT); EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%d\n", TS_HTTPS_RPC_PORT);
return false; return false;
} }
nc->user_data = this; nc->user_data = this;
@ -225,23 +224,25 @@ void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_dat
EXLOGV("[rpc] got %s request: %s\n", dbg_method, uri.c_str()); EXLOGV("[rpc] got %s request: %s\n", dbg_method, uri.c_str());
#endif #endif
ex_astr ret_buf; ex_astr ret_buf;
bool b_is_index = false; bool b_is_html = false;
if (uri == "/") // if (uri == "/") {
{ // ex_wstr page = L"<html lang=\"zh_CN\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>TeleportÖúÊÖ</title>\n<style type=\"text/css\">\n.box{padding:20px;margin:40px;border:1px solid #78b17c;background-color:#e4ffe5;}\n</style>\n</head><body><div class=\"box\">Teleport Assistor works fine.</div></body></html>";
ex_wstr page = L"<html lang=\"zh_CN\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>Teleport Assistor</title>\n<style type=\"text/css\">\n.box{padding:20px;margin:40px;border:1px solid #78b17c;background-color:#e4ffe5;}\n</style>\n</head><body><div class=\"box\">Teleport Assistor works fine.</div></body></html>"; // ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8);
ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8); //
// mg_printf(nc, "HTTP/1.0 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n%s", ret_buf.size() - 1, &ret_buf[0]);
// nc->flags |= MG_F_SEND_AND_CLOSE;
// return;
// }
mg_printf(nc, "HTTP/1.0 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: %ld\r\nContent-Type: text/html\r\n\r\n%s", ret_buf.size() - 1, &ret_buf[0]); if (uri == "/") {
nc->flags |= MG_F_SEND_AND_CLOSE; uri = "/status.html";
return; b_is_html = true;
} }
else if (uri == "/config") {
if (uri == "/config") uri = "/index.html";
{ b_is_html = true;
uri = "/index.html"; }
b_is_index = true;
}
ex_astr temp; ex_astr temp;
size_t offset = uri.find("/", 1); size_t offset = uri.find("/", 1);
@ -303,9 +304,7 @@ void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_dat
delete []buf; delete []buf;
nc->flags |= MG_F_SEND_AND_CLOSE; nc->flags |= MG_F_SEND_AND_CLOSE;
return; return;
} } else if (b_is_html) {
else if (b_is_index)
{
ex_wstr page = L"<html lang=\"zh_CN\"><html><head><title>404 Not Found</title></head><body bgcolor=\"white\"><center><h1>404 Not Found</h1></center><hr><center><p>Teleport Assistor configuration page not found.</p></center></body></html>"; ex_wstr page = L"<html lang=\"zh_CN\"><html><head><title>404 Not Found</title></head><body bgcolor=\"white\"><center><h1>404 Not Found</h1></center><hr><center><p>Teleport Assistor configuration page not found.</p></center></body></html>";
ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8); ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8);
@ -336,7 +335,7 @@ int TsHttpRpc::_parse_request(struct http_message* req, ex_astr& func_cmd, ex_as
ex_astrs strs; ex_astrs strs;
size_t pos_start = 1; // 跳过第一个字节,一定是 '/' size_t pos_start = 1; // skip first charactor, it must be '/'
size_t i = 0; size_t i = 0;
for (i = pos_start; i < req->uri.len; ++i) for (i = pos_start; i < req->uri.len; ++i)
@ -349,7 +348,7 @@ int TsHttpRpc::_parse_request(struct http_message* req, ex_astr& func_cmd, ex_as
tmp_uri.assign(req->uri.p + pos_start, i - pos_start); tmp_uri.assign(req->uri.p + pos_start, i - pos_start);
strs.push_back(tmp_uri); strs.push_back(tmp_uri);
} }
pos_start = i + 1; // 跳过当前找到的分隔符 pos_start = i + 1; // skip current split chactor.
} }
} }
if (pos_start < req->uri.len) if (pos_start < req->uri.len)
@ -397,7 +396,7 @@ int TsHttpRpc::_parse_request(struct http_message* req, ex_astr& func_cmd, ex_as
if (func_args.length() > 0) if (func_args.length() > 0)
{ {
// 将参数进行 url-decode 解码 // decode param with url-decode.
size_t len = func_args.length() * 2; size_t len = func_args.length() * 2;
ex_chars sztmp; ex_chars sztmp;
sztmp.resize(len); sztmp.resize(len);
@ -448,7 +447,7 @@ void TsHttpRpc::_process_js_request(const ex_astr& func_cmd, const ex_astr& func
void TsHttpRpc::_create_json_ret(ex_astr& buf, int errcode) void TsHttpRpc::_create_json_ret(ex_astr& buf, int errcode)
{ {
// 返回: {"code":123} // return {"code":123}
Json::FastWriter jr_writer; Json::FastWriter jr_writer;
Json::Value jr_root; Json::Value jr_root;
@ -465,11 +464,11 @@ void TsHttpRpc::_create_json_ret(ex_astr& buf, Json::Value& jr_root)
void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf) void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
{ {
// 入参:{"ip":"192.168.5.11","port":22,"uname":"root","uauth":"abcdefg","authmode":1,"protocol":2} // param: {"ip":"192.168.5.11","port":22,"uname":"root","uauth":"abcdefg","authmode":1,"protocol":2}
// authmode: 1=password, 2=private-key // authmode: 1=password, 2=private-key
// protocol: 1=rdp, 2=ssh // protocol: 1=rdp, 2=ssh
// SSH返回: {"code":0, "data":{"sid":"0123abcde"}} // SSH return {"code":0, "data":{"sid":"0123abcde"}}
// RDP返回: {"code":0, "data":{"sid":"0123abcde0A"}} // RDP return {"code":0, "data":{"sid":"0123abcde0A"}}
Json::Reader jreader; Json::Reader jreader;
Json::Value jsRoot; Json::Value jsRoot;
@ -485,7 +484,7 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
return; return;
} }
// 判断参数是否正确 // check param
if (!jsRoot["teleport_ip"].isString() if (!jsRoot["teleport_ip"].isString()
|| !jsRoot["teleport_port"].isNumeric() || !jsRoot["remote_host_ip"].isString() || !jsRoot["teleport_port"].isNumeric() || !jsRoot["remote_host_ip"].isString()
|| !jsRoot["session_id"].isString() || !jsRoot["protocol_type"].isNumeric() || !jsRoot["protocol_sub_type"].isNumeric() || !jsRoot["session_id"].isString() || !jsRoot["protocol_type"].isNumeric() || !jsRoot["protocol_sub_type"].isNumeric()
@ -525,9 +524,9 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
return; return;
} }
bool flag_clipboard = (protocol_flag & TP_FLAG_RDP_CLIPBOARD); bool flag_clipboard = ((protocol_flag & TP_FLAG_RDP_CLIPBOARD) == TP_FLAG_RDP_CLIPBOARD);
bool flag_disk = (protocol_flag & TP_FLAG_RDP_DISK); bool flag_disk = ((protocol_flag & TP_FLAG_RDP_DISK) == TP_FLAG_RDP_DISK);
bool flag_console = (protocol_flag & TP_FLAG_RDP_CONSOLE); bool flag_console = ((protocol_flag & TP_FLAG_RDP_CONSOLE) == TP_FLAG_RDP_CONSOLE);
int rdp_w = 800; int rdp_w = 800;
int rdp_h = 640; int rdp_h = 640;

View File

@ -1,6 +1,6 @@
#ifndef __TS_ASSIST_VER_H__ #ifndef __TS_ASSIST_VER_H__
#define __TS_ASSIST_VER_H__ #define __TS_ASSIST_VER_H__
#define TP_ASSIST_VER L"3.2.0" #define TP_ASSIST_VER L"3.2.2"
#endif // __TS_ASSIST_VER_H__ #endif // __TS_ASSIST_VER_H__

View File

@ -32,7 +32,7 @@
<div class="footer"> <div class="footer">
<div class="container"> <div class="container">
<p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2018,保留所有权利。</p> <p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2019,保留所有权利。</p>
</div> </div>
</div> </div>

View File

@ -0,0 +1,94 @@
<!DOCTYPE html>
<!--[if IE 8]>
<html lang="en" class="ie8"><![endif]-->
<!--[if !IE]><!-->
<html lang="zh_CN">
<!--<![endif]-->
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>TELEPORT助手</title>
<link rel="shortcut icon" href="favicon.png">
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="css/style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.info-box {
padding:20px;
margin:40px;
border:1px solid #78b17c;
background-color:#e4ffe5;
font-size: 140%;
}
.warning-box {
padding:20px;
margin:40px;
border:1px solid #eac781;
background-color: #f9f5d7;
}
</style>
</head>
<body>
<div class="header">
<div class="container">
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport 助手</span>
<span class="sub-title" id="version"></span>
</div>
</div>
<div class="header-fix"></div>
<div class="footer">
<div class="container">
<p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | &copy;2015 - 2019保留所有权利。</p>
</div>
</div>
<div class="container">
<div class="content">
<div class="info-box">
Teleport助手工作正常
</div>
<div class="warning-box">
<p>如果在使用 HTTPS 方式访问 teleport 的 web 服务时检测不到助手,请<a href="https://127.0.0.1:50023" target="_blank">点击这里</a>,查看页面是否能够正常显示。</p>
<p>因为助手在配合HTTPS访问时使用了<strong>自签名证书</strong>,而自签名证书的颁发机构的根证书<strong>默认不被浏览器信任</strong>,因此,还<strong>需要将其设置为浏览器信任的根证书</strong>才行,根据浏览器的不同,具体设置方法有两种:</p>
<p><strong>Chrome/IE/Edge/Opera 等浏览器</strong></p>
<ol>
<li>在桌面的助手快捷方式上点击右键,然后选择“打开文件所在的位置”;</li>
<li>右键点击 <strong>cacert.cer</strong>,在弹出菜单中选择“安装证书”;</li>
<li>在打开的“证书导入向导”对话框中选择“当前用户”,点击下一步;</li>
<li>选择“将所有的证书都放入下列存储”,然后点击“浏览”按钮;</li>
<li>在打开的“选择证书存储”对话框中选择<strong>“受信任的根证书颁发机构”</strong>,点击确定;</li>
<li>点击“下一步”,然后点击“完成”;</li>
<li>系统提示“导入成功”,大功告成。</li>
</ol>
<p><strong>FireFox火狐浏览器</strong></p>
<ol>
<li>打开火狐浏览器的选项页面;</li>
<li>点击左侧的“隐私与安全”,然后滚动页面到底部,点击“查看证书”按钮;</li>
<li>在打开的“证书管理器”对话框中选择“证书颁发机构”选项卡;</li>
<li>点击对话框底部的“导入”按钮,然后选择 <strong>cacert.cer</strong> 文件并点击“打开”按钮;</li>
<li>在“下载证书”对话框中,勾选“信任由此证书颁发机构来标识网站”,然后点击“确定”;</li>
<li>点击“确定”来关闭证书管理器对话框,大功告成。</li>
</ol>
<p><strong>注意:</strong>导入证书后,请再次<a href="https://127.0.0.1:50023" target="_blank">点击这里</a>,查看页面是否能够正常显示。</p>
</div>
</div>
</div>
</body>
</html>

Binary file not shown.

View File

@ -259,7 +259,7 @@ bool TsHttpRpc::init_http() {
nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler); nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler);
if (!nc) { if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init localhost:%d\n", TS_HTTP_RPC_PORT); EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%d\n", TS_HTTP_RPC_PORT);
return false; return false;
} }
nc->user_data = this; nc->user_data = this;
@ -289,12 +289,11 @@ bool TsHttpRpc::init_https() {
char addr[128] = { 0 }; char addr[128] = { 0 };
ex_strformat(addr, 128, "tcp://127.0.0.1:%d", TS_HTTPS_RPC_PORT); ex_strformat(addr, 128, "tcp://127.0.0.1:%d", TS_HTTPS_RPC_PORT);
//ex_strformat(addr, 128, "%d", TS_HTTPS_RPC_PORT);
struct mg_connection* nc = nullptr; struct mg_connection* nc = nullptr;
nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts); nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts);
if (!nc) { if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init localhost:%d\n", TS_HTTPS_RPC_PORT); EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%d\n", TS_HTTPS_RPC_PORT);
return false; return false;
} }
nc->user_data = this; nc->user_data = this;
@ -375,20 +374,24 @@ void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_dat
EXLOGV("[rpc] got %s request: %s\n", dbg_method, uri.c_str()); EXLOGV("[rpc] got %s request: %s\n", dbg_method, uri.c_str());
#endif #endif
ex_astr ret_buf; ex_astr ret_buf;
bool b_is_index = false; bool b_is_html = false;
// if (uri == "/") {
// ex_wstr page = L"<html lang=\"zh_CN\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>TeleportÖúÊÖ</title>\n<style type=\"text/css\">\n.box{padding:20px;margin:40px;border:1px solid #78b17c;background-color:#e4ffe5;}\n</style>\n</head><body><div class=\"box\">TeleportÖúÊÖ¹¤×÷Õý³££¡</div></body></html>";
// ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8);
//
// mg_printf(nc, "HTTP/1.0 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n%s", ret_buf.size() - 1, &ret_buf[0]);
// nc->flags |= MG_F_SEND_AND_CLOSE;
// return;
// }
if (uri == "/") { if (uri == "/") {
ex_wstr page = L"<html lang=\"zh_CN\"><head><meta charset=\"utf-8\"/><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/><title>TeleportÖúÊÖ</title>\n<style type=\"text/css\">\n.box{padding:20px;margin:40px;border:1px solid #78b17c;background-color:#e4ffe5;}\n</style>\n</head><body><div class=\"box\">TeleportÖúÊÖ¹¤×÷Õý³££¡</div></body></html>"; uri = "/status.html";
ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8); b_is_html = true;
mg_printf(nc, "HTTP/1.0 200 OK\r\nAccess-Control-Allow-Origin: *\r\nContent-Length: %d\r\nContent-Type: text/html\r\n\r\n%s", ret_buf.size() - 1, &ret_buf[0]);
nc->flags |= MG_F_SEND_AND_CLOSE;
return;
} }
else if (uri == "/config") {
if (uri == "/config") {
uri = "/index.html"; uri = "/index.html";
b_is_index = true; b_is_html = true;
} }
ex_astr temp; ex_astr temp;
@ -445,7 +448,7 @@ void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_dat
delete[]buf; delete[]buf;
nc->flags |= MG_F_SEND_AND_CLOSE; nc->flags |= MG_F_SEND_AND_CLOSE;
return; return;
} else if (b_is_index) { } else if (b_is_html) {
ex_wstr page = L"<html lang=\"zh_CN\"><html><head><title>404 Not Found</title></head><body bgcolor=\"white\"><center><h1>404 Not Found</h1></center><hr><center><p>Teleport Assistor configuration page not found.</p></center></body></html>"; ex_wstr page = L"<html lang=\"zh_CN\"><html><head><title>404 Not Found</title></head><body bgcolor=\"white\"><center><h1>404 Not Found</h1></center><hr><center><p>Teleport Assistor configuration page not found.</p></center></body></html>";
ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8); ex_wstr2astr(page, ret_buf, EX_CODEPAGE_UTF8);

View File

@ -1,6 +1,6 @@
#ifndef __TS_ASSIST_VER_H__ #ifndef __TS_ASSIST_VER_H__
#define __TS_ASSIST_VER_H__ #define __TS_ASSIST_VER_H__
#define TP_ASSIST_VER L"3.2.0" #define TP_ASSIST_VER L"3.2.2"
#endif // __TS_ASSIST_VER_H__ #endif // __TS_ASSIST_VER_H__

View File

@ -13,5 +13,5 @@ Revision: 修订号。主版本号和次版本号都相同但修订号不同的
TP_SERVER 3.2.2 # 整个服务端打包的版本 TP_SERVER 3.2.2 # 整个服务端打包的版本
TP_TPCORE 3.2.0 # 核心服务 tp_core 的版本 TP_TPCORE 3.2.0 # 核心服务 tp_core 的版本
TP_TPWEB 3.1.0 # web服务 tp_web 的版本一般除非升级Python否则不会变化 TP_TPWEB 3.1.0 # web服务 tp_web 的版本一般除非升级Python否则不会变化
TP_ASSIST 3.2.0 # 助手版本 TP_ASSIST 3.2.2 # 助手版本
TP_ASSIST_REQUIRE 3.1.0 # 适配的助手最低版本 TP_ASSIST_REQUIRE 3.1.0 # 适配的助手最低版本