diff --git a/client/tp_assist_macos/site/css/style.css b/client/tp_assist_macos/site/css/style.css
index 538ccaf..82956e3 100644
--- a/client/tp_assist_macos/site/css/style.css
+++ b/client/tp_assist_macos/site/css/style.css
@@ -1 +1 @@
-@charset "utf-8";body{font-family:"Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;font-size:13px;background-color:#fff;color:#333}html,body{height:100%}.header{width:100%;height:48px;position:fixed;top:0;line-height:48px;font-size:80%;background-color:#3b3b3b;color:#fff;z-index:999}.header .title{font-size:16px}.header .sub-title{margin-left:30px;color:#acacac}.header-fix{height:48px}.footer{width:100%;height:24px;position:fixed;bottom:0;text-align:center;line-height:24px;background-color:#d5d5d5;border-top:1px solid #a2a2a2;font-size:80%;z-index:999}.content{margin:20px 0 50px 0}.content .cfg-title{font-size:16px;font-weight:bold}.content .form-group{margin-bottom:5px}.content .col-sm-1,.content .col-sm-2,.content .col-sm-3,.content .col-sm-4,.content .col-sm-5,.content .col-sm-6,.content .col-sm-7{padding-left:3px;padding-right:3px}.content .arg-detail{font-size:11px}.content .arg-detail ol,.content .arg-detail ul{margin-bottom:0}.content .arg-detail-common{background-color:#dbffbe;border-radius:5px;padding:15px}.content .input-args{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}.arg-varb{color:#0a6aa1;font-weight:bold;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;display:inline-block;width:128px}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=style.css.map */
\ No newline at end of file
+@charset "utf-8";body{font-family:"Microsoft YaHei","微软雅黑",Helvetica,Arial,sans-serif;font-size:13px;background-color:#fff;color:#333}html,body{height:100%}.header{width:100%;height:48px;position:fixed;top:0;line-height:48px;font-size:80%;background-color:#3b3b3b;color:#fff;z-index:999}.header .title{font-size:16px}.header .sub-title{margin-left:30px;color:#acacac}.header-fix{height:48px}.footer{width:100%;height:24px;position:fixed;bottom:0;text-align:center;line-height:24px;background-color:#d5d5d5;border-top:1px solid #a2a2a2;font-size:80%;z-index:999}.content{margin:20px 0 50px 0}.content .cfg-title{font-size:16px;font-weight:bold}.content .form-group{margin-bottom:5px}.content .col-sm-1,.content .col-sm-2,.content .col-sm-3,.content .col-sm-4,.content .col-sm-5,.content .col-sm-6,.content .col-sm-7,.content .col-sm-8,.content .col-sm-9,.content .col-sm-10,.content .col-sm-11,.content .col-sm-12{padding-left:3px;padding-right:3px}.content .arg-detail{font-size:11px}.content .arg-detail ol,.content .arg-detail ul{margin-bottom:0}.content .desc{display:inline-block;margin-top:5px;color:#6b6b6b}.content .arg-detail-common{background-color:#dbffbe;border-radius:5px;padding:15px}.content .input-args{font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace}.arg-varb{color:#0a6aa1;font-weight:bold;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;display:inline-block;width:128px}#gritter-notice-wrapper{z-index:9999}.gritter-bottom,.gritter-item,.gritter-top{background:rgba(0,0,0,0.8) !important}.gritter-top{border-top-left-radius:3px;border-top-right-radius:3px}.gritter-bottom{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.gritter-close,.gritter-light .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%}.gritter-close:before,.gritter-light .gritter-close:before{content:'\f00d' !important;font-family:FontAwesome !important;font-size:9px !important;width:16px !important;height:16px !important;line-height:16px !important;color:#fff !important;text-indent:0 !important;position:absolute !important;text-align:center !important;right:0 !important;top:0 !important}.gritter-title{font-size:13px !important;line-height:16px !important;padding-bottom:5px !important;font-weight:400 !important;color:#fff !important;text-shadow:none !important}.gritter-item{color:#aaa !important;font-size:13px !important;padding:2px 15px 5px !important}.gritter-error .gritter-bottom,.gritter-error .gritter-item,.gritter-error .gritter-top{background:rgba(123,32,32,0.9) !important}.gritter-error .gritter-title{color:#fff !important}.gritter-error .gritter-item{color:#ddd !important}.gritter-error .gritter-close{left:auto !important;right:5px !important;top:5px !important;width:16px !important;height:16px !important;line-height:16px !important;display:block !important;border-radius:50%;background:#e33b3b !important}.gritter-success .gritter-bottom,.gritter-success .gritter-item,.gritter-success .gritter-top{background:rgba(1,65,16,0.9) !important}.gritter-success .gritter-title{color:#ddd !important}.gritter-success .gritter-item{color:#ccc !important}.gritter-success .gritter-close{background:#0eb320 !important}#gritter-notice-wrapper{width:320px;max-width:480px}/*# sourceMappingURL=style.css.map */
\ No newline at end of file
diff --git a/client/tp_assist_macos/site/css/style.css.map b/client/tp_assist_macos/site/css/style.css.map
index 4d86d8b..f0bfed4 100644
--- a/client/tp_assist_macos/site/css/style.css.map
+++ b/client/tp_assist_macos/site/css/style.css.map
@@ -1 +1 @@
-{"version":3,"sources":["style.less"],"names":[],"mappings":"AAAA,SAAS,QAaT,KACE,YAJmB,kBAAmB,iCAItC,CACA,cAAA,CACA,qBAAA,CACA,WAGF,KAAM,KACJ,YAGF,QACE,UAAA,CACA,WAAA,CACA,cAAA,CACA,KAAA,CAEA,gBAAA,CAEA,aAAA,CAEA,wBAAA,CACA,UAAA,CACA,YAZF,OAcE,QACE,eAfJ,OAiBE,YACE,gBAAA,CACA,cAIJ,YACE,YAGF,QACE,UAAA,CACA,WAAA,CACA,cAAA,CACA,QAAA,CACA,iBAAA,CACA,gBAAA,CACA,wBAAA,CACA,4BAAA,CACA,aAAA,CACA,YAGF,SACE,qBADF,QAGE,YACE,cAAA,CACA,iBALJ,QAQE,aACE,kBATJ,QAYE,WAZF,QAYa,WAZb,QAYwB,WAZxB,QAYmC,WAZnC,QAY8C,WAZ9C,QAYyD,WAZzD,QAYoE,WAChE,gBAAA,CACA,kBAdJ,QAiBE,aACE,eAlBJ,QAiBE,YAEE,IAnBJ,QAiBE,YAEM,IACF,gBApBN,QAwBE,oBAEE,wBAAA,CAEA,iBAAA,CACA,aA7BJ,QAiCE,aACE,mDAvF0D,wBA2F9D,UACE,aAAA,CACA,gBAAA,CACA,mDA9F4D,uBA8F5D,CACA,oBAAA,CACA,YAiBF,wBAKE,aAGF,gBAAiB,cAAe,aAE9B,0BAAA,YAGF,aACE,0BAAA,CACA,4BAGF,gBACE,6BAAA,CACA,+BAGF,eAAgB,cAAe,gBAU7B,SAAA,YACA,SAAA,YACA,OAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,aAAA,YACA,kBAGF,cAAc,QAAS,cAAe,eAAc,QAClD,QAAS,OAAT,YACA,uBAAA,YACA,aAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,UAAA,YACA,aAAA,YACA,iBAAA,YACA,iBAAA,YACA,OAAA,YACA,KAAA,YAcF,eACE,cAAA,YACA,gBAAA,YACA,kBAAA,YACA,eAAA,YACA,UAAA,YACA,gBAAA,YAQF,cAEE,UAAA,YACA,cAAA,YACA,oBAAA,YAGF,cACE,iBADF,cACmB,eADnB,cACkC,cAC9B,8BAAA,YAFJ,cAKE,gBACE,UAAA,YANJ,cASE,eACE,UAAA,YAVJ,cAaE,gBACE,SAAA,YACA,SAAA,YACA,OAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,aAAA,YACA,iBAAA,CACA,kBAAA,YAIJ,gBACE,iBADF,gBACmB,eADnB,gBACkC,cAE9B,4BAAA,YAHJ,gBAME,gBAEE,UAAA,YARJ,gBAWE,eAEE,UAAA,YAbJ,gBAgBE,gBACE,kBAAA,YAKJ,wBACE,WAAA,CAEA","file":"style.css","sourceRoot":"../less"}
\ No newline at end of file
+{"version":3,"sources":["style.less"],"names":[],"mappings":"AAAA,SAAS,QAaT,KACE,YAJmB,kBAAmB,iCAItC,CACA,cAAA,CACA,qBAAA,CACA,WAGF,KAAM,KACJ,YAGF,QACE,UAAA,CACA,WAAA,CACA,cAAA,CACA,KAAA,CAEA,gBAAA,CAEA,aAAA,CAEA,wBAAA,CACA,UAAA,CACA,YAZF,OAcE,QACE,eAfJ,OAiBE,YACE,gBAAA,CACA,cAIJ,YACE,YAGF,QACE,UAAA,CACA,WAAA,CACA,cAAA,CACA,QAAA,CACA,iBAAA,CACA,gBAAA,CACA,wBAAA,CACA,4BAAA,CACA,aAAA,CACA,YAGF,SACE,qBADF,QAGE,YACE,cAAA,CACA,iBALJ,QAQE,aACE,kBATJ,QAYE,WAZF,QAYa,WAZb,QAYwB,WAZxB,QAYmC,WAZnC,QAY8C,WAZ9C,QAYyD,WAZzD,QAYoE,WAZpE,QAY+E,WAZ/E,QAY0F,WAZ1F,QAYqG,YAZrG,QAYiH,YAZjH,QAY6H,YACzH,gBAAA,CACA,kBAdJ,QAiBE,aACE,eAlBJ,QAiBE,YAEE,IAnBJ,QAiBE,YAEM,IACF,gBApBN,QAwBE,OACE,oBAAA,CACA,cAAA,CACA,cA3BJ,QA8BE,oBAEE,wBAAA,CAEA,iBAAA,CACA,aAnCJ,QAuCE,aACE,mDA7F0D,wBAiG9D,UACE,aAAA,CACA,gBAAA,CACA,mDApG4D,uBAoG5D,CACA,oBAAA,CACA,YAiBF,wBAKE,aAGF,gBAAiB,cAAe,aAE9B,0BAAA,YAGF,aACE,0BAAA,CACA,4BAGF,gBACE,6BAAA,CACA,+BAGF,eAAgB,cAAe,gBAU7B,SAAA,YACA,SAAA,YACA,OAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,aAAA,YACA,kBAGF,cAAc,QAAS,cAAe,eAAc,QAClD,QAAS,OAAT,YACA,uBAAA,YACA,aAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,UAAA,YACA,aAAA,YACA,iBAAA,YACA,iBAAA,YACA,OAAA,YACA,KAAA,YAcF,eACE,cAAA,YACA,gBAAA,YACA,kBAAA,YACA,eAAA,YACA,UAAA,YACA,gBAAA,YAQF,cAEE,UAAA,YACA,cAAA,YACA,oBAAA,YAGF,cACE,iBADF,cACmB,eADnB,cACkC,cAC9B,8BAAA,YAFJ,cAKE,gBACE,UAAA,YANJ,cASE,eACE,UAAA,YAVJ,cAaE,gBACE,SAAA,YACA,SAAA,YACA,OAAA,YACA,UAAA,YACA,WAAA,YACA,gBAAA,YACA,aAAA,YACA,iBAAA,CACA,kBAAA,YAIJ,gBACE,iBADF,gBACmB,eADnB,gBACkC,cAE9B,4BAAA,YAHJ,gBAME,gBAEE,UAAA,YARJ,gBAWE,eAEE,UAAA,YAbJ,gBAgBE,gBACE,kBAAA,YAKJ,wBACE,WAAA,CAEA","file":"style.css","sourceRoot":"../less"}
\ No newline at end of file
diff --git a/client/tp_assist_macos/site/index.html b/client/tp_assist_macos/site/index.html
index aabe0be..72d61da 100644
--- a/client/tp_assist_macos/site/index.html
+++ b/client/tp_assist_macos/site/index.html
@@ -25,7 +25,7 @@
@@ -34,31 +34,57 @@
-
本地终端配置
+
+
本地终端配置(用于SSH)
diff --git a/client/tp_assist_macos/site/js/config.js b/client/tp_assist_macos/site/js/config.js
index 5822350..66900e9 100644
--- a/client/tp_assist_macos/site/js/config.js
+++ b/client/tp_assist_macos/site/js/config.js
@@ -7,6 +7,8 @@ var g_cfg = null;
var dom = {
term_type: $('#term-type'),
term_profile: $('#term-profile'),
+ rdp_type: $('#rdp-type'),
+ rdp_app: $('#rdp-app'),
btn_save: $('#btn-save')
};
@@ -35,7 +37,7 @@ var get_config = function () {
}
function update_dom() {
- console.log('---', g_cfg, g_cfg.term, g_cfg.term.available);
+ console.log('---', g_cfg);
dom.term_type.html('');
@@ -66,6 +68,34 @@ function update_dom() {
dom.term_profile.val(profile);
}
}
+
+ if (!_.isUndefined(g_cfg.rdp)) {
+ if (_.isUndefined(g_cfg.rdp.selected)) {
+ g_cfg.rdp.selected = '';
+ }
+
+ if (!_.isUndefined(g_cfg.rdp.available) && g_cfg.rdp.available.length > 0) {
+ var selected = '';
+ var app = '';
+
+ var html = [];
+ for (var i = 0; i < g_cfg.rdp.available.length; i++) {
+ var item = g_cfg.rdp.available[i];
+
+ if (selected === '' || item.name === g_cfg.rdp.selected) {
+ selected = item.name;
+ app = item.app;
+ }
+
+ html.push('
');
+ }
+
+ dom.rdp_type.html(html.join(''));
+
+ dom.rdp_type.val(selected);
+ dom.rdp_app.val(app);
+ }
+ }
}
function on_term_change() {
@@ -78,10 +108,22 @@ function on_term_change() {
return;
}
}
-
notify_error('所选的终端配置项并不存在!');
}
+function on_rdp_change() {
+ g_cfg.rdp.selected = dom.rdp_type.val();
+
+ for (var i = 0; i < g_cfg.rdp.available.length; i++) {
+ var item = g_cfg.rdp.available[i];
+ if (item.name === g_cfg.rdp.selected) {
+ dom.rdp_app.val(item.app);
+ return;
+ }
+ }
+ notify_error('所选的RDP配置项并不存在!');
+}
+
function on_save() {
if (g_cfg === null)
return;
@@ -93,6 +135,13 @@ function on_save() {
break;
}
}
+ for (var i = 0; i < g_cfg.rdp.available.length; i++) {
+ var item = g_cfg.rdp.available[i];
+ if (item.name === g_cfg.rdp.selected) {
+ item.app = dom.rdp_app.val();
+ break;
+ }
+ }
var args_ = encodeURIComponent(JSON.stringify(g_cfg));
@@ -146,6 +195,9 @@ $(document).ready(function () {
dom.term_type.change(function () {
on_term_change();
});
+ dom.rdp_type.change(function () {
+ on_rdp_change();
+ });
dom.btn_save.click(function () {
on_save();
diff --git a/client/tp_assist_macos/site/less/style.less b/client/tp_assist_macos/site/less/style.less
index 49303bc..964264a 100644
--- a/client/tp_assist_macos/site/less/style.less
+++ b/client/tp_assist_macos/site/less/style.less
@@ -74,7 +74,7 @@ html, body {
margin-bottom: 5px;
}
- .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7 {
+ .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
padding-left: 3px;
padding-right: 3px;
}
@@ -86,6 +86,12 @@ html, body {
}
}
+ .desc {
+ display:inline-block;
+ margin-top:5px;
+ color:rgb(107, 107, 107);
+ }
+
.arg-detail-common {
//border:1px solid #f33;
background-color: #dbffbe;
diff --git a/client/tp_assist_macos/src/AppDelegate-C-Interface.cpp b/client/tp_assist_macos/src/AppDelegate-C-Interface.cpp
index da56a42..a49cbc4 100644
--- a/client/tp_assist_macos/src/AppDelegate-C-Interface.cpp
+++ b/client/tp_assist_macos/src/AppDelegate-C-Interface.cpp
@@ -11,13 +11,14 @@
#include "csrc/ts_cfg.h"
#include "csrc/ts_http_rpc.h"
-bool cpp_main(void* _self, const char* cfg_file, const char* res_path) {
+int cpp_main(void* _self, const char* cfg_file, const char* res_path) {
if(!g_env.init(cfg_file, res_path))
- return false;
+ return -1;
if(!g_cfg.init())
- return false;
+ return -2;
- http_rpc_start(_self);
+ if(0 != http_rpc_start(_self))
+ return -3;
- return true;
+ return 0;
}
diff --git a/client/tp_assist_macos/src/AppDelegate-C-Interface.h b/client/tp_assist_macos/src/AppDelegate-C-Interface.h
index d79ff47..f102bba 100644
--- a/client/tp_assist_macos/src/AppDelegate-C-Interface.h
+++ b/client/tp_assist_macos/src/AppDelegate-C-Interface.h
@@ -12,6 +12,6 @@
int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char* term_type, const char* term_theme, const char* term_title);
// for cpp global object initialize.
-bool cpp_main(void* _self, const char* cfg_file, const char* res_path);
+int cpp_main(void* _self, const char* cfg_file, const char* res_path);
#endif /* wrap_c_objc_h */
diff --git a/client/tp_assist_macos/src/AppDelegate.mm b/client/tp_assist_macos/src/AppDelegate.mm
index 4401e6f..9953ade 100644
--- a/client/tp_assist_macos/src/AppDelegate.mm
+++ b/client/tp_assist_macos/src/AppDelegate.mm
@@ -74,9 +74,29 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
NSString *resPath = [[NSBundle mainBundle] resourcePath];
std::string cpp_res_path = [resPath cStringUsingEncoding:NSUTF8StringEncoding];
std::string cpp_cfg_file = [cfgFile cStringUsingEncoding:NSUTF8StringEncoding];
- if(!cpp_main((__bridge void*)self, cpp_cfg_file.c_str(), cpp_res_path.c_str())) {
+
+ int ret = cpp_main((__bridge void*)self, cpp_cfg_file.c_str(), cpp_res_path.c_str());
+ if(ret != 0) {
// TODO: show error message and exit.
- }
+ NSString *msg = Nil;
+ if(ret == -1)
+ msg = @"初始化运行环境失败!";
+ else if(ret == -2)
+ msg = @"加载配置文件失败!";
+ else if(ret == -3)
+ msg = @"启动本地通讯端口失败!请检查本地50022端口是否被占用!";
+
+ NSAlert *alert = [NSAlert alertWithMessageText:@"无法启动Teleport助手"
+ defaultButton:@"确定"
+ alternateButton:Nil
+ otherButton:Nil
+ informativeTextWithFormat:msg];
+ [alert runModal];
+
+ http_rpc_stop();
+
+ [[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
+ [NSApp terminate:NSApp]; }
}
- (int) start_ssh_client:(NSString*)cmd_line termType:(NSString*)term_type termTheme:(NSString*)term_theme termTitle:(NSString*)term_title {
@@ -147,7 +167,7 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
- (IBAction)visitWebsite:(id)sender {
- NSURL *url = [NSURL URLWithString:@"http://teleport.eomsoft.net/"];
+ NSURL *url = [NSURL URLWithString:@"http://www.tp4a.com/"];
[[NSWorkspace sharedWorkspace] openURL:url];
}
diff --git a/client/tp_assist_macos/src/csrc/ts_cfg.cpp b/client/tp_assist_macos/src/csrc/ts_cfg.cpp
index 55211c6..c90ed0d 100644
--- a/client/tp_assist_macos/src/csrc/ts_cfg.cpp
+++ b/client/tp_assist_macos/src/csrc/ts_cfg.cpp
@@ -46,6 +46,8 @@ bool TsCfg::_load(const ex_astr& str_json) {
return false;
}
+ // ------------ term ---------------------
+
if (!m_root["term"].isObject()) {
EXLOGE("invalid config, error 1.\n");
return false;
@@ -98,6 +100,60 @@ bool TsCfg::_load(const ex_astr& str_json) {
EXLOGE("invalid config, error 6.\n");
return false;
}
+
+ // ------------ RDP ---------------------
+
+ if (!m_root["rdp"].isObject()) {
+ EXLOGE("invalid config, error 1.\n");
+ return false;
+ }
+ if( !m_root["rdp"]["selected"].isString()) {
+ EXLOGE("invalid config, error 2.\n");
+ return false;
+ }
+
+ rdp_name = m_root["rdp"]["selected"].asCString();
+
+ if(!m_root["rdp"]["available"].isArray() || m_root["rdp"]["available"].size() == 0) {
+ EXLOGE("invalid config, error 3.\n");
+ return false;
+ }
+
+ for (i = 0; i < m_root["rdp"]["available"].size(); ++i) {
+
+ if(
+ !m_root["rdp"]["available"][i]["name"].isString()
+ || !m_root["rdp"]["available"][i]["app"].isString()
+ //|| !m_root["rdp"]["available"][i]["profile"].isString()
+ ) {
+ EXLOGE("invalid config, error 4.\n");
+ return false;
+ }
+
+ if(m_root["rdp"]["available"][i]["name"].asCString() != rdp_name)
+ continue;
+
+ if(m_root["rdp"]["available"][i]["disp"].isString()) {
+ rdp_display = m_root["term"]["available"][i]["display"].asCString();
+ } else if(m_root["rdp"]["available"][i]["disp"].isNull()) {
+ m_root["rdp"]["available"][i]["disp"] = rdp_name;
+ rdp_display = rdp_name;
+ } else {
+ EXLOGE("invalid config, error 5.\n");
+ return false;
+ }
+
+ rdp_app = m_root["rdp"]["available"][i]["app"].asCString();
+ //rdp_profile = m_root["rdp"]["available"][i]["profile"].asCString();
+
+ break;
+ }
+
+ if(rdp_name.length() == 0) {
+ EXLOGE("invalid config, error 6.\n");
+ return false;
+ }
+
return true;
}
diff --git a/client/tp_assist_macos/src/csrc/ts_cfg.h b/client/tp_assist_macos/src/csrc/ts_cfg.h
index 3409ed2..f37003d 100644
--- a/client/tp_assist_macos/src/csrc/ts_cfg.h
+++ b/client/tp_assist_macos/src/csrc/ts_cfg.h
@@ -22,6 +22,11 @@ public:
ex_astr term_app;
ex_astr term_profile;
+ ex_astr rdp_name;
+ ex_astr rdp_display;
+ ex_astr rdp_app;
+ //ex_astr rdp_cmdline;
+
protected:
bool _load(const ex_astr& str_json);
diff --git a/client/tp_assist_macos/src/csrc/ts_http_rpc.cpp b/client/tp_assist_macos/src/csrc/ts_http_rpc.cpp
index 3726c82..d697b93 100644
--- a/client/tp_assist_macos/src/csrc/ts_http_rpc.cpp
+++ b/client/tp_assist_macos/src/csrc/ts_http_rpc.cpp
@@ -28,7 +28,7 @@ TsHttpRpc g_http_interface;
void* g_app = NULL;
-void http_rpc_start(void* app) {
+int http_rpc_start(void* app) {
g_app = app;
// if(!g_env.init())
@@ -37,13 +37,16 @@ void http_rpc_start(void* app) {
if (!g_http_interface.init(TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT))
{
EXLOGE("[ERROR] can not start HTTP-RPC listener, maybe port %d is already in use.\n", TS_HTTP_RPC_PORT);
- return;
+ return -1;
}
EXLOGW("======================================================\n");
EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on %s:%d\n", TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT);
- g_http_interface.start();
+ if(!g_http_interface.start())
+ return -2;
+
+ return 0;
}
void http_rpc_stop(void)
@@ -465,19 +468,6 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
ex_astr real_host_ip = jsRoot["remote_host_ip"].asCString();
ex_astr sid = jsRoot["session_id"].asCString();
-// ex_wstr w_exe_path;
-// wchar_t w_szCommandLine[MAX_PATH] = { 0 };
-
-
-// ex_wstr w_sid;
-// ex_astr2wstr(sid, w_sid);
-// ex_wstr w_teleport_ip;
-// ex_astr2wstr(teleport_ip, w_teleport_ip);
-// ex_wstr w_real_host_ip;
-// ex_astr2wstr(real_host_ip, w_real_host_ip);
-// wchar_t w_port[32] = { 0 };
-// ex_wcsformat(w_port, 32, L"%d", teleport_port);
-
ex_astr s_exec;
ex_astrs s_argv;
@@ -487,11 +477,12 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
//==============================================
// RDP
//==============================================
-
- // sorry, RDP not supported yet for macOS.
-// _create_json_ret(buf, TPE_NOT_IMPLEMENT);
-// return;
+ if(g_cfg.rdp_app.length() == 0) {
+ _create_json_ret(buf, TPE_NOT_EXISTS);
+ return;
+ }
+
bool flag_clipboard = (protocol_flag & TP_FLAG_RDP_CLIPBOARD);
bool flag_disk = (protocol_flag & TP_FLAG_RDP_DISK);
bool flag_console = (protocol_flag & TP_FLAG_RDP_CONSOLE);
@@ -554,9 +545,8 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
//w_exe_path = _T("xfreerdp -u {user_name} {size} {console} {clipboard} {drives} ");
//w_exe_path = _T("/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp -u {user_name} {size} {console} ");
//w_exe_path = _T("xfreerdp -u {user_name} {size} {console} ");
- s_exec = "/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp";
- //s_exec = "xfreerdp";
- //s_argv.push_back("xfreerdp");
+ //s_exec = "/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp";
+ s_exec = g_cfg.rdp_app;
s_argv.push_back(s_exec.c_str());
{
diff --git a/client/tp_assist_macos/src/csrc/ts_http_rpc.h b/client/tp_assist_macos/src/csrc/ts_http_rpc.h
index aa7003d..9f5786b 100644
--- a/client/tp_assist_macos/src/csrc/ts_http_rpc.h
+++ b/client/tp_assist_macos/src/csrc/ts_http_rpc.h
@@ -39,7 +39,7 @@ json_param
*/
-void http_rpc_start(void* app);
+int http_rpc_start(void* app);
void http_rpc_stop(void);
typedef std::map
content_type_map;
diff --git a/client/tp_assist_macos/src/tp-assist.default.json b/client/tp_assist_macos/src/tp-assist.default.json
index 55f7cc2..7428afb 100644
--- a/client/tp_assist_macos/src/tp-assist.default.json
+++ b/client/tp_assist_macos/src/tp-assist.default.json
@@ -15,5 +15,16 @@
"profile": "Default"
}
]
+ },
+
+ "rdp": {
+ "selected": "FreeRDP",
+ "available": [
+ {
+ "name": "FreeRDP",
+ "display": "FreeRDP",
+ "app": ""
+ }
+ ]
}
}
diff --git a/client/tp_assist_macos/tp_assist.xcodeproj/project.pbxproj b/client/tp_assist_macos/tp_assist.xcodeproj/project.pbxproj
index 984a2ca..66d8b03 100644
--- a/client/tp_assist_macos/tp_assist.xcodeproj/project.pbxproj
+++ b/client/tp_assist_macos/tp_assist.xcodeproj/project.pbxproj
@@ -278,7 +278,7 @@
C149EBF015D5214600B1F558 /* Project object */ = {
isa = PBXProject;
attributes = {
- LastUpgradeCheck = 0830;
+ LastUpgradeCheck = 0930;
ORGANIZATIONNAME = eomsoft;
};
buildConfigurationList = C149EBF315D5214600B1F558 /* Build configuration list for PBXProject "tp_assist" */;
@@ -400,12 +400,20 @@
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -434,7 +442,7 @@
../../external/mongoose,
../../external/jsoncpp/include,
);
- MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
};
@@ -447,12 +455,20 @@
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
CLANG_WARN_ENUM_CONVERSION = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
CLANG_WARN_UNREACHABLE_CODE = YES;
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
@@ -474,7 +490,7 @@
../../external/mongoose,
../../external/jsoncpp/include,
);
- MACOSX_DEPLOYMENT_TARGET = 10.8;
+ MACOSX_DEPLOYMENT_TARGET = 10.9;
SDKROOT = macosx;
};
name = Release;
diff --git a/common/libex/include/ex/ex_ini.h b/common/libex/include/ex/ex_ini.h
index 746afa2..6efde7d 100644
--- a/common/libex/include/ex/ex_ini.h
+++ b/common/libex/include/ex/ex_ini.h
@@ -42,7 +42,7 @@ public:
int Count(void) const
{
- return m_kvs.size();
+ return (int)m_kvs.size();
}
void Save(FILE* file, int codepage);
#ifdef EX_DEBUG
diff --git a/server/tp_core/protocol/ssh/CMakeLists.txt b/server/tp_core/protocol/ssh/CMakeLists.txt
index d9e7c86..cf7e67a 100644
--- a/server/tp_core/protocol/ssh/CMakeLists.txt
+++ b/server/tp_core/protocol/ssh/CMakeLists.txt
@@ -9,7 +9,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${Project_SOURCE_DIR}/../out/server/x64/bin"
aux_source_directory(. DIR_SSH_SRCS)
aux_source_directory(../../common DIR_SSH_SRCS)
aux_source_directory(../../../../common/libex/src DIR_SSH_SRCS)
-aux_source_directory(../../../../external/jsoncpp/src/lib_json DIR_SRCS)
+aux_source_directory(../../../../external/jsoncpp/src/lib_json DIR_SSH_SRCS)
list(REMOVE_ITEM DIR_SSH_SRCS "./dllmain.cpp")
list(REMOVE_ITEM DIR_SSH_SRCS "./stdafx.cpp")
diff --git a/server/tp_core/protocol/telnet/CMakeLists.txt b/server/tp_core/protocol/telnet/CMakeLists.txt
index e7f25e1..e90cdca 100644
--- a/server/tp_core/protocol/telnet/CMakeLists.txt
+++ b/server/tp_core/protocol/telnet/CMakeLists.txt
@@ -9,7 +9,7 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${Project_SOURCE_DIR}/../out/server/x64/bin"
aux_source_directory(. DIR_TELNET_SRCS)
aux_source_directory(../../common DIR_TELNET_SRCS)
aux_source_directory(../../../../common/libex/src DIR_TELNET_SRCS)
-aux_source_directory(../../../../external/jsoncpp/src/lib_json DIR_SRCS)
+aux_source_directory(../../../../external/jsoncpp/src/lib_json DIR_TELNET_SRCS)
list(REMOVE_ITEM DIR_TELNET_SRCS "./dllmain.cpp")
list(REMOVE_ITEM DIR_TELNET_SRCS "./stdafx.cpp")
diff --git a/server/www/teleport/view/_sidebar_nav_menu.mako b/server/www/teleport/view/_sidebar_nav_menu.mako
index ffb35b5..5ba5476 100644
--- a/server/www/teleport/view/_sidebar_nav_menu.mako
+++ b/server/www/teleport/view/_sidebar_nav_menu.mako
@@ -219,7 +219,7 @@
服务端:v${app_ver.TP_SERVER_VER}
助手:
- 技术预览版
+ beta版