|
@ -12,25 +12,27 @@
|
||||||
# for CMake
|
# for CMake
|
||||||
CMakeFiles
|
CMakeFiles
|
||||||
cmake_install.cmake
|
cmake_install.cmake
|
||||||
Makefile
|
|
||||||
cmake-build
|
cmake-build
|
||||||
cmake-build-debug
|
cmake-build-debug
|
||||||
client/tp_assist_macos/build
|
client/tp_assist_macos/build
|
||||||
|
**/xcode_build
|
||||||
|
**/DerivedData
|
||||||
|
|
||||||
# for Python
|
# for Python
|
||||||
__pycache__
|
__pycache__
|
||||||
*.pyc
|
*.pyc
|
||||||
|
|
||||||
|
|
||||||
# for pyCharm
|
# for JetBrains IDEs.
|
||||||
**/.idea/workspace.xml
|
**/.idea/workspace.xml
|
||||||
**/.idea/misc.xml
|
**/.idea/misc.xml
|
||||||
**/.idea/modules.xml
|
|
||||||
**/.idea/dictionaries
|
**/.idea/dictionaries
|
||||||
**/.idea/watcherTasks.xml
|
**/.idea/watcherTasks.xml
|
||||||
**/.idea/inspectionProfiles
|
**/.idea/inspectionProfiles
|
||||||
**/.idea/vcs.xml
|
|
||||||
**/.idea/codeStyles
|
**/.idea/codeStyles
|
||||||
|
**/.idea/inspectionProfiles
|
||||||
|
**/.idea/vcs.xml
|
||||||
|
**/.idea/modules.xml
|
||||||
|
|
||||||
*.css.map
|
*.css.map
|
||||||
|
|
||||||
|
@ -44,15 +46,13 @@ __pycache__
|
||||||
/external/openssl
|
/external/openssl
|
||||||
/external/python
|
/external/python
|
||||||
/external/libssh
|
/external/libssh
|
||||||
/external/libssh-win-static/include/libssh
|
|
||||||
/external/libssh-win-static/src
|
|
||||||
/external/libssh-win-static/lib
|
|
||||||
/external/mbedtls
|
/external/mbedtls
|
||||||
/external/sqlite
|
/external/sqlite
|
||||||
/external/libuv
|
/external/libuv
|
||||||
/client/tools/putty
|
/client/tools/putty
|
||||||
/client/tools/winscp
|
/client/tools/winscp
|
||||||
/client/tp_assist_macos/DerivedData
|
/server/**/test/
|
||||||
|
/server/**/tests/
|
||||||
|
|
||||||
# for dist folder
|
# for dist folder
|
||||||
**/_tmp_
|
**/_tmp_
|
||||||
|
@ -71,6 +71,7 @@ __pycache__
|
||||||
# for generated files.
|
# for generated files.
|
||||||
/config.ini
|
/config.ini
|
||||||
/build.bat
|
/build.bat
|
||||||
|
/build.sh
|
||||||
|
|
||||||
# for not finished code
|
# for not finished code
|
||||||
/common/libex/test
|
/common/libex/test
|
||||||
|
@ -84,7 +85,7 @@ __pycache__
|
||||||
# for MacOS.
|
# for MacOS.
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
||||||
# Xcode
|
# for Xcode
|
||||||
build/*
|
build/*
|
||||||
*.pbxuser
|
*.pbxuser
|
||||||
!default.pbxuser
|
!default.pbxuser
|
||||||
|
@ -100,4 +101,4 @@ xcuserdata
|
||||||
profile
|
profile
|
||||||
*.moved-aside
|
*.moved-aside
|
||||||
/server/share/tmp
|
/server/share/tmp
|
||||||
/build.sh
|
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="Encoding">
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/include/ex/ex_log.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/include/ex/ex_path.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/include/ex/ex_thread.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/include/ex/ex_util.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/src/ex_ini.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/src/ex_log.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/libex/src/ex_util.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/pyshell/include/pys.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/pyshell/src/pys_api.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/pyshell/src/pys_core.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/common/teleport/teleport_const.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/base_env.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/base_record.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/base_record.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/protocol_interface.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/ts_const.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/ts_membuf.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/ts_membuf.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/common/ts_memstream.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/main.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_env.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_http_rpc.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_http_rpc.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_main.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_session.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_session.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_web_rpc.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/core/ts_web_rpc.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/rdp/rdp_conn.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/rdp/rdp_conn.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/rdp/rdp_proxy.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/rdp/rdp_session.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/rdp/rdp_session.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_proxy.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_proxy.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_recorder.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_recorder.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_session.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/ssh/ssh_session.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/telnet/telnet_conn.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/telnet/telnet_conn.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/telnet/telnet_proxy.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/telnet/telnet_session.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_core/protocol/telnet/telnet_session.h" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_web/src/main.cpp" charset="GBK" />
|
||||||
|
<file url="file://$PROJECT_DIR$/server/tp_web/src/ts_env.cpp" charset="GBK" />
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<module classpath="CMake" type="CPP_MODULE" version="4" />
|
|
@ -0,0 +1,29 @@
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
|
||||||
|
MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")
|
||||||
|
MESSAGE(STATUS "root source directory is ${PROJECT_SOURCE_DIR}")
|
||||||
|
MESSAGE(STATUS "current source directory is ${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
|
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/x64/bin")
|
||||||
|
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/out/server/x64/bin")
|
||||||
|
|
||||||
|
set(CMAKE_CONFIGURATION_TYPES Debug Release)
|
||||||
|
|
||||||
|
# Determine the platform.
|
||||||
|
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||||
|
MESSAGE(STATUS "build on macOS...")
|
||||||
|
set(OS_MACOS 1)
|
||||||
|
set(OS_POSIX 1)
|
||||||
|
set(TP_EXTERNAL_RELEASE_DIR "${PROJECT_SOURCE_DIR}/external/macos/release")
|
||||||
|
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
|
set(OS_LINUX 1)
|
||||||
|
set(OS_POSIX 1)
|
||||||
|
MESSAGE(STATUS "build on Linux...")
|
||||||
|
# add_subdirectory(server/tp_web/src)
|
||||||
|
set(TP_EXTERNAL_RELEASE_DIR "${PROJECT_SOURCE_DIR}/external/linux/release")
|
||||||
|
elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
|
||||||
|
# MESSAGE(FATAL_ERROR "unsupported platform: Windows")
|
||||||
|
else ()
|
||||||
|
MESSAGE(FATAL_ERROR "unsupported platform: ${CMAKE_SYSTEM_NAME}")
|
||||||
|
endif ()
|
||||||
|
|
|
@ -0,0 +1,43 @@
|
||||||
|
cmake_minimum_required(VERSION 3.5)
|
||||||
|
project(teleport)
|
||||||
|
|
||||||
|
include(CMakeCfg.txt)
|
||||||
|
|
||||||
|
#MESSAGE(STATUS "operation system is ${CMAKE_SYSTEM}")
|
||||||
|
#MESSAGE(STATUS "current source directory is ${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
#
|
||||||
|
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/out/server/x64/bin")
|
||||||
|
#set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/out/server/x64/bin")
|
||||||
|
#
|
||||||
|
#set(CMAKE_CONFIGURATION_TYPES Debug Release)
|
||||||
|
#
|
||||||
|
## Determine the platform.
|
||||||
|
#if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||||
|
# MESSAGE(STATUS "build on macOS...")
|
||||||
|
# set(OS_MACOS 1)
|
||||||
|
# set(OS_POSIX 1)
|
||||||
|
# set(TP_EXTERNAL_RELEASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/macos/release")
|
||||||
|
#elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||||
|
# set(OS_LINUX 1)
|
||||||
|
# set(OS_POSIX 1)
|
||||||
|
# MESSAGE(STATUS "build on Linux...")
|
||||||
|
# add_subdirectory(server/tp_web/src)
|
||||||
|
# set(TP_EXTERNAL_RELEASE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/external/linux/release")
|
||||||
|
#elseif ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
|
||||||
|
# # MESSAGE(FATAL_ERROR "unsupported platform: Windows")
|
||||||
|
#else ()
|
||||||
|
# MESSAGE(FATAL_ERROR "unsupported platform: ${CMAKE_SYSTEM_NAME}")
|
||||||
|
#endif ()
|
||||||
|
|
||||||
|
if (OS_LINUX)
|
||||||
|
add_subdirectory(server/tp_web/src)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_subdirectory(server/tp_core/core)
|
||||||
|
add_subdirectory(server/tp_core/protocol/ssh)
|
||||||
|
add_subdirectory(server/tp_core/protocol/telnet)
|
||||||
|
#add_subdirectory(server/testssh/testssh)
|
||||||
|
|
||||||
|
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/server/tp_core/protocol/rdp")
|
||||||
|
add_subdirectory(server/tp_core/protocol/rdp)
|
||||||
|
endif ()
|
22
build.sh.in
|
@ -16,14 +16,32 @@ function on_error()
|
||||||
|
|
||||||
function build_linux
|
function build_linux
|
||||||
{
|
{
|
||||||
|
if [ `id -u` -eq 0 ]; then
|
||||||
|
on_error "Do not build as root."
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "/etc/centos-release" ] ; then
|
||||||
|
on_error "Sorry, build script works on CentOS 7 only."
|
||||||
|
fi
|
||||||
|
|
||||||
|
X=$(yum list installed | grep "libffi-devel")
|
||||||
|
if [ "$X-x" = "-x" ] ; then
|
||||||
|
on_error "Need libffi-devel to build Python, try:\r\n sudo yum install libffi-devel"
|
||||||
|
fi
|
||||||
|
|
||||||
|
X=$(yum list installed | grep "zlib-devel")
|
||||||
|
if [ "$X-x" = "-x" ] ; then
|
||||||
|
on_error "Need zlib-devel to build Python, try:\r\n sudo yum install zlib-devel"
|
||||||
|
fi
|
||||||
|
|
||||||
PYEXEC=${PATH_ROOT}/external/linux/release/bin/python3.7
|
PYEXEC=${PATH_ROOT}/external/linux/release/bin/python3.7
|
||||||
PYSTATIC=${PATH_ROOT}/external/linux/release/lib/libpython3.7m.a
|
PYSTATIC=${PATH_ROOT}/external/linux/release/lib/libpython3.7m.a
|
||||||
|
|
||||||
if [ ! -f "${PYSTATIC}" ]; then
|
if [ ! -f "${PYSTATIC}" ] ; then
|
||||||
echo "python static not found, now build it..."
|
echo "python static not found, now build it..."
|
||||||
"${PATH_ROOT}/build/build-py-static.sh"
|
"${PATH_ROOT}/build/build-py-static.sh"
|
||||||
|
|
||||||
if [ ! -f "${PYSTATIC}" ]; then
|
if [ ! -f "${PYSTATIC}" ] ; then
|
||||||
on_error "can not build python static."
|
on_error "can not build python static."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<module type="PYTHON_MODULE" version="4">
|
<module type="PYTHON_MODULE" version="4">
|
||||||
<component name="NewModuleRootManager">
|
<component name="NewModuleRootManager">
|
||||||
<content url="file://$MODULE_DIR$/builder">
|
<content url="file://$MODULE_DIR$/builder" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/builder" isTestSource="false" />
|
<orderEntry type="inheritedJdk" />
|
||||||
</content>
|
|
||||||
<orderEntry type="jdk" jdkName="py37" jdkType="Python SDK" />
|
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
</component>
|
</component>
|
||||||
<component name="TestRunnerService">
|
<component name="TestRunnerService">
|
||||||
|
|
|
@ -29,7 +29,7 @@ class BuilderWin(BuilderBase):
|
||||||
|
|
||||||
def build_exe(self):
|
def build_exe(self):
|
||||||
cc.i('build tp_assist...')
|
cc.i('build tp_assist...')
|
||||||
sln_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'client', 'tp_assist_win', 'tp_assist.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'client', ctx.bits_path, ctx.target_path, 'tp_assist.exe')
|
out_file = os.path.join(env.root_path, 'out', 'client', ctx.bits_path, ctx.target_path, 'tp_assist.exe')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -74,7 +74,11 @@ class BuilderWin(BuilderBase):
|
||||||
utils.makedirs(tmp_cfg_path)
|
utils.makedirs(tmp_cfg_path)
|
||||||
|
|
||||||
utils.copy_file(os.path.join(env.root_path, 'out', 'client', ctx.bits_path, ctx.target_path), tmp_app_path, 'tp_assist.exe')
|
utils.copy_file(os.path.join(env.root_path, 'out', 'client', ctx.bits_path, ctx.target_path), tmp_app_path, 'tp_assist.exe')
|
||||||
utils.copy_file(os.path.join(env.root_path, 'client', 'tp_assist_win', 'cfg'), tmp_cfg_path, ('tp-assist.default.json', 'tp-assist.json'))
|
utils.copy_file(os.path.join(env.root_path, 'client', 'cfg'), tmp_cfg_path, ('tp-assist.windows.json', 'tp-assist.json'))
|
||||||
|
|
||||||
|
utils.copy_file(os.path.join(env.root_path, 'client', 'cfg'), tmp_cfg_path, 'cacert.cer')
|
||||||
|
utils.copy_file(os.path.join(env.root_path, 'client', 'cfg'), tmp_cfg_path, 'localhost.key')
|
||||||
|
utils.copy_file(os.path.join(env.root_path, 'client', 'cfg'), tmp_cfg_path, 'localhost.pem')
|
||||||
|
|
||||||
utils.copy_ex(os.path.join(env.root_path, 'client', 'tp_assist_win'), tmp_app_path, 'site')
|
utils.copy_ex(os.path.join(env.root_path, 'client', 'tp_assist_win'), tmp_app_path, 'site')
|
||||||
|
|
||||||
|
@ -106,28 +110,23 @@ class BuilderMacOS(BuilderBase):
|
||||||
|
|
||||||
configuration = ctx.target_path.capitalize()
|
configuration = ctx.target_path.capitalize()
|
||||||
|
|
||||||
proj_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'tp_assist.xcodeproj')
|
proj_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'TP-Assist.xcodeproj')
|
||||||
out_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'build', ctx.target_path, 'tp_assist.app')
|
out_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'build', configuration, 'TP-Assist.app')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
utils.xcode_build(proj_file, 'tp_assist', configuration, False)
|
utils.xcode_build(proj_file, 'TP-Assist', configuration, False)
|
||||||
utils.ensure_file_exists(os.path.join(out_file, 'Contents', 'Info.plist'))
|
utils.ensure_file_exists(os.path.join(out_file, 'Contents', 'Info.plist'))
|
||||||
|
|
||||||
def build_installer(self):
|
def build_installer(self):
|
||||||
cc.e('assist for macOS does not need an installer, you should make an .DMG file for release...')
|
cc.i('make tp_assist dmg file...')
|
||||||
|
|
||||||
# name = 'teleport-assist-{}-{}'.format(ctx.dist, VER_TP_ASSIST)
|
json_file = os.path.join(env.root_path, 'dist', 'client', 'macos', 'dmg.json')
|
||||||
#
|
dmg_file = os.path.join(env.root_path, 'out', 'client', 'macos', 'teleport-assist-macos-{}.dmg'.format(VER_TP_ASSIST))
|
||||||
# out_path = os.path.join(env.root_path, 'out', 'installer')
|
if os.path.exists(dmg_file):
|
||||||
# utils.makedirs(out_path)
|
utils.remove(dmg_file)
|
||||||
#
|
|
||||||
# out_file = os.path.join(out_path, '{}.exe'.format(name))
|
|
||||||
# utils.remove(out_file)
|
|
||||||
#
|
|
||||||
# self._build_installer()
|
|
||||||
#
|
|
||||||
# utils.ensure_file_exists(out_file)
|
|
||||||
|
|
||||||
|
utils.make_dmg(json_file, dmg_file)
|
||||||
|
utils.ensure_file_exists(dmg_file)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _build_installer():
|
def _build_installer():
|
||||||
|
|
|
@ -48,12 +48,12 @@ class BuilderBase:
|
||||||
self._build_openssl(file_name)
|
self._build_openssl(file_name)
|
||||||
|
|
||||||
def _build_openssl(self, file_name):
|
def _build_openssl(self, file_name):
|
||||||
_alt_ver = '_'.join(env.ver_openssl.split('.'))
|
_alt_ver = '_'.join(env.ver_ossl.split('.'))
|
||||||
if not utils.download_file('openssl source tarball', 'https://github.com/openssl/openssl/archive/OpenSSL_{}.zip'.format(_alt_ver), PATH_DOWNLOAD, file_name):
|
if not utils.download_file('openssl source tarball', 'https://github.com/openssl/openssl/archive/OpenSSL_{}.zip'.format(_alt_ver), PATH_DOWNLOAD, file_name):
|
||||||
|
cc.e("can not download openssl source tarball.")
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
# cc.e("this is a pure-virtual function.")
|
|
||||||
|
|
||||||
def build_libuv(self):
|
def build_libuv(self):
|
||||||
file_name = 'libuv-{}.zip'.format(env.ver_libuv)
|
file_name = 'libuv-{}.zip'.format(env.ver_libuv)
|
||||||
|
@ -88,15 +88,6 @@ class BuilderBase:
|
||||||
def _prepare_python(self):
|
def _prepare_python(self):
|
||||||
cc.e("this is a pure-virtual function.")
|
cc.e("this is a pure-virtual function.")
|
||||||
|
|
||||||
# def build_sqlite(self):
|
|
||||||
# file_name = 'sqlite-autoconf-{}.tar.gz'.format(env.ver_sqlite)
|
|
||||||
# if not utils.download_file('sqlite source tarball', 'http://sqlite.org/2017/{}'.format(file_name), PATH_DOWNLOAD, file_name):
|
|
||||||
# return
|
|
||||||
# self._build_sqlite(file_name)
|
|
||||||
#
|
|
||||||
# def _build_sqlite(self, file_name):
|
|
||||||
# cc.e("this is a pure-virtual function.")
|
|
||||||
|
|
||||||
def fix_output(self):
|
def fix_output(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -111,11 +102,8 @@ class BuilderWin(BuilderBase):
|
||||||
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
||||||
self.MBEDTLS_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mbedtls')
|
self.MBEDTLS_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mbedtls')
|
||||||
self.LIBUV_PATH_SRC = os.path.join(PATH_EXTERNAL, 'libuv')
|
self.LIBUV_PATH_SRC = os.path.join(PATH_EXTERNAL, 'libuv')
|
||||||
# self.LIBSSH_PATH_SRC = os.path.join(PATH_EXTERNAL, 'libssh-win-static')
|
|
||||||
self.LIBSSH_PATH_SRC = os.path.join(PATH_EXTERNAL, 'libssh')
|
self.LIBSSH_PATH_SRC = os.path.join(PATH_EXTERNAL, 'libssh')
|
||||||
|
|
||||||
# self._prepare_python_header()
|
|
||||||
|
|
||||||
def _prepare_python(self):
|
def _prepare_python(self):
|
||||||
cc.n('prepare python header files ...', end='')
|
cc.n('prepare python header files ...', end='')
|
||||||
|
|
||||||
|
@ -124,12 +112,6 @@ class BuilderWin(BuilderBase):
|
||||||
return
|
return
|
||||||
cc.v('')
|
cc.v('')
|
||||||
|
|
||||||
# if os.path.exists(os.path.join(env.path_py_inc, 'Python.h')):
|
|
||||||
# cc.e('can not locate python development include path, make sure miniconda installed.')
|
|
||||||
# return
|
|
||||||
# cc.v('')
|
|
||||||
# utils.copy_ex(env.path_py_inc, os.path.join(PATH_EXTERNAL, 'python', 'include'))
|
|
||||||
|
|
||||||
_header_path = None
|
_header_path = None
|
||||||
for p in sys.path:
|
for p in sys.path:
|
||||||
if os.path.exists(os.path.join(p, 'include', 'Python.h')):
|
if os.path.exists(os.path.join(p, 'include', 'Python.h')):
|
||||||
|
@ -145,8 +127,7 @@ class BuilderWin(BuilderBase):
|
||||||
def _build_openssl(self, file_name):
|
def _build_openssl(self, file_name):
|
||||||
cc.n('build openssl static library from source code... ')
|
cc.n('build openssl static library from source code... ')
|
||||||
|
|
||||||
_alt_ver = '_'.join(env.ver_ossl.split('.'))
|
if not super()._build_openssl(file_name):
|
||||||
if not utils.download_file('openssl source tarball', 'https://github.com/openssl/openssl/archive/OpenSSL_{}.zip'.format(_alt_ver), PATH_DOWNLOAD, file_name):
|
|
||||||
return
|
return
|
||||||
|
|
||||||
_chk_output = [
|
_chk_output = [
|
||||||
|
@ -180,7 +161,10 @@ class BuilderWin(BuilderBase):
|
||||||
os.chdir(self.OPENSSL_PATH_SRC)
|
os.chdir(self.OPENSSL_PATH_SRC)
|
||||||
os.system('""{}" Configure VC-WIN32"'.format(env.perl))
|
os.system('""{}" Configure VC-WIN32"'.format(env.perl))
|
||||||
os.system(r'ms\do_nasm')
|
os.system(r'ms\do_nasm')
|
||||||
os.system(r'"{}\VC\bin\vcvars32.bat" && nmake -f ms\nt.mak'.format(env.visual_studio_path))
|
# for vs2015
|
||||||
|
# utils.sys_exec(r'"{}\VC\bin\vcvars32.bat" && nmake -f ms\nt.mak'.format(env.visual_studio_path), direct_output=True)
|
||||||
|
# for vs2017 community
|
||||||
|
utils.sys_exec(r'"{}VC\Auxiliary\Build\vcvars32.bat" && nmake -f ms\nt.mak'.format(env.visual_studio_path), direct_output=True)
|
||||||
|
|
||||||
for f in _chk_output:
|
for f in _chk_output:
|
||||||
if not os.path.exists(f):
|
if not os.path.exists(f):
|
||||||
|
@ -194,24 +178,28 @@ class BuilderWin(BuilderBase):
|
||||||
utils.unzip(os.path.join(PATH_DOWNLOAD, file_name), PATH_EXTERNAL)
|
utils.unzip(os.path.join(PATH_DOWNLOAD, file_name), PATH_EXTERNAL)
|
||||||
os.rename(os.path.join(PATH_EXTERNAL, 'libssh-{}'.format(env.ver_libssh)), self.LIBSSH_PATH_SRC)
|
os.rename(os.path.join(PATH_EXTERNAL, 'libssh-{}'.format(env.ver_libssh)), self.LIBSSH_PATH_SRC)
|
||||||
|
|
||||||
|
# cc.n('fix libssh source code... ', end='')
|
||||||
|
# utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', 'src', 'sftp.c'))
|
||||||
|
# utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'sftp.c')
|
||||||
cc.n('fix libssh source code... ', end='')
|
cc.n('fix libssh source code... ', end='')
|
||||||
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', 'src', 'sftp.c'))
|
s_name = 'libssh-{}'.format(env.ver_libssh)
|
||||||
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'sftp.c')
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
|
||||||
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
|
||||||
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
|
||||||
|
|
||||||
out_file_lib = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.lib')
|
out_file_lib = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.lib')
|
||||||
out_file_dll = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.dll')
|
out_file_dll = os.path.join(self.LIBSSH_PATH_SRC, 'lib', ctx.target_path, 'ssh.dll')
|
||||||
|
|
||||||
need_build = False
|
if os.path.exists(out_file_lib) and os.path.exists(out_file_dll):
|
||||||
if not (os.path.exists(out_file_lib) and (os.path.exists(out_file_dll))):
|
|
||||||
need_build = True
|
|
||||||
|
|
||||||
if not need_build:
|
|
||||||
cc.w('already exists, skip.')
|
cc.w('already exists, skip.')
|
||||||
return
|
return
|
||||||
cc.v('')
|
cc.v('')
|
||||||
|
|
||||||
cc.w('On Windows, when build libssh, need you use cmake-gui.exe to generate solution file')
|
cc.w('On Windows, when build libssh, need you use cmake-gui.exe to generate solution file')
|
||||||
cc.w('for Visual Studio 2015. Visit https://docs.tp4a.com for more details.')
|
cc.w('for Visual Studio 2017. Visit https://docs.tp4a.com for more details.')
|
||||||
cc.w('\nOnce the libssh.sln generated, press Enter to continue or Q to quit...', end='')
|
cc.w('\nOnce the libssh.sln generated, press Enter to continue or Q to quit...', end='')
|
||||||
try:
|
try:
|
||||||
x = env.input()
|
x = env.input()
|
||||||
|
@ -275,10 +263,6 @@ class BuilderWin(BuilderBase):
|
||||||
else:
|
else:
|
||||||
cc.w('already exists, skip.')
|
cc.w('already exists, skip.')
|
||||||
|
|
||||||
# def build_sqlite(self):
|
|
||||||
# cc.w('sqlite not need for Windows, skip.')
|
|
||||||
# pass
|
|
||||||
|
|
||||||
def fix_output(self):
|
def fix_output(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -290,11 +274,9 @@ class BuilderLinux(BuilderBase):
|
||||||
def _init_path(self):
|
def _init_path(self):
|
||||||
self.PATH_TMP = os.path.join(PATH_EXTERNAL, 'linux', 'tmp')
|
self.PATH_TMP = os.path.join(PATH_EXTERNAL, 'linux', 'tmp')
|
||||||
self.PATH_RELEASE = os.path.join(PATH_EXTERNAL, 'linux', 'release')
|
self.PATH_RELEASE = os.path.join(PATH_EXTERNAL, 'linux', 'release')
|
||||||
# self.OPENSSL_PATH_SRC = os.path.join(self.PATH_TMP, 'openssl-{}'.format(env.ver_ossl))
|
|
||||||
self.LIBUV_PATH_SRC = os.path.join(self.PATH_TMP, 'libuv-{}'.format(env.ver_libuv))
|
self.LIBUV_PATH_SRC = os.path.join(self.PATH_TMP, 'libuv-{}'.format(env.ver_libuv))
|
||||||
self.MBEDTLS_PATH_SRC = os.path.join(self.PATH_TMP, 'mbedtls-mbedtls-{}'.format(env.ver_mbedtls))
|
self.MBEDTLS_PATH_SRC = os.path.join(self.PATH_TMP, 'mbedtls-mbedtls-{}'.format(env.ver_mbedtls))
|
||||||
self.LIBSSH_PATH_SRC = os.path.join(self.PATH_TMP, 'libssh-{}'.format(env.ver_libssh))
|
self.LIBSSH_PATH_SRC = os.path.join(self.PATH_TMP, 'libssh-{}'.format(env.ver_libssh))
|
||||||
# self.SQLITE_PATH_SRC = os.path.join(self.PATH_TMP, 'sqlite-autoconf-{}'.format(env.ver_sqlite))
|
|
||||||
|
|
||||||
self.JSONCPP_PATH_SRC = os.path.join(PATH_EXTERNAL, 'jsoncpp')
|
self.JSONCPP_PATH_SRC = os.path.join(PATH_EXTERNAL, 'jsoncpp')
|
||||||
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
||||||
|
@ -309,8 +291,6 @@ class BuilderLinux(BuilderBase):
|
||||||
cc.w(' - header file already exists, skip.')
|
cc.w(' - header file already exists, skip.')
|
||||||
else:
|
else:
|
||||||
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'include', 'python{}m'.format(ctx.py_dot_ver), 'Python.h'))
|
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'include', 'python{}m'.format(ctx.py_dot_ver), 'Python.h'))
|
||||||
# utils.makedirs(os.path.join(self.PATH_RELEASE, 'include'))
|
|
||||||
# utils.copy_ex(env.path_py_inc, os.path.join(self.PATH_RELEASE, 'include', 'python'))
|
|
||||||
utils.sys_exec('ln -s "{}" "{}"'.format(
|
utils.sys_exec('ln -s "{}" "{}"'.format(
|
||||||
os.path.join(self.PATH_RELEASE, 'include', 'python{}m'.format(ctx.py_dot_ver)),
|
os.path.join(self.PATH_RELEASE, 'include', 'python{}m'.format(ctx.py_dot_ver)),
|
||||||
os.path.join(self.PATH_RELEASE, 'include', 'python')
|
os.path.join(self.PATH_RELEASE, 'include', 'python')
|
||||||
|
@ -318,13 +298,6 @@ class BuilderLinux(BuilderBase):
|
||||||
|
|
||||||
lib_file = 'libpython{}m.a'.format(env.py_ver_dot)
|
lib_file = 'libpython{}m.a'.format(env.py_ver_dot)
|
||||||
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'lib', lib_file))
|
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'lib', lib_file))
|
||||||
# if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', lib_file)):
|
|
||||||
# cc.w(' - lib file already exists, skip.')
|
|
||||||
# else:
|
|
||||||
# utils.makedirs(os.path.join(self.PATH_RELEASE, 'lib'))
|
|
||||||
# utils.copy_file(env.path_py_lib, os.path.join(self.PATH_RELEASE, 'lib'), lib_file)
|
|
||||||
# utils.copy_file(env.path_py_lib, os.path.join(self.PATH_RELEASE, 'lib'), 'libcrypto.a')
|
|
||||||
# utils.copy_file(env.path_py_lib, os.path.join(self.PATH_RELEASE, 'lib'), 'libssl.a')
|
|
||||||
|
|
||||||
def _build_jsoncpp(self, file_name):
|
def _build_jsoncpp(self, file_name):
|
||||||
cc.n('prepare jsoncpp source code...', end='')
|
cc.n('prepare jsoncpp source code...', end='')
|
||||||
|
@ -349,7 +322,6 @@ class BuilderLinux(BuilderBase):
|
||||||
|
|
||||||
def _build_libuv(self, file_name):
|
def _build_libuv(self, file_name):
|
||||||
if not os.path.exists(self.LIBUV_PATH_SRC):
|
if not os.path.exists(self.LIBUV_PATH_SRC):
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, PATH_TMP))
|
|
||||||
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
|
|
||||||
cc.n('build libuv...', end='')
|
cc.n('build libuv...', end='')
|
||||||
|
@ -377,7 +349,6 @@ class BuilderLinux(BuilderBase):
|
||||||
|
|
||||||
def _build_mbedtls(self, file_name):
|
def _build_mbedtls(self, file_name):
|
||||||
if not os.path.exists(self.MBEDTLS_PATH_SRC):
|
if not os.path.exists(self.MBEDTLS_PATH_SRC):
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, PATH_TMP))
|
|
||||||
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
|
|
||||||
cc.n('build mbedtls...', end='')
|
cc.n('build mbedtls...', end='')
|
||||||
|
@ -408,45 +379,6 @@ class BuilderLinux(BuilderBase):
|
||||||
f.writelines(fl)
|
f.writelines(fl)
|
||||||
f.close()
|
f.close()
|
||||||
|
|
||||||
# # fix config.h
|
|
||||||
# mkfile = os.path.join(self.MBEDTLS_PATH_SRC, 'include', 'mbedtls', 'config.h')
|
|
||||||
# f = open(mkfile)
|
|
||||||
# fl = f.readlines()
|
|
||||||
# f.close()
|
|
||||||
#
|
|
||||||
# for i in range(len(fl)):
|
|
||||||
# if fl[i].find('#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_KEY_EXCHANGE_ECDHE_PSK_ENABLED\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_KEY_EXCHANGE_ECDHE_RSA_ENABLED\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_KEY_EXCHANGE_ECDHE_ECDSA_ENABLED\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_KEY_EXCHANGE_ECDH_ECDSA_ENABLED\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_KEY_EXCHANGE_ECDH_RSA_ENABLED\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_SELF_TEST') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_SELF_TEST\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_SSL_RENEGOTIATION') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_SSL_RENEGOTIATION\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_ECDH_C') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_ECDH_C\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_ECDSA_C') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_ECDSA_C\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_ECP_C') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_ECP_C\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_NET_C') >= 0:
|
|
||||||
# fl[i] = '//#define MBEDTLS_NET_C\n'
|
|
||||||
#
|
|
||||||
# elif fl[i].find('#define MBEDTLS_RSA_NO_CRT') >= 0:
|
|
||||||
# fl[i] = '#define MBEDTLS_RSA_NO_CRT\n'
|
|
||||||
# elif fl[i].find('#define MBEDTLS_SSL_PROTO_SSL3') >= 0:
|
|
||||||
# fl[i] = '#define MBEDTLS_SSL_PROTO_SSL3\n'
|
|
||||||
#
|
|
||||||
# f = open(mkfile, 'w')
|
|
||||||
# f.writelines(fl)
|
|
||||||
# f.close()
|
|
||||||
|
|
||||||
# fix source file
|
# fix source file
|
||||||
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'mbedtls', 'include', 'mbedtls', 'config.h'))
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'mbedtls', 'include', 'mbedtls', 'config.h'))
|
||||||
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'mbedtls', 'include', 'mbedtls'), os.path.join(self.MBEDTLS_PATH_SRC, 'include', 'mbedtls'), 'config.h')
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'mbedtls', 'include', 'mbedtls'), os.path.join(self.MBEDTLS_PATH_SRC, 'include', 'mbedtls'), 'config.h')
|
||||||
|
@ -469,6 +401,15 @@ class BuilderLinux(BuilderBase):
|
||||||
return
|
return
|
||||||
cc.v('')
|
cc.v('')
|
||||||
|
|
||||||
|
cc.n('fix libssh source code... ', end='')
|
||||||
|
s_name = 'libssh-{}'.format(env.ver_libssh)
|
||||||
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'session.c'))
|
||||||
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto.c'))
|
||||||
|
utils.ensure_file_exists(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src', 'libcrypto-compat.c'))
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'session.c')
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto.c')
|
||||||
|
utils.copy_file(os.path.join(PATH_EXTERNAL, 'fix-external', 'libssh', s_name, 'src'), os.path.join(self.LIBSSH_PATH_SRC, 'src'), 'libcrypto-compat.c')
|
||||||
|
|
||||||
build_path = os.path.join(self.LIBSSH_PATH_SRC, 'build')
|
build_path = os.path.join(self.LIBSSH_PATH_SRC, 'build')
|
||||||
|
|
||||||
cmake_define = ' -DCMAKE_INSTALL_PREFIX={path_release}' \
|
cmake_define = ' -DCMAKE_INSTALL_PREFIX={path_release}' \
|
||||||
|
@ -495,10 +436,6 @@ class BuilderLinux(BuilderBase):
|
||||||
pass
|
pass
|
||||||
os.chdir(old_p)
|
os.chdir(old_p)
|
||||||
|
|
||||||
# utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'libssh.a'))
|
|
||||||
# utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src'), os.path.join(self.PATH_RELEASE, 'lib'), 'libssh.a')
|
|
||||||
# utils.copy_ex(os.path.join(self.LIBSSH_PATH_SRC, 'include'), os.path.join(self.PATH_RELEASE, 'include'), 'libssh')
|
|
||||||
|
|
||||||
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh.a'))
|
utils.ensure_file_exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh.a'))
|
||||||
files = os.listdir(os.path.join(self.PATH_RELEASE, 'lib'))
|
files = os.listdir(os.path.join(self.PATH_RELEASE, 'lib'))
|
||||||
for i in files:
|
for i in files:
|
||||||
|
@ -506,32 +443,8 @@ class BuilderLinux(BuilderBase):
|
||||||
# use os.unlink() because some file should be a link.
|
# use os.unlink() because some file should be a link.
|
||||||
os.unlink(os.path.join(self.PATH_RELEASE, 'lib', i))
|
os.unlink(os.path.join(self.PATH_RELEASE, 'lib', i))
|
||||||
|
|
||||||
# def _build_sqlite(self, file_name):
|
|
||||||
# if not os.path.exists(self.SQLITE_PATH_SRC):
|
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
|
||||||
#
|
|
||||||
# cc.n('build sqlite static...', end='')
|
|
||||||
# if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libsqlite3.a')):
|
|
||||||
# cc.w('already exists, skip.')
|
|
||||||
# return
|
|
||||||
# cc.v('')
|
|
||||||
#
|
|
||||||
# old_p = os.getcwd()
|
|
||||||
# os.chdir(self.SQLITE_PATH_SRC)
|
|
||||||
# os.system('./configure --prefix={}'.format(self.PATH_RELEASE))
|
|
||||||
# os.system('make')
|
|
||||||
# os.system('make install')
|
|
||||||
# os.chdir(old_p)
|
|
||||||
|
|
||||||
def fix_output(self):
|
def fix_output(self):
|
||||||
pass
|
pass
|
||||||
# remove .so files, otherwise will link to .so but not .a in default.
|
|
||||||
# rm = ['libsqlite3.la', 'libsqlite3.so.0', 'libsqlite3.so', 'libsqlite3.so.0.8.6', 'libuv.la', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
|
||||||
# rm = ['libuv.la', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
|
||||||
# for i in rm:
|
|
||||||
# _path = os.path.join(self.PATH_RELEASE, 'lib', i)
|
|
||||||
# if os.path.exists(_path):
|
|
||||||
# utils.remove(_path)
|
|
||||||
|
|
||||||
|
|
||||||
class BuilderMacOS(BuilderBase):
|
class BuilderMacOS(BuilderBase):
|
||||||
|
@ -541,11 +454,10 @@ class BuilderMacOS(BuilderBase):
|
||||||
def _init_path(self):
|
def _init_path(self):
|
||||||
self.PATH_TMP = os.path.join(PATH_EXTERNAL, 'macos', 'tmp')
|
self.PATH_TMP = os.path.join(PATH_EXTERNAL, 'macos', 'tmp')
|
||||||
self.PATH_RELEASE = os.path.join(PATH_EXTERNAL, 'macos', 'release')
|
self.PATH_RELEASE = os.path.join(PATH_EXTERNAL, 'macos', 'release')
|
||||||
# self.OPENSSL_PATH_SRC = os.path.join(self.PATH_TMP, 'openssl-OpenSSL_{}'.format(env.ver_openssl.replace('.', '_')))
|
self.OPENSSL_PATH_SRC = os.path.join(self.PATH_TMP, 'openssl-OpenSSL_{}'.format(env.ver_ossl.replace('.', '_')))
|
||||||
self.LIBUV_PATH_SRC = os.path.join(self.PATH_TMP, 'libuv-{}'.format(env.ver_libuv))
|
self.LIBUV_PATH_SRC = os.path.join(self.PATH_TMP, 'libuv-{}'.format(env.ver_libuv))
|
||||||
self.MBEDTLS_PATH_SRC = os.path.join(self.PATH_TMP, 'mbedtls-mbedtls-{}'.format(env.ver_mbedtls))
|
self.MBEDTLS_PATH_SRC = os.path.join(self.PATH_TMP, 'mbedtls-mbedtls-{}'.format(env.ver_mbedtls))
|
||||||
self.LIBSSH_PATH_SRC = os.path.join(self.PATH_TMP, 'libssh-{}'.format(env.ver_libssh))
|
self.LIBSSH_PATH_SRC = os.path.join(self.PATH_TMP, 'libssh-{}'.format(env.ver_libssh))
|
||||||
# self.SQLITE_PATH_SRC = os.path.join(self.PATH_TMP, 'sqlite-autoconf-{}'.format(env.ver_sqlite))
|
|
||||||
|
|
||||||
self.JSONCPP_PATH_SRC = os.path.join(PATH_EXTERNAL, 'jsoncpp')
|
self.JSONCPP_PATH_SRC = os.path.join(PATH_EXTERNAL, 'jsoncpp')
|
||||||
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
self.MONGOOSE_PATH_SRC = os.path.join(PATH_EXTERNAL, 'mongoose')
|
||||||
|
@ -572,30 +484,36 @@ class BuilderMacOS(BuilderBase):
|
||||||
cc.w('already exists, skip.')
|
cc.w('already exists, skip.')
|
||||||
|
|
||||||
def _build_openssl(self, file_name):
|
def _build_openssl(self, file_name):
|
||||||
pass # we do not need build openssl anymore, because first time run build.sh we built Python, it include openssl.
|
if not super()._build_openssl(file_name):
|
||||||
#
|
return
|
||||||
# if not os.path.exists(self.OPENSSL_PATH_SRC):
|
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
cc.n('prepare openssl source code...', end='')
|
||||||
#
|
if not os.path.exists(self.OPENSSL_PATH_SRC):
|
||||||
# cc.n('build openssl static...', end='')
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
# if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssl.a')):
|
if not os.path.exists(self.OPENSSL_PATH_SRC):
|
||||||
# cc.w('already exists, skip.')
|
raise RuntimeError('can not prepare openssl source code.')
|
||||||
# return
|
else:
|
||||||
#
|
cc.w('already exists, skip.')
|
||||||
# old_p = os.getcwd()
|
|
||||||
# os.chdir(self.OPENSSL_PATH_SRC)
|
cc.n('build openssl static...', end='')
|
||||||
# # os.system('./config --prefix={} --openssldir={}/openssl no-zlib no-shared'.format(self.PATH_RELEASE, self.PATH_RELEASE))
|
out_file_lib = os.path.join(self.PATH_RELEASE, 'lib', 'libssl.a')
|
||||||
# # os.system('./Configure darwin64-x86_64-cc')
|
if os.path.exists(out_file_lib):
|
||||||
# os.system('./Configure darwin64-x86_64-cc --prefix={} --openssldir={}/openssl -fPIC no-zlib no-shared'.format(self.PATH_RELEASE, self.PATH_RELEASE))
|
cc.w('already exists, skip.')
|
||||||
# os.system('make')
|
return
|
||||||
# os.system('make install')
|
cc.v('')
|
||||||
# os.chdir(old_p)
|
|
||||||
|
old_p = os.getcwd()
|
||||||
|
os.chdir(self.OPENSSL_PATH_SRC)
|
||||||
|
# os.system('./config --prefix={} --openssldir={}/openssl no-zlib no-shared'.format(self.PATH_RELEASE, self.PATH_RELEASE))
|
||||||
|
# os.system('./Configure darwin64-x86_64-cc')
|
||||||
|
os.system('./Configure darwin64-x86_64-cc --prefix={} --openssldir={}/openssl -fPIC no-zlib no-shared'.format(self.PATH_RELEASE, self.PATH_RELEASE))
|
||||||
|
os.system('make')
|
||||||
|
os.system('make install')
|
||||||
|
os.chdir(old_p)
|
||||||
|
|
||||||
def _build_libuv(self, file_name):
|
def _build_libuv(self, file_name):
|
||||||
cc.n('prepare libuv source code...', end='')
|
cc.n('prepare libuv source code...', end='')
|
||||||
# return
|
|
||||||
if not os.path.exists(self.LIBUV_PATH_SRC):
|
if not os.path.exists(self.LIBUV_PATH_SRC):
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, PATH_TMP))
|
|
||||||
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
|
|
||||||
cc.n('build libuv...', end='')
|
cc.n('build libuv...', end='')
|
||||||
|
@ -617,7 +535,6 @@ class BuilderMacOS(BuilderBase):
|
||||||
|
|
||||||
def _build_mbedtls(self, file_name):
|
def _build_mbedtls(self, file_name):
|
||||||
if not os.path.exists(self.MBEDTLS_PATH_SRC):
|
if not os.path.exists(self.MBEDTLS_PATH_SRC):
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, PATH_TMP))
|
|
||||||
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
|
|
||||||
cc.n('build mbedtls...', end='')
|
cc.n('build mbedtls...', end='')
|
||||||
|
@ -662,62 +579,31 @@ class BuilderMacOS(BuilderBase):
|
||||||
|
|
||||||
def _build_libssh(self, file_name):
|
def _build_libssh(self, file_name):
|
||||||
if not os.path.exists(self.LIBSSH_PATH_SRC):
|
if not os.path.exists(self.LIBSSH_PATH_SRC):
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, PATH_TMP))
|
|
||||||
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
os.system('unzip "{}/{}" -d "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
||||||
# os.rename(os.path.join(self.PATH_TMP, 'master'), os.path.join(self.PATH_TMP, 'libssh-{}'.format(LIBSSH_VER)))
|
|
||||||
|
|
||||||
cc.n('build libssh...', end='')
|
cc.n('build libssh...', end='')
|
||||||
if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh.a')) and os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh_threads.a')):
|
# if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh.a')) and os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh_threads.a')):
|
||||||
|
if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libssh.a')):
|
||||||
cc.w('already exists, skip.')
|
cc.w('already exists, skip.')
|
||||||
return
|
return
|
||||||
cc.v('')
|
cc.v('')
|
||||||
|
|
||||||
build_path = os.path.join(self.LIBSSH_PATH_SRC, 'build')
|
build_path = os.path.join(self.LIBSSH_PATH_SRC, 'build')
|
||||||
# utils.makedirs(build_path)
|
|
||||||
|
|
||||||
# here is a bug in cmake v2.8.11 (default on ubuntu14), in FindOpenSSL.cmake,
|
cmake_define = ' -DCMAKE_INSTALL_PREFIX={path_release}' \
|
||||||
# it parse opensslv.h, use regex like this:
|
' -DOPENSSL_INCLUDE_DIR={path_release}/include' \
|
||||||
# REGEX "^#define[\t ]+OPENSSL_VERSION_NUMBER[\t ]+0x([0-9a-fA-F])+.*")
|
' -DOPENSSL_LIBRARIES={path_release}/lib' \
|
||||||
# but in openssl-1.0.2h, the version define line is:
|
' -DWITH_SFTP=ON' \
|
||||||
# # define OPENSSL_VERSION_NUMBER 0x1000208fL
|
' -DWITH_SERVER=ON' \
|
||||||
# notice there is a space char between # and define, so find openssl always fail.
|
' -DWITH_STATIC_LIB=ON' \
|
||||||
|
|
||||||
# old_p = os.getcwd()
|
|
||||||
# os.chdir(build_path)
|
|
||||||
# cmd = 'cmake' \
|
|
||||||
# ' -DCMAKE_INSTALL_PREFIX={}' \
|
|
||||||
# ' -D_OPENSSL_VERSION={}' \
|
|
||||||
# ' -DOPENSSL_INCLUDE_DIR={}/include' \
|
|
||||||
# ' -DOPENSSL_LIBRARIES={}/lib' \
|
|
||||||
# ' -DCMAKE_BUILD_TYPE=Release' \
|
|
||||||
# ' -DWITH_GSSAPI=OFF' \
|
|
||||||
# ' -DWITH_ZLIB=OFF' \
|
|
||||||
# ' -DWITH_STATIC_LIB=ON' \
|
|
||||||
# ' -DWITH_PCAP=OFF' \
|
|
||||||
# ' -DWITH_EXAMPLES=OFF' \
|
|
||||||
# ' -DWITH_NACL=OFF' \
|
|
||||||
# ' ..'.format(self.PATH_RELEASE, OPENSSL_VER, self.PATH_RELEASE, self.PATH_RELEASE)
|
|
||||||
# cc.n(cmd)
|
|
||||||
# os.system(cmd)
|
|
||||||
# # os.system('make ssh_static ssh_threads_static')
|
|
||||||
# os.system('make ssh_static')
|
|
||||||
# # os.system('make install')
|
|
||||||
# os.chdir(old_p)
|
|
||||||
|
|
||||||
cmake_define = ' -DCMAKE_INSTALL_PREFIX={prefix}' \
|
|
||||||
' -D_OPENSSL_VERSION={oss_ver}' \
|
|
||||||
' -DOPENSSL_INCLUDE_DIR={ossl_inc}' \
|
|
||||||
' -DOPENSSL_LIBRARIES={ossl_lib}' \
|
|
||||||
' -DWITH_GSSAPI=OFF' \
|
' -DWITH_GSSAPI=OFF' \
|
||||||
' -DWITH_ZLIB=OFF' \
|
' -DWITH_ZLIB=OFF' \
|
||||||
' -DWITH_STATIC_LIB=ON' \
|
|
||||||
' -DWITH_PCAP=OFF' \
|
' -DWITH_PCAP=OFF' \
|
||||||
' -DWITH_TESTING=OFF' \
|
' -DUNIT_TESTING=OFF' \
|
||||||
' -DWITH_CLIENT_TESTING=OFF' \
|
|
||||||
' -DWITH_EXAMPLES=OFF' \
|
' -DWITH_EXAMPLES=OFF' \
|
||||||
' -DWITH_BENCHMARKS=OFF' \
|
' -DWITH_BENCHMARKS=OFF' \
|
||||||
' -DWITH_NACL=OFF' \
|
' -DWITH_NACL=OFF' \
|
||||||
''.format(prefix=self.PATH_RELEASE, oss_ver=env.ver_ossl_number, ossl_inc=env.path_ossl_inc, ossl_lib=env.path_ossl_lib)
|
''.format(path_release=self.PATH_RELEASE)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
utils.cmake(build_path, 'Release', False, cmake_define)
|
utils.cmake(build_path, 'Release', False, cmake_define)
|
||||||
|
@ -727,32 +613,18 @@ class BuilderMacOS(BuilderBase):
|
||||||
# because make install will fail because we can not disable ssh_shared target,
|
# because make install will fail because we can not disable ssh_shared target,
|
||||||
# so we copy necessary files ourselves.
|
# so we copy necessary files ourselves.
|
||||||
utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'libssh.a'))
|
utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'libssh.a'))
|
||||||
utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'threads', 'libssh_threads.a'))
|
# utils.ensure_file_exists(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'threads', 'libssh_threads.a'))
|
||||||
utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src'), os.path.join(self.PATH_RELEASE, 'lib'), 'libssh.a')
|
utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src'), os.path.join(self.PATH_RELEASE, 'lib'), 'libssh.a')
|
||||||
utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'threads'), os.path.join(self.PATH_RELEASE, 'lib'), 'libssh_threads.a')
|
# utils.copy_file(os.path.join(self.LIBSSH_PATH_SRC, 'build', 'src', 'threads'), os.path.join(self.PATH_RELEASE, 'lib'), 'libssh_threads.a')
|
||||||
utils.copy_ex(os.path.join(self.LIBSSH_PATH_SRC, 'include'), os.path.join(self.PATH_RELEASE, 'include'), 'libssh')
|
utils.copy_ex(os.path.join(self.LIBSSH_PATH_SRC, 'include'), os.path.join(self.PATH_RELEASE, 'include'), 'libssh')
|
||||||
|
|
||||||
# def _build_sqlite(self, file_name):
|
def _prepare_python(self):
|
||||||
# if not os.path.exists(self.SQLITE_PATH_SRC):
|
pass
|
||||||
# os.system('tar -zxvf "{}/{}" -C "{}"'.format(PATH_DOWNLOAD, file_name, self.PATH_TMP))
|
|
||||||
#
|
|
||||||
# cc.n('build sqlite static...', end='')
|
|
||||||
# if os.path.exists(os.path.join(self.PATH_RELEASE, 'lib', 'libsqlite3.a')):
|
|
||||||
# cc.w('already exists, skip.')
|
|
||||||
# return
|
|
||||||
# cc.v('')
|
|
||||||
#
|
|
||||||
# old_p = os.getcwd()
|
|
||||||
# os.chdir(self.SQLITE_PATH_SRC)
|
|
||||||
# os.system('./configure --prefix={}'.format(self.PATH_RELEASE))
|
|
||||||
# os.system('make')
|
|
||||||
# os.system('make install')
|
|
||||||
# os.chdir(old_p)
|
|
||||||
|
|
||||||
def fix_output(self):
|
def fix_output(self):
|
||||||
# remove .so files, otherwise will link to .so but not .a in default.
|
# remove .so files, otherwise will link to .so but not .a in default.
|
||||||
# rm = ['libsqlite3.la', 'libsqlite3.so.0', 'libsqlite3.so', 'libsqlite3.so.0.8.6', 'libuv.la', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
# rm = ['libsqlite3.la', 'libsqlite3.so.0', 'libsqlite3.so', 'libsqlite3.so.0.8.6', 'libuv.la', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
||||||
rm = ['libuv.la', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
rm = ['libuv.la', 'libuv.dylib', 'libuv.so.1', 'libuv.so', 'libuv.so.1.0.0']
|
||||||
for i in rm:
|
for i in rm:
|
||||||
_path = os.path.join(self.PATH_RELEASE, 'lib', i)
|
_path = os.path.join(self.PATH_RELEASE, 'lib', i)
|
||||||
if os.path.exists(_path):
|
if os.path.exists(_path):
|
||||||
|
@ -803,9 +675,6 @@ def main():
|
||||||
builder.build_mbedtls()
|
builder.build_mbedtls()
|
||||||
builder.build_libssh()
|
builder.build_libssh()
|
||||||
|
|
||||||
# do not need sqlite any more.
|
|
||||||
# builder.build_sqlite()
|
|
||||||
|
|
||||||
builder.fix_output()
|
builder.fix_output()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ class PYSBase:
|
||||||
utils.sys_exec('{} -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip --upgrade'.format(env.py_exec))
|
utils.sys_exec('{} -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip --upgrade'.format(env.py_exec))
|
||||||
|
|
||||||
pip = self._get_pip()
|
pip = self._get_pip()
|
||||||
pypi_modules = ['mako', 'pymysql', 'qrcode', 'tornado', 'wheezy.captcha', 'Pillow', 'psutil']
|
pypi_modules = ['ldap3', 'mako', 'Pillow', 'psutil', 'pymysql', 'qrcode', 'tornado', 'wheezy.captcha']
|
||||||
for p in pypi_modules:
|
for p in pypi_modules:
|
||||||
cc.n('install {} ...'.format(p))
|
cc.n('install {} ...'.format(p))
|
||||||
utils.sys_exec('{} install -i https://pypi.tuna.tsinghua.edu.cn/simple {}'.format(pip, p), direct_output=True)
|
utils.sys_exec('{} install -i https://pypi.tuna.tsinghua.edu.cn/simple {}'.format(pip, p), direct_output=True)
|
||||||
|
|
|
@ -27,7 +27,7 @@ class BuilderWin(BuilderBase):
|
||||||
if ctx.target_path == 'debug':
|
if ctx.target_path == 'debug':
|
||||||
cc.w('cannot build debug version of tp_web, skip.')
|
cc.w('cannot build debug version of tp_web, skip.')
|
||||||
else:
|
else:
|
||||||
sln_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'server', 'tp_web', 'src', 'tp_web.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tp_web.exe')
|
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tp_web.exe')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -35,7 +35,7 @@ class BuilderWin(BuilderBase):
|
||||||
utils.ensure_file_exists(out_file)
|
utils.ensure_file_exists(out_file)
|
||||||
|
|
||||||
cc.n('build core server ...')
|
cc.n('build core server ...')
|
||||||
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'core', 'tp_core.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tp_core.exe')
|
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tp_core.exe')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -43,7 +43,7 @@ class BuilderWin(BuilderBase):
|
||||||
utils.ensure_file_exists(out_file)
|
utils.ensure_file_exists(out_file)
|
||||||
|
|
||||||
cc.n('build SSH protocol ...')
|
cc.n('build SSH protocol ...')
|
||||||
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'ssh', 'tpssh.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'ssh', 'tpssh.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tpssh.dll')
|
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tpssh.dll')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -52,7 +52,7 @@ class BuilderWin(BuilderBase):
|
||||||
utils.copy_file(os.path.join(env.root_path, 'external', 'libssh', 'lib', ctx.target_path), os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path), 'ssh.dll')
|
utils.copy_file(os.path.join(env.root_path, 'external', 'libssh', 'lib', ctx.target_path), os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path), 'ssh.dll')
|
||||||
|
|
||||||
cc.n('build TELNET protocol ...')
|
cc.n('build TELNET protocol ...')
|
||||||
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'telnet', 'tptelnet.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'telnet', 'tptelnet.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tptelnet.dll')
|
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tptelnet.dll')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -61,7 +61,7 @@ class BuilderWin(BuilderBase):
|
||||||
|
|
||||||
if with_rdp:
|
if with_rdp:
|
||||||
cc.n('build RDP protocol ...')
|
cc.n('build RDP protocol ...')
|
||||||
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'rdp', 'tprdp.vs2015.sln')
|
sln_file = os.path.join(env.root_path, 'server', 'tp_core', 'protocol', 'rdp', 'tprdp.vs2017.sln')
|
||||||
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tprdp.dll')
|
out_file = os.path.join(env.root_path, 'out', 'server', ctx.bits_path, ctx.target_path, 'tprdp.dll')
|
||||||
if os.path.exists(out_file):
|
if os.path.exists(out_file):
|
||||||
utils.remove(out_file)
|
utils.remove(out_file)
|
||||||
|
@ -91,7 +91,7 @@ class BuilderLinux(BuilderBase):
|
||||||
|
|
||||||
utils.makedirs(out_path)
|
utils.makedirs(out_path)
|
||||||
|
|
||||||
utils.cmake(os.path.join(env.root_path, 'server', 'cmake-build'), ctx.target_path, False)
|
utils.cmake(os.path.join(env.root_path, 'cmake-build'), ctx.target_path, False)
|
||||||
# utils.strip(out_file)
|
# utils.strip(out_file)
|
||||||
|
|
||||||
for f in out_files:
|
for f in out_files:
|
||||||
|
@ -121,7 +121,7 @@ class BuilderMacOS(BuilderBase):
|
||||||
|
|
||||||
utils.makedirs(out_path)
|
utils.makedirs(out_path)
|
||||||
|
|
||||||
utils.cmake(os.path.join(env.root_path, 'server', 'cmake-build'), ctx.target_path, False)
|
utils.cmake(os.path.join(env.root_path, 'cmake-build'), ctx.target_path, False)
|
||||||
# utils.strip(out_file)
|
# utils.strip(out_file)
|
||||||
|
|
||||||
for f in out_files:
|
for f in out_files:
|
||||||
|
|
|
@ -141,7 +141,7 @@ class Builder:
|
||||||
self._update_ver_nsi(nsi_file, self.VER_TP_ASSIST)
|
self._update_ver_nsi(nsi_file, self.VER_TP_ASSIST)
|
||||||
|
|
||||||
def make_assist_macos_ver(self):
|
def make_assist_macos_ver(self):
|
||||||
plist_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'tp_assist-Info.plist')
|
plist_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'TP-Assist-Info.plist')
|
||||||
self._update_ver_plist(plist_file, self.VER_TP_ASSIST)
|
self._update_ver_plist(plist_file, self.VER_TP_ASSIST)
|
||||||
|
|
||||||
ver_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'csrc', 'ts_ver.h')
|
ver_file = os.path.join(env.root_path, 'client', 'tp_assist_macos', 'src', 'csrc', 'ts_ver.h')
|
||||||
|
@ -299,10 +299,10 @@ class Builder:
|
||||||
def _update_ver_nsi(self, nsiFilePath, ver):
|
def _update_ver_nsi(self, nsiFilePath, ver):
|
||||||
""" update nsis file version info """
|
""" update nsis file version info """
|
||||||
t_ver = ver.split('.')
|
t_ver = ver.split('.')
|
||||||
while len(t_ver) < 4:
|
while len(t_ver) < 3:
|
||||||
t_ver.append('0')
|
t_ver.append('0')
|
||||||
|
|
||||||
if len(t_ver) > 4:
|
if len(t_ver) > 3:
|
||||||
raise RuntimeError('Invalid version for nsis file.')
|
raise RuntimeError('Invalid version for nsis file.')
|
||||||
|
|
||||||
bOK = False
|
bOK = False
|
||||||
|
@ -319,40 +319,23 @@ class Builder:
|
||||||
if nsiline.find('\n') != -1:
|
if nsiline.find('\n') != -1:
|
||||||
nsiline = nsiline[:-1]
|
nsiline = nsiline[:-1]
|
||||||
|
|
||||||
if nsiline.find(" FILE_VER") != -1 or nsiline.find(" STR_FILE_VER") != -1:
|
if nsiline.startswith("!define FILE_VER"):
|
||||||
# cc.v('[ver] old ver: %s' % nsiLines[x])
|
nsiline = '!define FILE_VER \"%s.%s.%s.0\"\n' % (t_ver[0], t_ver[1], t_ver[2])
|
||||||
pos1 = nsiline.find('"')
|
|
||||||
pos2 = nsiline.rfind('"')
|
|
||||||
_ver = nsiline[pos1 + 1: pos2]
|
|
||||||
|
|
||||||
nsiSplitList = _ver.split(".")
|
|
||||||
if (len(nsiSplitList) != 4):
|
|
||||||
raise RuntimeError('Invalid .nsi file (1).')
|
|
||||||
if '.'.join(nsiSplitList) == ver:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# nsiline = '%s\"%d.%d.%d.%d\"\n' % (nsiline[0:pos1], self.major, self.minor, self.revision, self.build)
|
|
||||||
nsiline = '%s\"%s.%s.%s.%s\"\n' % (nsiline[0:pos1], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
||||||
|
|
||||||
nsiLines[x] = ""
|
nsiLines[x] = ""
|
||||||
nsiLines[x] = nsiline
|
nsiLines[x] = nsiline
|
||||||
# cc.v('[ver] new ver: %s' % nsiLines[x])
|
# cc.v('[ver] new ver: %s' % nsiLines[x])
|
||||||
bOK = True
|
bOK = True
|
||||||
|
|
||||||
elif nsiline.find(" PRODUCT_VER") != -1:
|
elif nsiline.startswith("!define OUT_VER"):
|
||||||
# cc.v('[ver] old ver: %s' % nsiLines[x])
|
nsiline = '!define OUT_VER \"%s.%s.%s\"\n' % (t_ver[0], t_ver[1], t_ver[2])
|
||||||
pos1 = nsiline.find('"')
|
|
||||||
pos2 = nsiline.rfind('"')
|
|
||||||
_ver = nsiline[pos1 + 1: pos2]
|
|
||||||
|
|
||||||
nsiSplitList = _ver.split(".")
|
nsiLines[x] = ""
|
||||||
if (len(nsiSplitList) != 2):
|
nsiLines[x] = nsiline
|
||||||
raise RuntimeError('Invalid .nsi file (2).')
|
# cc.v('[ver] new ver: %s' % nsiLines[x])
|
||||||
if '.'.join(nsiSplitList) == '%s.%s' % (t_ver[0], t_ver[1]):
|
bOK = True
|
||||||
continue
|
elif nsiline.startswith("!define PRODUCT_VER"):
|
||||||
|
nsiline = '!define PRODUCT_VER \"%s.%s\"\n' % (t_ver[0], t_ver[1])
|
||||||
# nsiline = '%s\"%d.%d\"\n' % (nsiline[0:pos1], self.major, self.minor)
|
|
||||||
nsiline = '%s\"%s.%s\"\n' % (nsiline[0:pos1], t_ver[0], t_ver[1])
|
|
||||||
|
|
||||||
nsiLines[x] = ""
|
nsiLines[x] = ""
|
||||||
nsiLines[x] = nsiline
|
nsiLines[x] = nsiline
|
||||||
|
@ -396,24 +379,6 @@ class Builder:
|
||||||
if l.find('<key>CFBundleVersion</key>') != -1:
|
if l.find('<key>CFBundleVersion</key>') != -1:
|
||||||
is_ver = True
|
is_ver = True
|
||||||
continue
|
continue
|
||||||
# pos1 = rcline.find(' FILEVERSION ')
|
|
||||||
# pos2 = rcline.rfind('\\0"')
|
|
||||||
# _ver = rcline[pos1 + 13: pos2].strip()
|
|
||||||
#
|
|
||||||
# rcSplitList = _ver.split(",")
|
|
||||||
# if (len(rcSplitList) < 4):
|
|
||||||
# rcSplitList = _ver.split(".")
|
|
||||||
# if (len(rcSplitList) < 4):
|
|
||||||
# raise RuntimeError('Invalid .rc file.')
|
|
||||||
# if '.'.join(rcSplitList) == ver:
|
|
||||||
# continue
|
|
||||||
#
|
|
||||||
# rcline = '%s%s,%s,%s,%s\n' % (rcline[0:pos1 + 13], t_ver[0], t_ver[1], t_ver[2], t_ver[3])
|
|
||||||
#
|
|
||||||
# rcLines[x] = ""
|
|
||||||
# rcLines[x] = rcline
|
|
||||||
# # cc.v('[ver] new ver: %s' % rcLines[x])
|
|
||||||
# bOK = True
|
|
||||||
|
|
||||||
if is_ver:
|
if is_ver:
|
||||||
is_ver = False
|
is_ver = False
|
||||||
|
|
|
@ -111,7 +111,7 @@ class Env(object):
|
||||||
|
|
||||||
if self.nasm is None or not os.path.exists(self.nasm):
|
if self.nasm is None or not os.path.exists(self.nasm):
|
||||||
if warn_miss_tool:
|
if warn_miss_tool:
|
||||||
cc.w(' - can not locate `nasm`, so I can build openssl.')
|
cc.w(' - can not locate `nasm`, so I can not build openssl.')
|
||||||
else:
|
else:
|
||||||
_nasm_path = os.path.abspath(os.path.join(self.nasm, '..'))
|
_nasm_path = os.path.abspath(os.path.join(self.nasm, '..'))
|
||||||
os.environ['path'] = os.environ['path'] + ';' + _nasm_path
|
os.environ['path'] = os.environ['path'] + ';' + _nasm_path
|
||||||
|
@ -123,12 +123,12 @@ class Env(object):
|
||||||
|
|
||||||
if self.perl is None or not os.path.exists(self.perl):
|
if self.perl is None or not os.path.exists(self.perl):
|
||||||
if warn_miss_tool:
|
if warn_miss_tool:
|
||||||
cc.w(' - can not locate `perl`, so I can build openssl.')
|
cc.w(' - can not locate `perl`, so I can not build openssl.')
|
||||||
|
|
||||||
self.visual_studio_path = self._get_visual_studio_path()
|
self.visual_studio_path = self._get_visual_studio_path()
|
||||||
if self.visual_studio_path is None or not os.path.exists(self.visual_studio_path):
|
if self.visual_studio_path is None or not os.path.exists(self.visual_studio_path):
|
||||||
if warn_miss_tool:
|
if warn_miss_tool:
|
||||||
cc.w(' - can not locate Visual Studio installation, so I can build openssl.')
|
cc.w(' - can not locate Visual Studio installation, so I can build nothing.')
|
||||||
|
|
||||||
if 'msbuild' in _tmp:
|
if 'msbuild' in _tmp:
|
||||||
self.msbuild = _tmp['msbuild']
|
self.msbuild = _tmp['msbuild']
|
||||||
|
@ -190,30 +190,40 @@ class Env(object):
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def _get_msbuild(self):
|
# def _get_msbuild(self):
|
||||||
# 14.0 = VS2015
|
# # 14.0 = VS2015
|
||||||
# 12.0 = VS2012
|
# # 12.0 = VS2012
|
||||||
# 4.0 = VS2008
|
# # 4.0 = VS2008
|
||||||
chk = ['14.0', '12.0', '4.0']
|
# chk = ['14.0', '12.0', '4.0']
|
||||||
|
|
||||||
p = None
|
# p = None
|
||||||
for c in chk:
|
# for c in chk:
|
||||||
p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\{}'.format(c), r'MSBuildToolsPath')
|
# p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\MSBuild\ToolsVersions\{}'.format(c), r'MSBuildToolsPath')
|
||||||
if p is not None:
|
# if p is not None:
|
||||||
break
|
# break
|
||||||
|
|
||||||
return os.path.join(p[0], 'MSBuild.exe') if p is not None else None
|
# return os.path.join(p[0], 'MSBuild.exe') if p is not None else None
|
||||||
|
|
||||||
|
# def _get_visual_studio_path(self):
|
||||||
|
# chk = ['14.0', '12.0', '4.0']
|
||||||
|
# p = None
|
||||||
|
# for c in chk:
|
||||||
|
# p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\VisualStudio\{}'.format(c), r'ShellFolder')
|
||||||
|
# if p is not None:
|
||||||
|
# break
|
||||||
|
|
||||||
|
# return p[0] if p is not None else None
|
||||||
|
|
||||||
def _get_visual_studio_path(self):
|
def _get_visual_studio_path(self):
|
||||||
chk = ['14.0', '12.0', '4.0']
|
p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\WOW6432Node\Microsoft\VisualStudio\SxS\VS7', r'15.0')
|
||||||
p = None
|
|
||||||
for c in chk:
|
|
||||||
p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\Microsoft\VisualStudio\{}'.format(c), r'ShellFolder')
|
|
||||||
if p is not None:
|
|
||||||
break
|
|
||||||
|
|
||||||
return p[0] if p is not None else None
|
return p[0] if p is not None else None
|
||||||
|
|
||||||
|
def _get_msbuild(self):
|
||||||
|
vs2017 = self._get_visual_studio_path()
|
||||||
|
if vs2017 is None:
|
||||||
|
return None
|
||||||
|
return os.path.join(vs2017, 'MSBuild', '15.0', 'Bin', 'MSBuild.exe')
|
||||||
|
|
||||||
def _get_perl(self):
|
def _get_perl(self):
|
||||||
p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\perl', 'BinDir')
|
p = self._winreg_read(winreg.HKEY_LOCAL_MACHINE, r'SOFTWARE\perl', 'BinDir')
|
||||||
return p[0] if p is not None else None
|
return p[0] if p is not None else None
|
||||||
|
|
|
@ -50,29 +50,41 @@ def _check_download_file(file_name):
|
||||||
def download_file(desc, url, target_path, file_name):
|
def download_file(desc, url, target_path, file_name):
|
||||||
cc.n('download {} ... '.format(desc), end='')
|
cc.n('download {} ... '.format(desc), end='')
|
||||||
|
|
||||||
local_file_name = os.path.join(target_path, file_name)
|
_temp_file = os.path.join(target_path, '_dl_{}'.format(file_name))
|
||||||
if os.path.exists(local_file_name):
|
_real_file = os.path.join(target_path, file_name)
|
||||||
if not _check_download_file(local_file_name):
|
|
||||||
cc.w('already exists but broken, download it again...')
|
if os.path.exists(_temp_file):
|
||||||
else:
|
cc.w('already exists but broken, download it again...')
|
||||||
cc.w('already exists, skip.')
|
remove(_temp_file)
|
||||||
return True
|
remove(_real_file)
|
||||||
|
|
||||||
|
# if not _check_download_file(local_file_name):
|
||||||
|
# cc.w('already exists but broken, download it again...')
|
||||||
|
# else:
|
||||||
|
# cc.w('already exists, skip.')
|
||||||
|
# return True
|
||||||
|
|
||||||
|
if os.path.exists(_real_file):
|
||||||
|
cc.w('already exists, skip.')
|
||||||
|
return True
|
||||||
|
|
||||||
cc.v('')
|
cc.v('')
|
||||||
# 因为下载过程会在命令行显示进度,所以不能使用subprocess.Popen()的方式捕获输出,会很难看!
|
# 因为下载过程会在命令行显示进度,所以不能使用subprocess.Popen()的方式捕获输出,会很难看!
|
||||||
if env.is_win:
|
if env.is_win:
|
||||||
cmd = '""{}" --no-check-certificate {} -O "{}""'.format(env.wget, url, local_file_name)
|
cmd = '""{}" --no-check-certificate {} -O "{}""'.format(env.wget, url, _temp_file)
|
||||||
os.system(cmd)
|
os.system(cmd)
|
||||||
elif env.is_linux or env.is_macos:
|
elif env.is_linux or env.is_macos:
|
||||||
os.system('wget --no-check-certificate {} -O "{}"'.format(url, local_file_name))
|
os.system('wget --no-check-certificate {} -O "{}"'.format(url, _temp_file))
|
||||||
else:
|
else:
|
||||||
cc.e('can not download, no download tool.')
|
cc.e('can not download, no download tool.')
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not os.path.exists(local_file_name) or not _check_download_file(local_file_name):
|
if not os.path.exists(_temp_file) or not _check_download_file(_temp_file):
|
||||||
cc.e('downloading {} from {} failed.'.format(desc, url))
|
cc.e('downloading {} from {} failed.'.format(desc, url))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
os.rename(_temp_file, _real_file)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
@ -257,6 +269,7 @@ def ensure_file_exists(filename):
|
||||||
|
|
||||||
|
|
||||||
def sys_exec(cmd, direct_output=False, output_codec=None):
|
def sys_exec(cmd, direct_output=False, output_codec=None):
|
||||||
|
print(cmd)
|
||||||
if output_codec is None:
|
if output_codec is None:
|
||||||
if env.is_win:
|
if env.is_win:
|
||||||
output_codec = 'gb2312'
|
output_codec = 'gb2312'
|
||||||
|
@ -308,9 +321,6 @@ def msvc_build(sln_file, proj_name, target, platform, force_rebuild):
|
||||||
|
|
||||||
|
|
||||||
def xcode_build(proj_file, proj_name, target, force_rebuild):
|
def xcode_build(proj_file, proj_name, target, force_rebuild):
|
||||||
# if env.msbuild is None:
|
|
||||||
# raise RuntimeError('where is `msbuild`?')
|
|
||||||
|
|
||||||
if force_rebuild:
|
if force_rebuild:
|
||||||
cmd = 'xcodebuild -project "{}" -target {} -configuration {} clean'.format(proj_file, proj_name, target)
|
cmd = 'xcodebuild -project "{}" -target {} -configuration {} clean'.format(proj_file, proj_name, target)
|
||||||
ret, _ = sys_exec(cmd, direct_output=True)
|
ret, _ = sys_exec(cmd, direct_output=True)
|
||||||
|
@ -322,6 +332,19 @@ def xcode_build(proj_file, proj_name, target, force_rebuild):
|
||||||
raise RuntimeError('build XCode project `{}` failed.'.format(proj_name))
|
raise RuntimeError('build XCode project `{}` failed.'.format(proj_name))
|
||||||
|
|
||||||
|
|
||||||
|
def make_dmg(json_file, dmg_file):
|
||||||
|
out_path = os.path.dirname(dmg_file)
|
||||||
|
cc.v(out_path)
|
||||||
|
|
||||||
|
if not os.path.exists(out_path):
|
||||||
|
makedirs(out_path)
|
||||||
|
|
||||||
|
cmd = 'appdmg "{}" "{}"'.format(json_file, dmg_file)
|
||||||
|
ret, _ = sys_exec(cmd, direct_output=True)
|
||||||
|
if ret != 0:
|
||||||
|
raise RuntimeError('make dmg failed.')
|
||||||
|
|
||||||
|
|
||||||
def nsis_build(nsi_file, _define=''):
|
def nsis_build(nsi_file, _define=''):
|
||||||
if env.nsis is None:
|
if env.nsis is None:
|
||||||
raise RuntimeError('where is `nsis`?')
|
raise RuntimeError('where is `nsis`?')
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
# -*- coding: utf8 -*-
|
# -*- coding: utf8 -*-
|
||||||
VER_TP_SERVER = "3.1.0"
|
VER_TP_SERVER = "3.2.0"
|
||||||
VER_TP_ASSIST = "3.1.0"
|
VER_TP_ASSIST = "3.2.0"
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIID4TCCAsmgAwIBAgIBADANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJDTjEN
|
||||||
|
MAsGA1UECgwEVFA0QTEZMBcGA1UECwwQVFA0QSBUZWxlcG9ydCBDQTEZMBcGA1UE
|
||||||
|
AwwQVFA0QSBUZWxlcG9ydCBDQTAgFw0xODExMDgxNzMyMjJaGA8yMTE4MTAxNTE3
|
||||||
|
MzIyMlowUjELMAkGA1UEBhMCQ04xDTALBgNVBAoMBFRQNEExGTAXBgNVBAsMEFRQ
|
||||||
|
NEEgVGVsZXBvcnQgQ0ExGTAXBgNVBAMMEFRQNEEgVGVsZXBvcnQgQ0EwggEiMA0G
|
||||||
|
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCml/ERetMxXh17Uf4IlLjDfgGwnpQZ
|
||||||
|
L0UoCO2vAHk0h4eRx5x4fMB/Ml1YHYghVKJ9rxWeb+v5wWz9a8CFtNu+s46nG9cw
|
||||||
|
XdneQ2UT4L5+7a+mOyNGAcascfLWfUYoMnF0ugIf3OfsUeAwinMnvKi2I2b8XdXH
|
||||||
|
cXRqToEYmcovPLKaXByXFLjcMHMRwR5Es0zIRx+4uuIvCICndLRX5IGy/HGEPZyV
|
||||||
|
Vtrrrvkngz54UHB3C3sKuHuHBOxvJ1grJV9fLFptsbPhMonXfYKJpf+ODwmkEDFS
|
||||||
|
+4vV61ctYvUiElCPeQte23v6lIujqoLoHzYoi8J5BxEwBggeCgAZ/YYFAgMBAAGj
|
||||||
|
gb8wgbwwHQYDVR0OBBYEFKHqO88fYp8ard6SKPi8X4Gpr+uiMHoGA1UdIwRzMHGA
|
||||||
|
FKHqO88fYp8ard6SKPi8X4Gpr+uioVakVDBSMQswCQYDVQQGEwJDTjENMAsGA1UE
|
||||||
|
CgwEVFA0QTEZMBcGA1UECwwQVFA0QSBUZWxlcG9ydCBDQTEZMBcGA1UEAwwQVFA0
|
||||||
|
QSBUZWxlcG9ydCBDQYIBADAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
|
||||||
|
BjANBgkqhkiG9w0BAQsFAAOCAQEAQWYR/WBsaWEwTE9IuoULsGs0G5CWwfIvezil
|
||||||
|
HUmtQQb2G3P0kxv43xU3PT3czfbd22h9diSHyyYXOShHIfNx7ZD4SUMGyukcfPst
|
||||||
|
oyLcnlMK2hxtu3s5hTc76D+m7ylLQgV52jwHOXXS9toRhIo76HY6Q5Qbz9koP/x+
|
||||||
|
MOwmNJ+dLQj/qI1WZZI7FS7Idi2dB5KMp11a2kxgeBIxwkCreBm/MLfdLRyaMdGX
|
||||||
|
1L05AI0d7lCu+N+Fu2QX9wToBZ4rRQFrdakgCXqXCdM1O4Akf1KvCDXHUJKgMQUE
|
||||||
|
Hav+XOE7nrtxIwfH4VjmCZYRE+8ZTYbG8xSHDwIRMxhsLnb63w==
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,28 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDxI1ZDRvuNnkVB
|
||||||
|
JgTZmnwF97d7Ace+R0gSSkWi2l2oezakLSdUUkiysr1wx45u2Du36FNqMGg7LiCZ
|
||||||
|
SX1e2Zba96PI6vwNGnlprCfXTe2eV3W8kMPKA6c9X8BTktMZINNHO3K591jGx+uM
|
||||||
|
fyrl6/CFVPHNkl73Ium9u91JXIX9BOata4RTlphmHADc+hPXuC6oeN8qayZvV2rV
|
||||||
|
Jfx1wMlWCMiGJM36JJO5pywteBCKQkVJuJ7y29XF2wT690o+i6ugk+yI2/2OpiET
|
||||||
|
2E5SYdvyhlbcU+iBERsnY3X7IvFY8/m00YIjIc3reGSEwt9M5WTPRCjgonnpQGAx
|
||||||
|
9xWXwqkzAgMBAAECggEAT9b2YdInye0EWxy+cFoBBGzPeE/PlcW+LCghRFlutzEM
|
||||||
|
l3FH21hfL6OUq7m3BCZeJ3cp3zfl2upb6sT1WKlMlHV36jc7ew8v8fgJPPVVXp7w
|
||||||
|
oZ2A5estvVltsX4knOZMbgJV6xLldvOMnvkf9/6VpV/Jq9nxzXvmzmZcT0TuLCaF
|
||||||
|
uPk/g/yD5qQ8LkWXDVJeBiDrrOZYo5F+T8bveYKKIEZV0ZAlXwJqVOUFnhffIaDF
|
||||||
|
fZVDOv4K3+q0aRDLTY2hxptHZiKzpLXgU634nBN3fiy0Fj88upNIus22gjaz+Jfx
|
||||||
|
2pYv22iGNXAMFQwGaeuT7d4+qhgxze8C7YlLJsJWCQKBgQD8kkXbgYG+8NoKmovz
|
||||||
|
ki9nuK1R6On5pNjZ344SJm6t/s4FaxQhE/4oHvODwgolqKyT2Sq1K8/5NInRGA29
|
||||||
|
xPqqkkhwWk3Zf9VTXgmuXsOikPhbCOuiehO+6/ZthmHYy1jBMqkAIWYaL9Ytn2qb
|
||||||
|
dKMHwzNdnppQNdQnwmXI2ZdRBQKBgQD0aVTSOmKfKdIxH9qFLdbi2CoyJMzjAjm9
|
||||||
|
Ss5M0OhI9wZnCXyjPBx4hOs+M/BKx4lQ296u2Dh+gSK3L8K3x8lVqqx8gd614qaC
|
||||||
|
EWzXZpAbd1S835o2vVYEWXU0iI9s0jkj+VnILEWBMRPYManRUATB2phwRPulimdu
|
||||||
|
o+BWN0GG1wKBgCYBxO1hMasQB1+tHf5LM0MCcWJwEDV27wLqNzDYA7O/MjVyhZbs
|
||||||
|
sURMVAyxuGEuXrno5hpZO3SeyVZjrj2uVKIyXSA7FpfyOqHO9tn8fKgL9LOORhcv
|
||||||
|
E6WZUH3uyO6cuwBnpTLV082BAVPgN2SpSpcycppV8Za8Yu6QvExbIgAZAoGBALcq
|
||||||
|
ANETxDj3hHggIQlRkwqpaOXvQkSVtGOxne1fWdTkmz24lFlYgRWotwsErX29D6Ez
|
||||||
|
RSzPCXd0m2mhN1G3PaEfqOgeA6NXWeV73Y+HY1PSGAT7pXyEY+QajoVyGdo5qWzW
|
||||||
|
P3yOAQCSoQaSIWulhgspILhyWgxzLpRx53t1KXw9AoGBAOxsrIrx/S6onTz58ncZ
|
||||||
|
m99OWwJX4WmY5KKhc5dWrfgHrNfldSbhjRhjALy6hSPzkaVy01wXKeeIZl64rUbd
|
||||||
|
S/r58yALQ5wuIHAi53BLStxgqEdHQHLg16GqL3b/+Waaf+Fy9y5eoUQ976HPr33G
|
||||||
|
uDJ1AAnWjX3KvcyZeWLFTU2/
|
||||||
|
-----END PRIVATE KEY-----
|
|
@ -0,0 +1,24 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
MIIEGTCCAwGgAwIBAgIEASUKPDANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJD
|
||||||
|
TjENMAsGA1UECgwEVFA0QTEZMBcGA1UECwwQVFA0QSBUZWxlcG9ydCBDQTEZMBcG
|
||||||
|
A1UEAwwQVFA0QSBUZWxlcG9ydCBDQTAgFw0xODExMDgxNzMyMjdaGA8yMTE4MTAx
|
||||||
|
NTE3MzIyN1owXzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkJKMQswCQYDVQQHDAJ0
|
||||||
|
cDERMA8GA1UECgwIVGVsZXBvcnQxDzANBgNVBAsMBkFzc2lzdDESMBAGA1UEAwwJ
|
||||||
|
bG9jYWxob3N0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8SNWQ0b7
|
||||||
|
jZ5FQSYE2Zp8Bfe3ewHHvkdIEkpFotpdqHs2pC0nVFJIsrK9cMeObtg7t+hTajBo
|
||||||
|
Oy4gmUl9XtmW2vejyOr8DRp5aawn103tnld1vJDDygOnPV/AU5LTGSDTRztyufdY
|
||||||
|
xsfrjH8q5evwhVTxzZJe9yLpvbvdSVyF/QTmrWuEU5aYZhwA3PoT17guqHjfKmsm
|
||||||
|
b1dq1SX8dcDJVgjIhiTN+iSTuacsLXgQikJFSbie8tvVxdsE+vdKPouroJPsiNv9
|
||||||
|
jqYhE9hOUmHb8oZW3FPogREbJ2N1+yLxWPP5tNGCIyHN63hkhMLfTOVkz0Qo4KJ5
|
||||||
|
6UBgMfcVl8KpMwIDAQABo4HnMIHkMB0GA1UdDgQWBBRc5d0h39QISTM55kCqPyy1
|
||||||
|
dohEHTB6BgNVHSMEczBxgBSh6jvPH2KfGq3ekij4vF+Bqa/roqFWpFQwUjELMAkG
|
||||||
|
A1UEBhMCQ04xDTALBgNVBAoMBFRQNEExGTAXBgNVBAsMEFRQNEEgVGVsZXBvcnQg
|
||||||
|
Q0ExGTAXBgNVBAMMEFRQNEEgVGVsZXBvcnQgQ0GCAQAwDAYDVR0TAQH/BAIwADAO
|
||||||
|
BgNVHQ8BAf8EBAMCA4gwEwYDVR0lBAwwCgYIKwYBBQUHAwEwFAYDVR0RBA0wC4IJ
|
||||||
|
bG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQAfj/CpFDhv5CrnN2kxhtRAmesJ
|
||||||
|
q6/KxxkBaimjbS/BpfvqfC9RxGH7MIqGUkbC4/ADkEt2OmVU4+f2R3+rCl+x+r1t
|
||||||
|
9+3r/JSYYVBxFnF1GbDhiY9sKahgb4HoFjE2Fj8eVODcEzdApLr198p5IIIyfBys
|
||||||
|
WHV4CYFMvq5qCKbSR/JMfrm9GArAh1J+B+JMIfm8xwerFi0tfK2YT+N4QkvbidjG
|
||||||
|
sd+RKlR51GHo9m4iEQ7mDd9H8joVrVs2MVLGf2EoVU5y/Ahee4g7k3SKrn3GI/Ec
|
||||||
|
6BRCht+INCLI3bnC3MtJHJRzv5Vmu4pSh3cwnVHfe+VWLGvGlp2+KeC02xZ2
|
||||||
|
-----END CERTIFICATE-----
|
|
@ -0,0 +1,113 @@
|
||||||
|
{
|
||||||
|
"file_version": 3,
|
||||||
|
"ssh": {
|
||||||
|
"selected": "terminal",
|
||||||
|
"available": [
|
||||||
|
{
|
||||||
|
"name":"terminal",
|
||||||
|
"display": "终端(系统自带)",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "Basic",
|
||||||
|
"desc": ["命令参数为终端偏好设置中描述文件的名称"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "iterm2",
|
||||||
|
"display": "iTerm2",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "Default",
|
||||||
|
"desc": ["命令参数为iTerm偏好设置中描述文件的名称"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "securecrt",
|
||||||
|
"display": "SecureCRT",
|
||||||
|
"app": "/Applications/SecureCRT.app/Contents/MacOS/SecureCRT",
|
||||||
|
"cmdline": "/T /N \"TP#ssh://{real_ip}\" /SSH2 /L {user_name} /PASSWORD **** {host_ip}:{host_port}",
|
||||||
|
"desc": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "other",
|
||||||
|
"display": "自定义",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "",
|
||||||
|
"desc": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"sftp": {
|
||||||
|
"selected": "securefx",
|
||||||
|
"available": [
|
||||||
|
{
|
||||||
|
"name": "securefx",
|
||||||
|
"display": "SecureFX",
|
||||||
|
"app": "/Applications/SecureFX.app/Contents/MacOS/SecureFX",
|
||||||
|
"cmdline": "sftp://{user_name}:****@{host_ip}:{host_port}",
|
||||||
|
"desc": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "filezilla",
|
||||||
|
"display": "FileZilla",
|
||||||
|
"app": "/Applications/FileZilla.app/Contents/MacOS/filezilla",
|
||||||
|
"cmdline": "sftp://{user_name}:****@{host_ip}:{host_port}",
|
||||||
|
"desc": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "other",
|
||||||
|
"display": "自定义",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "",
|
||||||
|
"desc": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"telnet": {
|
||||||
|
"selected": "terminal",
|
||||||
|
"available": [
|
||||||
|
{
|
||||||
|
"name":"terminal",
|
||||||
|
"display": "终端(系统自带)",
|
||||||
|
"app": "Terminal.app",
|
||||||
|
"cmdline": "Basic",
|
||||||
|
"desc": ["命令参数为终端偏好设置中描述文件的名称"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "iterm2",
|
||||||
|
"display": "iTerm2",
|
||||||
|
"app": "iTerm2.app",
|
||||||
|
"cmdline": "Default",
|
||||||
|
"desc": ["命令参数为iTerm偏好设置中描述文件的名称"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "securecrt",
|
||||||
|
"display": "SecureCRT",
|
||||||
|
"app": "SecureCRT.app",
|
||||||
|
"cmdline": "/T /N \"TP#telnet://{real_ip}\" /TELNET {user_name}@{host_ip} {host_port}",
|
||||||
|
"desc": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "other",
|
||||||
|
"display": "自定义",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "",
|
||||||
|
"desc": []
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
"rdp": {
|
||||||
|
"selected": "freerdp",
|
||||||
|
"available": [
|
||||||
|
{
|
||||||
|
"name": "FreeRDP",
|
||||||
|
"display": "FreeRDP",
|
||||||
|
"app": "",
|
||||||
|
"cmdline": "",
|
||||||
|
"desc": [
|
||||||
|
"建议使用homebrew安装freerdp,安装后freerdp默认路径在:/usr/local/Cellar/freerdp/x.y.z/bin/xfreerdp",
|
||||||
|
"首次安装freerdp后需要重新启动计算机"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
0
client/tp_assist_win/cfg/tp-assist.default.json → client/cfg/tp-assist.windows.json
Normal file → Executable file
|
@ -3,19 +3,26 @@
|
||||||
archiveVersion = 1;
|
archiveVersion = 1;
|
||||||
classes = {
|
classes = {
|
||||||
};
|
};
|
||||||
objectVersion = 46;
|
objectVersion = 51;
|
||||||
objects = {
|
objects = {
|
||||||
|
|
||||||
/* Begin PBXBuildFile section */
|
/* Begin PBXBuildFile section */
|
||||||
0ADB3B0C178EF8DB004E9BB9 /* StatusIconAlt.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */; };
|
0ADB3B0C178EF8DB004E9BB9 /* StatusIconAlt.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */; };
|
||||||
0ADB3B0D178EF8DB004E9BB9 /* StatusIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */; };
|
0ADB3B0D178EF8DB004E9BB9 /* StatusIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */; };
|
||||||
0ADB3B0E178EF8DB004E9BB9 /* StatusIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B0A178EF8DB004E9BB9 /* StatusIcon@2x.png */; };
|
|
||||||
0ADB3B0F178EF8DB004E9BB9 /* StatusIconAlt@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 0ADB3B0B178EF8DB004E9BB9 /* StatusIconAlt@2x.png */; };
|
|
||||||
7A0C94AA1F68BD2900E04C3E /* AboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC541A51D45CF7F00A896E3 /* AboutWindowController.xib */; };
|
7A0C94AA1F68BD2900E04C3E /* AboutWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 6FC541A51D45CF7F00A896E3 /* AboutWindowController.xib */; };
|
||||||
7A18188F1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A18188E1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp */; };
|
7A18188F1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A18188E1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp */; };
|
||||||
7A1818911F7FBBC200F3C882 /* tp-assist.default.json in Resources */ = {isa = PBXBuildFile; fileRef = 7A1818901F7FBBC200F3C882 /* tp-assist.default.json */; };
|
7A1F87B1215D5A1600B69F88 /* StatusIconAlt@2X.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A1F87AF215D5A1600B69F88 /* StatusIconAlt@2X.png */; };
|
||||||
7A1818931F815B8A00F3C882 /* Terminal.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 7A1818921F815B8A00F3C882 /* Terminal.scpt */; };
|
7A1F87B2215D5A1600B69F88 /* StatusIcon@2X.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A1F87B0215D5A1600B69F88 /* StatusIcon@2X.png */; };
|
||||||
7A27E4A91F6A8EEC004FDE5D /* ts_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */; };
|
7A27E4A91F6A8EEC004FDE5D /* ts_env.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */; };
|
||||||
|
7A7C6C9121973C24006869D9 /* StatusIconAlt@3X.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C8F21973C24006869D9 /* StatusIconAlt@3X.png */; };
|
||||||
|
7A7C6C9221973C24006869D9 /* StatusIcon@3X.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9021973C24006869D9 /* StatusIcon@3X.png */; };
|
||||||
|
7A7C6C9621973C69006869D9 /* tpassist.png in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9521973C69006869D9 /* tpassist.png */; };
|
||||||
|
7A7C6C9C21974094006869D9 /* cacert.cer in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9921974094006869D9 /* cacert.cer */; };
|
||||||
|
7A7C6C9D21974094006869D9 /* localhost.key in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9A21974094006869D9 /* localhost.key */; };
|
||||||
|
7A7C6C9E21974094006869D9 /* localhost.pem in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9B21974094006869D9 /* localhost.pem */; };
|
||||||
|
7A7C6CA02197410B006869D9 /* tp-assist.macos.json in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6C9F2197410B006869D9 /* tp-assist.macos.json */; };
|
||||||
|
7A7C6CAA21977F07006869D9 /* iterm2.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6CA821977F07006869D9 /* iterm2.scpt */; };
|
||||||
|
7A7C6CAB21977F07006869D9 /* terminal.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 7A7C6CA921977F07006869D9 /* terminal.scpt */; };
|
||||||
7AA2CD381F6A92620074C92B /* ts_http_rpc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD371F6A92620074C92B /* ts_http_rpc.cpp */; };
|
7AA2CD381F6A92620074C92B /* ts_http_rpc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD371F6A92620074C92B /* ts_http_rpc.cpp */; };
|
||||||
7AA2CD3B1F6A955A0074C92B /* ts_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD391F6A955A0074C92B /* ts_cfg.cpp */; };
|
7AA2CD3B1F6A955A0074C92B /* ts_cfg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD391F6A955A0074C92B /* ts_cfg.cpp */; };
|
||||||
7AA2CD441F6AB9750074C92B /* ex_ini.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD3D1F6AB9750074C92B /* ex_ini.cpp */; };
|
7AA2CD441F6AB9750074C92B /* ex_ini.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD3D1F6AB9750074C92B /* ex_ini.cpp */; };
|
||||||
|
@ -30,7 +37,8 @@
|
||||||
7AA2CD541F6AB9F10074C92B /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD501F6AB9F10074C92B /* json_writer.cpp */; };
|
7AA2CD541F6AB9F10074C92B /* json_writer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD501F6AB9F10074C92B /* json_writer.cpp */; };
|
||||||
7AA2CD571F6ABA2E0074C92B /* mongoose.c in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD561F6ABA2E0074C92B /* mongoose.c */; };
|
7AA2CD571F6ABA2E0074C92B /* mongoose.c in Sources */ = {isa = PBXBuildFile; fileRef = 7AA2CD561F6ABA2E0074C92B /* mongoose.c */; };
|
||||||
7AA2CD591F6AC0DA0074C92B /* site in Resources */ = {isa = PBXBuildFile; fileRef = 7AA2CD581F6AC0DA0074C92B /* site */; };
|
7AA2CD591F6AC0DA0074C92B /* site in Resources */ = {isa = PBXBuildFile; fileRef = 7AA2CD581F6AC0DA0074C92B /* site */; };
|
||||||
7AD1F1D31F7A55EA0048A496 /* iTerm2.scpt in Resources */ = {isa = PBXBuildFile; fileRef = 7AD1F1D11F7A55EA0048A496 /* iTerm2.scpt */; };
|
7AF9BF272199E3DE00BE5DBC /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF9BF1F2199E31A00BE5DBC /* libssl.a */; };
|
||||||
|
7AF9BF292199E3DF00BE5DBC /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AF9BF282199E3DF00BE5DBC /* libcrypto.a */; };
|
||||||
A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1B7B9DF1DB53ED200809327 /* Localizable.strings */; };
|
A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = A1B7B9DF1DB53ED200809327 /* Localizable.strings */; };
|
||||||
A1D700071A5DCE8D003563E4 /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D700061A5DCE8D003563E4 /* AboutWindowController.m */; };
|
A1D700071A5DCE8D003563E4 /* AboutWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = A1D700061A5DCE8D003563E4 /* AboutWindowController.m */; };
|
||||||
C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C149EBFD15D5214600B1F558 /* Cocoa.framework */; };
|
C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C149EBFD15D5214600B1F558 /* Cocoa.framework */; };
|
||||||
|
@ -44,17 +52,44 @@
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusIconAlt.png; sourceTree = "<group>"; };
|
0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusIconAlt.png; sourceTree = "<group>"; };
|
||||||
0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusIcon.png; sourceTree = "<group>"; };
|
0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusIcon.png; sourceTree = "<group>"; };
|
||||||
0ADB3B0A178EF8DB004E9BB9 /* StatusIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIcon@2x.png"; sourceTree = "<group>"; };
|
|
||||||
0ADB3B0B178EF8DB004E9BB9 /* StatusIconAlt@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIconAlt@2x.png"; sourceTree = "<group>"; };
|
|
||||||
7A18188E1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "AppDelegate-C-Interface.cpp"; sourceTree = "<group>"; };
|
7A18188E1F7D5D7F00F3C882 /* AppDelegate-C-Interface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "AppDelegate-C-Interface.cpp"; sourceTree = "<group>"; };
|
||||||
7A1818901F7FBBC200F3C882 /* tp-assist.default.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = "tp-assist.default.json"; sourceTree = "<group>"; };
|
|
||||||
7A1818921F815B8A00F3C882 /* Terminal.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = Terminal.scpt; sourceTree = "<group>"; };
|
|
||||||
7A1818951F8242E900F3C882 /* apple-scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "apple-scripts"; sourceTree = "<group>"; };
|
7A1818951F8242E900F3C882 /* apple-scripts */ = {isa = PBXFileReference; lastKnownFileType = folder; path = "apple-scripts"; sourceTree = "<group>"; };
|
||||||
|
7A1F8797215D565600B69F88 /* ex_util.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_util.h; path = ../../../../common/libex/include/ex/ex_util.h; sourceTree = "<group>"; };
|
||||||
|
7A1F8798215D565600B69F88 /* ex_ini.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_ini.h; path = ../../../../common/libex/include/ex/ex_ini.h; sourceTree = "<group>"; };
|
||||||
|
7A1F8799215D565600B69F88 /* ex_const.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_const.h; path = ../../../../common/libex/include/ex/ex_const.h; sourceTree = "<group>"; };
|
||||||
|
7A1F879B215D565600B69F88 /* ex_log.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_log.h; path = ../../../../common/libex/include/ex/ex_log.h; sourceTree = "<group>"; };
|
||||||
|
7A1F879C215D565600B69F88 /* ex_platform.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_platform.h; path = ../../../../common/libex/include/ex/ex_platform.h; sourceTree = "<group>"; };
|
||||||
|
7A1F879D215D565600B69F88 /* ex_types.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_types.h; path = ../../../../common/libex/include/ex/ex_types.h; sourceTree = "<group>"; };
|
||||||
|
7A1F879E215D565700B69F88 /* ex_str.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_str.h; path = ../../../../common/libex/include/ex/ex_str.h; sourceTree = "<group>"; };
|
||||||
|
7A1F879F215D565700B69F88 /* ex_path.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = ex_path.h; path = ../../../../common/libex/include/ex/ex_path.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A0215D565700B69F88 /* ex_thread.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 2147486000; name = ex_thread.h; path = ../../../../common/libex/include/ex/ex_thread.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A1215D56B500B69F88 /* writer.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = writer.h; path = ../../../../external/jsoncpp/include/json/writer.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A2215D570000B69F88 /* value.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = value.h; path = ../../../../external/jsoncpp/include/json/value.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A3215D570000B69F88 /* reader.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = reader.h; path = ../../../../external/jsoncpp/include/json/reader.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A4215D570000B69F88 /* json.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = json.h; path = ../../../../external/jsoncpp/include/json/json.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A5215D574400B69F88 /* config.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = config.h; path = ../../../../external/jsoncpp/include/json/config.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A6215D574500B69F88 /* features.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = features.h; path = ../../../../external/jsoncpp/include/json/features.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A7215D574500B69F88 /* forwards.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = forwards.h; path = ../../../../external/jsoncpp/include/json/forwards.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A8215D574500B69F88 /* assertions.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = assertions.h; path = ../../../../external/jsoncpp/include/json/assertions.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87A9215D574500B69F88 /* autolink.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = autolink.h; path = ../../../../external/jsoncpp/include/json/autolink.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87AA215D574500B69F88 /* version.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = version.h; path = ../../../../external/jsoncpp/include/json/version.h; sourceTree = "<group>"; };
|
||||||
|
7A1F87AF215D5A1600B69F88 /* StatusIconAlt@2X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIconAlt@2X.png"; sourceTree = "<group>"; };
|
||||||
|
7A1F87B0215D5A1600B69F88 /* StatusIcon@2X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIcon@2X.png"; sourceTree = "<group>"; };
|
||||||
7A27E4A61F6A899B004FDE5D /* ts_const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_const.h; sourceTree = "<group>"; };
|
7A27E4A61F6A899B004FDE5D /* ts_const.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_const.h; sourceTree = "<group>"; };
|
||||||
7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_env.cpp; sourceTree = "<group>"; };
|
7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_env.cpp; sourceTree = "<group>"; };
|
||||||
7A27E4A81F6A8EEC004FDE5D /* ts_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_env.h; sourceTree = "<group>"; };
|
7A27E4A81F6A8EEC004FDE5D /* ts_env.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_env.h; sourceTree = "<group>"; };
|
||||||
7A40FFE21F7B2A4500F11697 /* AppDelegate-C-Interface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppDelegate-C-Interface.h"; sourceTree = "<group>"; };
|
7A40FFE21F7B2A4500F11697 /* AppDelegate-C-Interface.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "AppDelegate-C-Interface.h"; sourceTree = "<group>"; };
|
||||||
7AA2CD361F6A92380074C92B /* ts_http_rpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_http_rpc.h; sourceTree = "<group>"; };
|
7A7C6C8F21973C24006869D9 /* StatusIconAlt@3X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIconAlt@3X.png"; sourceTree = "<group>"; };
|
||||||
|
7A7C6C9021973C24006869D9 /* StatusIcon@3X.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusIcon@3X.png"; sourceTree = "<group>"; };
|
||||||
|
7A7C6C9521973C69006869D9 /* tpassist.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = tpassist.png; sourceTree = "<group>"; };
|
||||||
|
7A7C6C9921974094006869D9 /* cacert.cer */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = cacert.cer; path = ../cfg/cacert.cer; sourceTree = SOURCE_ROOT; };
|
||||||
|
7A7C6C9A21974094006869D9 /* localhost.key */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = localhost.key; path = ../cfg/localhost.key; sourceTree = SOURCE_ROOT; };
|
||||||
|
7A7C6C9B21974094006869D9 /* localhost.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = localhost.pem; path = ../cfg/localhost.pem; sourceTree = SOURCE_ROOT; };
|
||||||
|
7A7C6C9F2197410B006869D9 /* tp-assist.macos.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; name = "tp-assist.macos.json"; path = "../cfg/tp-assist.macos.json"; sourceTree = SOURCE_ROOT; };
|
||||||
|
7A7C6CA12197786B006869D9 /* ts_ver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ts_ver.h; sourceTree = "<group>"; };
|
||||||
|
7A7C6CA821977F07006869D9 /* iterm2.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = iterm2.scpt; sourceTree = "<group>"; };
|
||||||
|
7A7C6CA921977F07006869D9 /* terminal.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = terminal.scpt; sourceTree = "<group>"; };
|
||||||
|
7AA2CD361F6A92380074C92B /* ts_http_rpc.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 2147486000; path = ts_http_rpc.h; sourceTree = "<group>"; };
|
||||||
7AA2CD371F6A92620074C92B /* ts_http_rpc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_http_rpc.cpp; sourceTree = "<group>"; };
|
7AA2CD371F6A92620074C92B /* ts_http_rpc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_http_rpc.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD391F6A955A0074C92B /* ts_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_cfg.cpp; sourceTree = "<group>"; };
|
7AA2CD391F6A955A0074C92B /* ts_cfg.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ts_cfg.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD3A1F6A955A0074C92B /* ts_cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_cfg.h; sourceTree = "<group>"; };
|
7AA2CD3A1F6A955A0074C92B /* ts_cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts_cfg.h; sourceTree = "<group>"; };
|
||||||
|
@ -66,13 +101,17 @@
|
||||||
7AA2CD421F6AB9750074C92B /* ex_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ex_util.cpp; path = ../../../../common/libex/src/ex_util.cpp; sourceTree = "<group>"; };
|
7AA2CD421F6AB9750074C92B /* ex_util.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ex_util.cpp; path = ../../../../common/libex/src/ex_util.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD431F6AB9750074C92B /* ex_winsrv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ex_winsrv.cpp; path = ../../../../common/libex/src/ex_winsrv.cpp; sourceTree = "<group>"; };
|
7AA2CD431F6AB9750074C92B /* ex_winsrv.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ex_winsrv.cpp; path = ../../../../common/libex/src/ex_winsrv.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD4C1F6AB9F10074C92B /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_reader.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_reader.cpp; sourceTree = "<group>"; };
|
7AA2CD4C1F6AB9F10074C92B /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_reader.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_reader.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD4D1F6AB9F10074C92B /* json_tool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = json_tool.h; path = ../../../../external/jsoncpp/src/lib_json/json_tool.h; sourceTree = "<group>"; };
|
7AA2CD4D1F6AB9F10074C92B /* json_tool.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; fileEncoding = 4; name = json_tool.h; path = ../../../../external/jsoncpp/src/lib_json/json_tool.h; sourceTree = "<group>"; };
|
||||||
7AA2CD4E1F6AB9F10074C92B /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_value.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_value.cpp; sourceTree = "<group>"; };
|
7AA2CD4E1F6AB9F10074C92B /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_value.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_value.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD4F1F6AB9F10074C92B /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_valueiterator.inl; path = ../../../../external/jsoncpp/src/lib_json/json_valueiterator.inl; sourceTree = "<group>"; };
|
7AA2CD4F1F6AB9F10074C92B /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = json_valueiterator.inl; path = ../../../../external/jsoncpp/src/lib_json/json_valueiterator.inl; sourceTree = "<group>"; };
|
||||||
7AA2CD501F6AB9F10074C92B /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_writer.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_writer.cpp; sourceTree = "<group>"; };
|
7AA2CD501F6AB9F10074C92B /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = json_writer.cpp; path = ../../../../external/jsoncpp/src/lib_json/json_writer.cpp; sourceTree = "<group>"; };
|
||||||
7AA2CD561F6ABA2E0074C92B /* mongoose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mongoose.c; path = ../../../../external/mongoose/mongoose.c; sourceTree = "<group>"; };
|
7AA2CD561F6ABA2E0074C92B /* mongoose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = mongoose.c; path = ../../../../external/mongoose/mongoose.c; sourceTree = "<group>"; };
|
||||||
7AA2CD581F6AC0DA0074C92B /* site */ = {isa = PBXFileReference; lastKnownFileType = folder; path = site; sourceTree = "<group>"; };
|
7AA2CD581F6AC0DA0074C92B /* site */ = {isa = PBXFileReference; lastKnownFileType = folder; path = site; sourceTree = "<group>"; };
|
||||||
7AD1F1D11F7A55EA0048A496 /* iTerm2.scpt */ = {isa = PBXFileReference; lastKnownFileType = file; path = iTerm2.scpt; sourceTree = "<group>"; };
|
7AF9BF1F2199E31A00BE5DBC /* libssl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libssl.a; path = ../../external/macos/release/lib/libssl.a; sourceTree = "<group>"; };
|
||||||
|
7AF9BF212199E32B00BE5DBC /* libmbedx509.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbedx509.a; path = ../../external/macos/release/lib/libmbedx509.a; sourceTree = "<group>"; };
|
||||||
|
7AF9BF222199E32B00BE5DBC /* libmbedtls.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbedtls.a; path = ../../external/macos/release/lib/libmbedtls.a; sourceTree = "<group>"; };
|
||||||
|
7AF9BF232199E32B00BE5DBC /* libmbedcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libmbedcrypto.a; path = ../../external/macos/release/lib/libmbedcrypto.a; sourceTree = "<group>"; };
|
||||||
|
7AF9BF282199E3DF00BE5DBC /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = ../../external/macos/release/lib/libcrypto.a; sourceTree = "<group>"; };
|
||||||
A1B7B9D31DB5361700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
A1B7B9D31DB5361700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||||
A1B7B9DE1DB53ED200809327 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
A1B7B9DE1DB53ED200809327 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
A1B7B9E01DB53ED700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
|
A1B7B9E01DB53ED700809327 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = Base; path = Base.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
@ -84,18 +123,18 @@
|
||||||
A1B7B9F11DB54D8C00809327 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/AboutWindowController.strings"; sourceTree = "<group>"; };
|
A1B7B9F11DB54D8C00809327 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/AboutWindowController.strings"; sourceTree = "<group>"; };
|
||||||
A1D700051A5DCDF4003563E4 /* AboutWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutWindowController.h; sourceTree = "<group>"; };
|
A1D700051A5DCDF4003563E4 /* AboutWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AboutWindowController.h; sourceTree = "<group>"; };
|
||||||
A1D700061A5DCE8D003563E4 /* AboutWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AboutWindowController.m; sourceTree = "<group>"; };
|
A1D700061A5DCE8D003563E4 /* AboutWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AboutWindowController.m; sourceTree = "<group>"; };
|
||||||
C149EBF915D5214600B1F558 /* tp_assist.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = tp_assist.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
C149EBF915D5214600B1F558 /* TP-Assist.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "TP-Assist.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
C149EBFD15D5214600B1F558 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
C149EBFD15D5214600B1F558 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||||
C149EC0015D5214600B1F558 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
C149EC0015D5214600B1F558 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||||
C149EC0115D5214600B1F558 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
C149EC0115D5214600B1F558 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||||
C149EC0215D5214600B1F558 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
C149EC0215D5214600B1F558 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||||
C149EC0515D5214600B1F558 /* tp_assist-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "tp_assist-Info.plist"; sourceTree = "<group>"; };
|
C149EC0515D5214600B1F558 /* TP-Assist-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TP-Assist-Info.plist"; sourceTree = "<group>"; };
|
||||||
C149EC0715D5214600B1F558 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
C149EC0715D5214600B1F558 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
C149EC0915D5214600B1F558 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
C149EC0915D5214600B1F558 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
C149EC0B15D5214600B1F558 /* tp_assist-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "tp_assist-Prefix.pch"; sourceTree = "<group>"; };
|
C149EC0B15D5214600B1F558 /* TP-Assist-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "TP-Assist-Prefix.pch"; sourceTree = "<group>"; };
|
||||||
C149EC0F15D5214600B1F558 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
C149EC0F15D5214600B1F558 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||||
C149EC1015D5214600B1F558 /* AppDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = "<group>"; };
|
C149EC1015D5214600B1F558 /* AppDelegate.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = AppDelegate.mm; sourceTree = "<group>"; };
|
||||||
C159DC2715D5DE7F00F5DE24 /* teleport.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; name = teleport.icns; path = ../teleport.icns; sourceTree = "<group>"; };
|
C159DC2715D5DE7F00F5DE24 /* teleport.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = teleport.icns; sourceTree = "<group>"; };
|
||||||
/* End PBXFileReference section */
|
/* End PBXFileReference section */
|
||||||
|
|
||||||
/* Begin PBXFrameworksBuildPhase section */
|
/* Begin PBXFrameworksBuildPhase section */
|
||||||
|
@ -104,6 +143,8 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */,
|
C149EBFE15D5214600B1F558 /* Cocoa.framework in Frameworks */,
|
||||||
|
7AF9BF292199E3DF00BE5DBC /* libcrypto.a in Frameworks */,
|
||||||
|
7AF9BF272199E3DE00BE5DBC /* libssl.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -113,17 +154,41 @@
|
||||||
0ADB3B10178EF8E2004E9BB9 /* Images */ = {
|
0ADB3B10178EF8E2004E9BB9 /* Images */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7A7C6C9021973C24006869D9 /* StatusIcon@3X.png */,
|
||||||
|
7A7C6C8F21973C24006869D9 /* StatusIconAlt@3X.png */,
|
||||||
|
7A7C6C9521973C69006869D9 /* tpassist.png */,
|
||||||
|
7A1F87B0215D5A1600B69F88 /* StatusIcon@2X.png */,
|
||||||
|
7A1F87AF215D5A1600B69F88 /* StatusIconAlt@2X.png */,
|
||||||
0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */,
|
0ADB3B09178EF8DB004E9BB9 /* StatusIcon.png */,
|
||||||
0ADB3B0A178EF8DB004E9BB9 /* StatusIcon@2x.png */,
|
|
||||||
0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */,
|
0ADB3B08178EF8DB004E9BB9 /* StatusIconAlt.png */,
|
||||||
0ADB3B0B178EF8DB004E9BB9 /* StatusIconAlt@2x.png */,
|
|
||||||
);
|
);
|
||||||
name = Images;
|
name = Images;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
7A45423D2196E32800FEB5B4 /* cfg */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
7A7C6C9921974094006869D9 /* cacert.cer */,
|
||||||
|
7A7C6C9A21974094006869D9 /* localhost.key */,
|
||||||
|
7A7C6C9B21974094006869D9 /* localhost.pem */,
|
||||||
|
7A7C6C9F2197410B006869D9 /* tp-assist.macos.json */,
|
||||||
|
);
|
||||||
|
name = cfg;
|
||||||
|
path = ../cfg;
|
||||||
|
sourceTree = SOURCE_ROOT;
|
||||||
|
};
|
||||||
7AA2CD3C1F6AB9560074C92B /* libex */ = {
|
7AA2CD3C1F6AB9560074C92B /* libex */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7A1F8799215D565600B69F88 /* ex_const.h */,
|
||||||
|
7A1F8798215D565600B69F88 /* ex_ini.h */,
|
||||||
|
7A1F879B215D565600B69F88 /* ex_log.h */,
|
||||||
|
7A1F879F215D565700B69F88 /* ex_path.h */,
|
||||||
|
7A1F879C215D565600B69F88 /* ex_platform.h */,
|
||||||
|
7A1F879E215D565700B69F88 /* ex_str.h */,
|
||||||
|
7A1F87A0215D565700B69F88 /* ex_thread.h */,
|
||||||
|
7A1F879D215D565600B69F88 /* ex_types.h */,
|
||||||
|
7A1F8797215D565600B69F88 /* ex_util.h */,
|
||||||
7AA2CD3D1F6AB9750074C92B /* ex_ini.cpp */,
|
7AA2CD3D1F6AB9750074C92B /* ex_ini.cpp */,
|
||||||
7AA2CD3E1F6AB9750074C92B /* ex_log.cpp */,
|
7AA2CD3E1F6AB9750074C92B /* ex_log.cpp */,
|
||||||
7AA2CD3F1F6AB9750074C92B /* ex_path.cpp */,
|
7AA2CD3F1F6AB9750074C92B /* ex_path.cpp */,
|
||||||
|
@ -138,6 +203,16 @@
|
||||||
7AA2CD4B1F6AB9880074C92B /* jsoncpp */ = {
|
7AA2CD4B1F6AB9880074C92B /* jsoncpp */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7A1F87A8215D574500B69F88 /* assertions.h */,
|
||||||
|
7A1F87A9215D574500B69F88 /* autolink.h */,
|
||||||
|
7A1F87A5215D574400B69F88 /* config.h */,
|
||||||
|
7A1F87A6215D574500B69F88 /* features.h */,
|
||||||
|
7A1F87A7215D574500B69F88 /* forwards.h */,
|
||||||
|
7A1F87AA215D574500B69F88 /* version.h */,
|
||||||
|
7A1F87A4215D570000B69F88 /* json.h */,
|
||||||
|
7A1F87A3215D570000B69F88 /* reader.h */,
|
||||||
|
7A1F87A2215D570000B69F88 /* value.h */,
|
||||||
|
7A1F87A1215D56B500B69F88 /* writer.h */,
|
||||||
7AA2CD4C1F6AB9F10074C92B /* json_reader.cpp */,
|
7AA2CD4C1F6AB9F10074C92B /* json_reader.cpp */,
|
||||||
7AA2CD4D1F6AB9F10074C92B /* json_tool.h */,
|
7AA2CD4D1F6AB9F10074C92B /* json_tool.h */,
|
||||||
7AA2CD4E1F6AB9F10074C92B /* json_value.cpp */,
|
7AA2CD4E1F6AB9F10074C92B /* json_value.cpp */,
|
||||||
|
@ -168,15 +243,23 @@
|
||||||
7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */,
|
7A27E4A71F6A8EEC004FDE5D /* ts_env.cpp */,
|
||||||
7A27E4A81F6A8EEC004FDE5D /* ts_env.h */,
|
7A27E4A81F6A8EEC004FDE5D /* ts_env.h */,
|
||||||
7A27E4A61F6A899B004FDE5D /* ts_const.h */,
|
7A27E4A61F6A899B004FDE5D /* ts_const.h */,
|
||||||
|
7A7C6CA12197786B006869D9 /* ts_ver.h */,
|
||||||
);
|
);
|
||||||
path = csrc;
|
path = csrc;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
7AF9BF1E2199E0DD00BE5DBC /* mbedtls */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
);
|
||||||
|
name = mbedtls;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
A12D9BE61BCF2C72004F52A6 /* apple-scpt */ = {
|
A12D9BE61BCF2C72004F52A6 /* apple-scpt */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
7A1818921F815B8A00F3C882 /* Terminal.scpt */,
|
7A7C6CA821977F07006869D9 /* iterm2.scpt */,
|
||||||
7AD1F1D11F7A55EA0048A496 /* iTerm2.scpt */,
|
7A7C6CA921977F07006869D9 /* terminal.scpt */,
|
||||||
);
|
);
|
||||||
path = "apple-scpt";
|
path = "apple-scpt";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -186,16 +269,16 @@
|
||||||
children = (
|
children = (
|
||||||
7A1818951F8242E900F3C882 /* apple-scripts */,
|
7A1818951F8242E900F3C882 /* apple-scripts */,
|
||||||
7AA2CD581F6AC0DA0074C92B /* site */,
|
7AA2CD581F6AC0DA0074C92B /* site */,
|
||||||
C149EC0315D5214600B1F558 /* src */,
|
|
||||||
C149EBFC15D5214600B1F558 /* Frameworks */,
|
C149EBFC15D5214600B1F558 /* Frameworks */,
|
||||||
C149EBFA15D5214600B1F558 /* Products */,
|
C149EBFA15D5214600B1F558 /* Products */,
|
||||||
|
C149EC0315D5214600B1F558 /* src */,
|
||||||
);
|
);
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
C149EBFA15D5214600B1F558 /* Products */ = {
|
C149EBFA15D5214600B1F558 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C149EBF915D5214600B1F558 /* tp_assist.app */,
|
C149EBF915D5214600B1F558 /* TP-Assist.app */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -203,6 +286,11 @@
|
||||||
C149EBFC15D5214600B1F558 /* Frameworks */ = {
|
C149EBFC15D5214600B1F558 /* Frameworks */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
7AF9BF282199E3DF00BE5DBC /* libcrypto.a */,
|
||||||
|
7AF9BF232199E32B00BE5DBC /* libmbedcrypto.a */,
|
||||||
|
7AF9BF222199E32B00BE5DBC /* libmbedtls.a */,
|
||||||
|
7AF9BF212199E32B00BE5DBC /* libmbedx509.a */,
|
||||||
|
7AF9BF1F2199E31A00BE5DBC /* libssl.a */,
|
||||||
C149EBFD15D5214600B1F558 /* Cocoa.framework */,
|
C149EBFD15D5214600B1F558 /* Cocoa.framework */,
|
||||||
C149EBFF15D5214600B1F558 /* Other Frameworks */,
|
C149EBFF15D5214600B1F558 /* Other Frameworks */,
|
||||||
);
|
);
|
||||||
|
@ -222,10 +310,11 @@
|
||||||
C149EC0315D5214600B1F558 /* src */ = {
|
C149EC0315D5214600B1F558 /* src */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
7A1818901F7FBBC200F3C882 /* tp-assist.default.json */,
|
7AF9BF1E2199E0DD00BE5DBC /* mbedtls */,
|
||||||
|
7A45423D2196E32800FEB5B4 /* cfg */,
|
||||||
7AD3E8741F6A7CC600D2EB48 /* csrc */,
|
7AD3E8741F6A7CC600D2EB48 /* csrc */,
|
||||||
A12D9BE61BCF2C72004F52A6 /* apple-scpt */,
|
A12D9BE61BCF2C72004F52A6 /* apple-scpt */,
|
||||||
C159DC2715D5DE7F00F5DE24 /* teleport.icns */,
|
C149EC0915D5214600B1F558 /* main.m */,
|
||||||
C149EC0F15D5214600B1F558 /* AppDelegate.h */,
|
C149EC0F15D5214600B1F558 /* AppDelegate.h */,
|
||||||
C149EC1015D5214600B1F558 /* AppDelegate.mm */,
|
C149EC1015D5214600B1F558 /* AppDelegate.mm */,
|
||||||
C149EC1215D5214600B1F558 /* MainMenu.xib */,
|
C149EC1215D5214600B1F558 /* MainMenu.xib */,
|
||||||
|
@ -243,10 +332,10 @@
|
||||||
C149EC0415D5214600B1F558 /* Supporting Files */ = {
|
C149EC0415D5214600B1F558 /* Supporting Files */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
C149EC0515D5214600B1F558 /* tp_assist-Info.plist */,
|
C159DC2715D5DE7F00F5DE24 /* teleport.icns */,
|
||||||
|
C149EC0515D5214600B1F558 /* TP-Assist-Info.plist */,
|
||||||
C149EC0615D5214600B1F558 /* InfoPlist.strings */,
|
C149EC0615D5214600B1F558 /* InfoPlist.strings */,
|
||||||
C149EC0915D5214600B1F558 /* main.m */,
|
C149EC0B15D5214600B1F558 /* TP-Assist-Prefix.pch */,
|
||||||
C149EC0B15D5214600B1F558 /* tp_assist-Prefix.pch */,
|
|
||||||
A1B7B9DF1DB53ED200809327 /* Localizable.strings */,
|
A1B7B9DF1DB53ED200809327 /* Localizable.strings */,
|
||||||
);
|
);
|
||||||
name = "Supporting Files";
|
name = "Supporting Files";
|
||||||
|
@ -255,9 +344,9 @@
|
||||||
/* End PBXGroup section */
|
/* End PBXGroup section */
|
||||||
|
|
||||||
/* Begin PBXNativeTarget section */
|
/* Begin PBXNativeTarget section */
|
||||||
C149EBF815D5214600B1F558 /* tp_assist */ = {
|
C149EBF815D5214600B1F558 /* TP-Assist */ = {
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = C149EC1715D5214600B1F558 /* Build configuration list for PBXNativeTarget "tp_assist" */;
|
buildConfigurationList = C149EC1715D5214600B1F558 /* Build configuration list for PBXNativeTarget "TP-Assist" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
C149EBF515D5214600B1F558 /* Sources */,
|
C149EBF515D5214600B1F558 /* Sources */,
|
||||||
C149EBF615D5214600B1F558 /* Frameworks */,
|
C149EBF615D5214600B1F558 /* Frameworks */,
|
||||||
|
@ -267,9 +356,9 @@
|
||||||
);
|
);
|
||||||
dependencies = (
|
dependencies = (
|
||||||
);
|
);
|
||||||
name = tp_assist;
|
name = "TP-Assist";
|
||||||
productName = Shuttle;
|
productName = Shuttle;
|
||||||
productReference = C149EBF915D5214600B1F558 /* tp_assist.app */;
|
productReference = C149EBF915D5214600B1F558 /* TP-Assist.app */;
|
||||||
productType = "com.apple.product-type.application";
|
productType = "com.apple.product-type.application";
|
||||||
};
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
@ -279,10 +368,19 @@
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastUpgradeCheck = 0930;
|
LastUpgradeCheck = 0930;
|
||||||
ORGANIZATIONNAME = eomsoft;
|
ORGANIZATIONNAME = TP4A;
|
||||||
|
TargetAttributes = {
|
||||||
|
C149EBF815D5214600B1F558 = {
|
||||||
|
SystemCapabilities = {
|
||||||
|
com.apple.Sandbox = {
|
||||||
|
enabled = 0;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = C149EBF315D5214600B1F558 /* Build configuration list for PBXProject "tp_assist" */;
|
buildConfigurationList = C149EBF315D5214600B1F558 /* Build configuration list for PBXProject "TP-Assist" */;
|
||||||
compatibilityVersion = "Xcode 3.2";
|
compatibilityVersion = "Xcode 10.0";
|
||||||
developmentRegion = English;
|
developmentRegion = English;
|
||||||
hasScannedForEncodings = 0;
|
hasScannedForEncodings = 0;
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
|
@ -295,7 +393,7 @@
|
||||||
projectDirPath = "";
|
projectDirPath = "";
|
||||||
projectRoot = "";
|
projectRoot = "";
|
||||||
targets = (
|
targets = (
|
||||||
C149EBF815D5214600B1F558 /* tp_assist */,
|
C149EBF815D5214600B1F558 /* TP-Assist */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
@ -307,17 +405,23 @@
|
||||||
files = (
|
files = (
|
||||||
7AA2CD591F6AC0DA0074C92B /* site in Resources */,
|
7AA2CD591F6AC0DA0074C92B /* site in Resources */,
|
||||||
A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */,
|
A1B7B9DD1DB53ED200809327 /* Localizable.strings in Resources */,
|
||||||
0ADB3B0D178EF8DB004E9BB9 /* StatusIcon.png in Resources */,
|
|
||||||
0ADB3B0C178EF8DB004E9BB9 /* StatusIconAlt.png in Resources */,
|
|
||||||
C149EC0815D5214600B1F558 /* InfoPlist.strings in Resources */,
|
C149EC0815D5214600B1F558 /* InfoPlist.strings in Resources */,
|
||||||
0ADB3B0F178EF8DB004E9BB9 /* StatusIconAlt@2x.png in Resources */,
|
7A7C6CA02197410B006869D9 /* tp-assist.macos.json in Resources */,
|
||||||
7AD1F1D31F7A55EA0048A496 /* iTerm2.scpt in Resources */,
|
7A7C6C9E21974094006869D9 /* localhost.pem in Resources */,
|
||||||
0ADB3B0E178EF8DB004E9BB9 /* StatusIcon@2x.png in Resources */,
|
7A7C6C9621973C69006869D9 /* tpassist.png in Resources */,
|
||||||
|
7A7C6C9C21974094006869D9 /* cacert.cer in Resources */,
|
||||||
C149EC1415D5214600B1F558 /* MainMenu.xib in Resources */,
|
C149EC1415D5214600B1F558 /* MainMenu.xib in Resources */,
|
||||||
|
7A7C6C9D21974094006869D9 /* localhost.key in Resources */,
|
||||||
C159DC2815D5DE8000F5DE24 /* teleport.icns in Resources */,
|
C159DC2815D5DE8000F5DE24 /* teleport.icns in Resources */,
|
||||||
7A0C94AA1F68BD2900E04C3E /* AboutWindowController.xib in Resources */,
|
7A0C94AA1F68BD2900E04C3E /* AboutWindowController.xib in Resources */,
|
||||||
7A1818911F7FBBC200F3C882 /* tp-assist.default.json in Resources */,
|
0ADB3B0D178EF8DB004E9BB9 /* StatusIcon.png in Resources */,
|
||||||
7A1818931F815B8A00F3C882 /* Terminal.scpt in Resources */,
|
7A1F87B2215D5A1600B69F88 /* StatusIcon@2X.png in Resources */,
|
||||||
|
7A7C6C9221973C24006869D9 /* StatusIcon@3X.png in Resources */,
|
||||||
|
0ADB3B0C178EF8DB004E9BB9 /* StatusIconAlt.png in Resources */,
|
||||||
|
7A1F87B1215D5A1600B69F88 /* StatusIconAlt@2X.png in Resources */,
|
||||||
|
7A7C6C9121973C24006869D9 /* StatusIconAlt@3X.png in Resources */,
|
||||||
|
7A7C6CAA21977F07006869D9 /* iterm2.scpt in Resources */,
|
||||||
|
7A7C6CAB21977F07006869D9 /* terminal.scpt in Resources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -399,6 +503,7 @@
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
@ -442,9 +547,10 @@
|
||||||
../../external/mongoose,
|
../../external/mongoose,
|
||||||
../../external/jsoncpp/include,
|
../../external/jsoncpp/include,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
VALID_ARCHS = x86_64;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
|
@ -454,6 +560,7 @@
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
CLANG_ENABLE_OBJC_ARC = YES;
|
CLANG_ENABLE_OBJC_ARC = YES;
|
||||||
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
|
||||||
CLANG_WARN_BOOL_CONVERSION = YES;
|
CLANG_WARN_BOOL_CONVERSION = YES;
|
||||||
|
@ -490,8 +597,9 @@
|
||||||
../../external/mongoose,
|
../../external/mongoose,
|
||||||
../../external/jsoncpp/include,
|
../../external/jsoncpp/include,
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.9;
|
MACOSX_DEPLOYMENT_TARGET = 10.10;
|
||||||
SDKROOT = macosx;
|
SDKROOT = macosx;
|
||||||
|
VALID_ARCHS = x86_64;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
@ -501,11 +609,24 @@
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "src/tp_assist-Prefix.pch";
|
GCC_PREFIX_HEADER = "src/TP-Assist-Prefix.pch";
|
||||||
INFOPLIST_FILE = "src/tp_assist-Info.plist";
|
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
"DEBUG=1",
|
||||||
|
MG_ENABLE_SSL,
|
||||||
|
);
|
||||||
|
HEADER_SEARCH_PATHS = (
|
||||||
|
../../common/teleport,
|
||||||
|
../../common/libex/include,
|
||||||
|
../../external/mongoose,
|
||||||
|
../../external/jsoncpp/include,
|
||||||
|
../../external/macos/release/include,
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "src/TP-Assist-Info.plist";
|
||||||
|
LIBRARY_SEARCH_PATHS = ../../external/macos/release/lib;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "teleport.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "teleport.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
VALID_ARCHS = x86_64;
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
|
@ -516,11 +637,21 @@
|
||||||
CODE_SIGN_IDENTITY = "";
|
CODE_SIGN_IDENTITY = "";
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||||
GCC_PREFIX_HEADER = "src/tp_assist-Prefix.pch";
|
GCC_PREFIX_HEADER = "src/TP-Assist-Prefix.pch";
|
||||||
INFOPLIST_FILE = "src/tp_assist-Info.plist";
|
GCC_PREPROCESSOR_DEFINITIONS = MG_ENABLE_SSL;
|
||||||
MACOSX_DEPLOYMENT_TARGET = 10.8;
|
HEADER_SEARCH_PATHS = (
|
||||||
|
../../common/teleport,
|
||||||
|
../../common/libex/include,
|
||||||
|
../../external/mongoose,
|
||||||
|
../../external/jsoncpp/include,
|
||||||
|
../../external/macos/release/include,
|
||||||
|
);
|
||||||
|
INFOPLIST_FILE = "src/TP-Assist-Info.plist";
|
||||||
|
LIBRARY_SEARCH_PATHS = ../../external/macos/release/lib;
|
||||||
|
MACOSX_DEPLOYMENT_TARGET = 10.13;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = "teleport.${PRODUCT_NAME:rfc1034identifier}";
|
PRODUCT_BUNDLE_IDENTIFIER = "teleport.${PRODUCT_NAME:rfc1034identifier}";
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
VALID_ARCHS = x86_64;
|
||||||
WRAPPER_EXTENSION = app;
|
WRAPPER_EXTENSION = app;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
|
@ -528,7 +659,7 @@
|
||||||
/* End XCBuildConfiguration section */
|
/* End XCBuildConfiguration section */
|
||||||
|
|
||||||
/* Begin XCConfigurationList section */
|
/* Begin XCConfigurationList section */
|
||||||
C149EBF315D5214600B1F558 /* Build configuration list for PBXProject "tp_assist" */ = {
|
C149EBF315D5214600B1F558 /* Build configuration list for PBXProject "TP-Assist" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
C149EC1515D5214600B1F558 /* Debug */,
|
C149EC1515D5214600B1F558 /* Debug */,
|
||||||
|
@ -537,7 +668,7 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
C149EC1715D5214600B1F558 /* Build configuration list for PBXNativeTarget "tp_assist" */ = {
|
C149EC1715D5214600B1F558 /* Build configuration list for PBXNativeTarget "TP-Assist" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
C149EC1815D5214600B1F558 /* Debug */,
|
C149EC1815D5214600B1F558 /* Debug */,
|
|
@ -4,8 +4,8 @@ PATH_ROOT=$(cd "$(dirname "$0")/.."; pwd)
|
||||||
|
|
||||||
echo "compiling applescripts for OS X terminal..."
|
echo "compiling applescripts for OS X terminal..."
|
||||||
|
|
||||||
rm ${PATH_ROOT}/src/apple-scpt/Terminal.scpt
|
rm ${PATH_ROOT}/src/apple-scpt/terminal.scpt
|
||||||
rm ${PATH_ROOT}/src/apple-scpt/iTerm2.scpt
|
rm ${PATH_ROOT}/src/apple-scpt/iterm2.scpt
|
||||||
|
|
||||||
osacompile -o ${PATH_ROOT}/src/apple-scpt/Terminal.scpt -x ${PATH_ROOT}/apple-scripts/scripts/Terminal.applescript
|
osacompile -o ${PATH_ROOT}/src/apple-scpt/terminal.scpt -x ${PATH_ROOT}/apple-scripts/scripts/terminal.applescript
|
||||||
osacompile -o ${PATH_ROOT}/src/apple-scpt/iTerm2.scpt -x ${PATH_ROOT}/apple-scripts/scripts/iTerm2.applescript
|
osacompile -o ${PATH_ROOT}/src/apple-scpt/iterm2.scpt -x ${PATH_ROOT}/apple-scripts/scripts/iterm2.applescript
|
||||||
|
|
|
@ -1,44 +0,0 @@
|
||||||
on scriptRun(argsCmd, argsProfile, argsTitle)
|
|
||||||
set theCmd to (argsCmd)
|
|
||||||
set theProfile to (argsProfile)
|
|
||||||
set theTitle to (argsTitle)
|
|
||||||
CommandRun(theCmd, theProfile, theTitle)
|
|
||||||
end scriptRun
|
|
||||||
|
|
||||||
on CommandRun(theCmd, theProfile, theTitle)
|
|
||||||
tell application "Terminal"
|
|
||||||
if it is not running then
|
|
||||||
--if this is the first time Terminal is running you have specify window 1
|
|
||||||
--if you dont do this you will get two windows and the title wont be set
|
|
||||||
activate
|
|
||||||
set newTerm to do script theCmd in window 1
|
|
||||||
set newTerm's current settings to settings set theProfile
|
|
||||||
set custom title of front window to theTitle
|
|
||||||
else
|
|
||||||
--Terminal is running get the window count
|
|
||||||
set windowCount to (count every window)
|
|
||||||
if windowCount = 0 then
|
|
||||||
--Terminal is running but no windows are open
|
|
||||||
--run our script in a new window
|
|
||||||
reopen
|
|
||||||
activate
|
|
||||||
do script theCmd in window 1
|
|
||||||
else
|
|
||||||
--Terminal is running and we have a window run in a new tab
|
|
||||||
reopen
|
|
||||||
activate
|
|
||||||
tell application "System Events"
|
|
||||||
tell process "Terminal"
|
|
||||||
delay 0.2
|
|
||||||
keystroke "t" using {command down}
|
|
||||||
end tell
|
|
||||||
end tell
|
|
||||||
activate
|
|
||||||
do script theCmd in front window
|
|
||||||
end if
|
|
||||||
set current settings of selected tab of front window to settings set theProfile
|
|
||||||
set title displays custom title of front window to true
|
|
||||||
set custom title of selected tab of front window to theTitle
|
|
||||||
end if
|
|
||||||
end tell
|
|
||||||
end CommandRun
|
|
|
@ -10,7 +10,7 @@ on CommandRun(theCmd, theProfile, theTitle)
|
||||||
if it is not running then
|
if it is not running then
|
||||||
tell application "iTerm"
|
tell application "iTerm"
|
||||||
activate
|
activate
|
||||||
delay 0.2
|
delay 0.5
|
||||||
try
|
try
|
||||||
close first window
|
close first window
|
||||||
end try
|
end try
|
||||||
|
@ -24,9 +24,12 @@ on CommandRun(theCmd, theProfile, theTitle)
|
||||||
end try
|
end try
|
||||||
tell the current window
|
tell the current window
|
||||||
tell the current session
|
tell the current session
|
||||||
|
delay 0.5
|
||||||
set name to theTitle
|
set name to theTitle
|
||||||
set profile to theProfile
|
set profile to theProfile
|
||||||
write text theCmd
|
write text theCmd
|
||||||
|
delay 0.5
|
||||||
|
write text ""
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
|
@ -43,14 +46,18 @@ on CommandRun(theCmd, theProfile, theTitle)
|
||||||
end try
|
end try
|
||||||
tell the current tab
|
tell the current tab
|
||||||
tell the current session
|
tell the current session
|
||||||
|
delay 0.5
|
||||||
set name to theTitle
|
set name to theTitle
|
||||||
write text theCmd
|
write text theCmd
|
||||||
|
delay 0.5
|
||||||
|
write text ""
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
on error msg
|
on error msg
|
||||||
--if all iTerm windows are closed the app stays open. In this scenario iTerm has no "current window" and will give an error when trying to create the new tab.
|
-- if all iTerm windows are closed the app stays open. In this scenario iTerm has
|
||||||
|
-- no "current window" and will give an error when trying to create the new tab.
|
||||||
tell application "iTerm"
|
tell application "iTerm"
|
||||||
try
|
try
|
||||||
create window with profile theProfile
|
create window with profile theProfile
|
||||||
|
@ -59,8 +66,11 @@ on CommandRun(theCmd, theProfile, theTitle)
|
||||||
end try
|
end try
|
||||||
tell the current window
|
tell the current window
|
||||||
tell the current session
|
tell the current session
|
||||||
|
delay 0.5
|
||||||
set name to theTitle
|
set name to theTitle
|
||||||
write text theCmd
|
write text theCmd
|
||||||
|
delay 0.5
|
||||||
|
write text ""
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
||||||
end tell
|
end tell
|
|
@ -0,0 +1,76 @@
|
||||||
|
on scriptRun(argsCmd, argsProfile, argsTitle)
|
||||||
|
set theCmd to (argsCmd)
|
||||||
|
set theProfile to (argsProfile)
|
||||||
|
set theTitle to (argsTitle)
|
||||||
|
CommandRun(theCmd, theProfile, theTitle)
|
||||||
|
end scriptRun
|
||||||
|
|
||||||
|
on CommandRun(theCmd, theProfile, theTitle)
|
||||||
|
tell application "Terminal"
|
||||||
|
if it is not running then
|
||||||
|
--if this is the first time Terminal is running you have specify window 1
|
||||||
|
--if you dont do this you will get two windows and the title wont be set
|
||||||
|
activate
|
||||||
|
delay 1.0
|
||||||
|
set newTerm to do script theCmd in window 1
|
||||||
|
set newTerm's current settings to settings set theProfile
|
||||||
|
set custom title of front window to theTitle
|
||||||
|
|
||||||
|
delay 1.0
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
tell application "System Events" to key code 36
|
||||||
|
else
|
||||||
|
--Terminal is running get the window count
|
||||||
|
set windowCount to (count every window)
|
||||||
|
if windowCount = 0 then
|
||||||
|
--Terminal is running but no windows are open
|
||||||
|
--run our script in a new window
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
|
||||||
|
do script theCmd in window 1
|
||||||
|
|
||||||
|
set current settings of selected tab of front window to settings set theProfile
|
||||||
|
set title displays custom title of front window to true
|
||||||
|
set custom title of selected tab of front window to theTitle
|
||||||
|
|
||||||
|
delay 1.0
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
tell application "System Events" to key code 36
|
||||||
|
|
||||||
|
else
|
||||||
|
--Terminal is running and we have a window run in a new tab
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
|
||||||
|
tell application "System Events"
|
||||||
|
tell process "Terminal"
|
||||||
|
delay 0.5
|
||||||
|
keystroke "t" using {command down}
|
||||||
|
end tell
|
||||||
|
end tell
|
||||||
|
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
do script theCmd in front window
|
||||||
|
|
||||||
|
set current settings of selected tab of front window to settings set theProfile
|
||||||
|
set title displays custom title of front window to true
|
||||||
|
set custom title of selected tab of front window to theTitle
|
||||||
|
|
||||||
|
delay 1.0
|
||||||
|
reopen
|
||||||
|
activate
|
||||||
|
tell application "System Events" to key code 36
|
||||||
|
|
||||||
|
end if
|
||||||
|
|
||||||
|
# set current settings of selected tab of front window to settings set theProfile
|
||||||
|
# set title displays custom title of front window to true
|
||||||
|
# set custom title of selected tab of front window to theTitle
|
||||||
|
end if
|
||||||
|
|
||||||
|
end tell
|
||||||
|
end CommandRun
|
|
@ -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,.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 */
|
@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;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;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{padding-left:3px;padding-right:3px}.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}.content .desc{margin-top:5px;color:#6b6b6b}.arg-varb{color:#0a6aa1;font-weight:bold;font-family:Consolas,Lucida Console,Monaco,Courier,'Courier New',monospace;display:inline-block;width:164px}#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}
|
|
@ -1 +0,0 @@
|
||||||
{"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"}
|
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
@ -1,105 +1,207 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
|
<!--[if IE 8]>
|
||||||
|
<html lang="en" class="ie8"><![endif]-->
|
||||||
|
<!--[if !IE]><!-->
|
||||||
<html lang="zh_CN">
|
<html lang="zh_CN">
|
||||||
|
<!--<![endif]-->
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="Content-Type" content="text/html; 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>
|
<title>TELEPORT助手配置</title>
|
||||||
<link rel="shortcut icon" href="favicon.png">
|
<link rel="shortcut icon" href="favicon.png">
|
||||||
|
|
||||||
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
|
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet">
|
<link href="plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet">
|
||||||
<link href="plugins/gritter/css/jquery.gritter.css" rel="stylesheet">
|
<link href="plugins/gritter/css/jquery.gritter.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="css/style.css" rel="stylesheet" type="text/css"/>
|
<link href="css/style.css" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="header">
|
<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> | ©2015 - 2018,保留所有权利。</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport助手本地配置</span>
|
|
||||||
<span class="sub-title">此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="header-fix"></div>
|
|
||||||
|
|
||||||
<div class="footer">
|
<div class="content">
|
||||||
<div class="container">
|
|
||||||
<p><a href="http://www.tp4a.com/" target="_blank">TELEPORT</a> | ©2015 - 2018,保留所有权利。</p>
|
<div class="arg-detail arg-detail-common">
|
||||||
</div>
|
<p><strong>此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</strong></p>
|
||||||
</div>
|
<span><strong>注意:</strong>命令行参数设置中,可以用以下变量替换(注意大小写!):</span>
|
||||||
|
<ul>
|
||||||
|
<li><span class="arg-varb">{host_ip}</span> 替换主机IP地址</li>
|
||||||
|
<li><span class="arg-varb">{host_port}</span> 替换主机端口号</li>
|
||||||
|
<li><span class="arg-varb">{user_name}</span> 替换用户名</li>
|
||||||
|
<li><span class="arg-varb">{real_ip}</span> 替换为远程主机真实IP(仅用于显示,例如客户端的窗口标题或标签页标题等)</li>
|
||||||
|
<li><span class="arg-varb">{assist_tools_path}</span> 替换为助手工具所在的tools目录的绝对路径</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<hr/>
|
||||||
|
<p class="cfg-title">本地 SSH 客户端配置</p>
|
||||||
|
|
||||||
<div class="content">
|
<div class="form-horizontal">
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select id="ssh-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<hr/>
|
<div class="form-group form-group-sm">
|
||||||
<p class="cfg-title">本地终端配置(用于SSH)</p>
|
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="ssh-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="form-horizontal">
|
<div class="form-group form-group-sm">
|
||||||
<div class="form-group form-group-sm">
|
<label for="ssh-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
<label for="term-type" class="col-sm-1 control-label"><strong>终端:</strong></label>
|
<div class="col-sm-9">
|
||||||
<div class="col-sm-3">
|
<input id="ssh-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
<select id="term-type" class="form-control"></select>
|
<div id="ssh-desc"></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="term-profile" class="col-sm-1 control-label"><strong>使用配置:</strong></label>
|
<hr/>
|
||||||
<div class="col-sm-3">
|
<p class="cfg-title">本地 SFTP 客户端配置</p>
|
||||||
<input id="term-profile" type="text" class="form-control input-args"/>
|
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="sftp-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select id="sftp-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="sftp-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="sftp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="sftp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="sftp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
|
<div id="sftp-desc"></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- <hr/>-->
|
||||||
|
<!-- <p class="cfg-title">本地 TELNET 客户端配置</p>-->
|
||||||
|
<!---->
|
||||||
|
<!-- <div class="form-horizontal">-->
|
||||||
|
<!-- <div class="form-group form-group-sm">-->
|
||||||
|
<!-- <label for="telnet-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>-->
|
||||||
|
<!-- <div class="col-sm-4">-->
|
||||||
|
<!-- <select id="telnet-type" class="form-control"></select>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!---->
|
||||||
|
<!-- <div class="form-group form-group-sm">-->
|
||||||
|
<!-- <label for="telnet-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>-->
|
||||||
|
<!-- <div class="col-sm-9">-->
|
||||||
|
<!-- <input id="telnet-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径">-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!---->
|
||||||
|
<!-- <div class="form-group form-group-sm">-->
|
||||||
|
<!-- <label for="telnet-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>-->
|
||||||
|
<!-- <div class="col-sm-9">-->
|
||||||
|
<!-- <input id="telnet-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />-->
|
||||||
|
<!--<div id="telnet-desc"></div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!-- </div>-->
|
||||||
|
<!---->
|
||||||
|
<!-- </div>-->
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
<p class="cfg-title">本地 RDP 客户端配置</p>
|
||||||
|
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select id="rdp-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="rdp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="rdp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="rdp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
|
<div id="rdp-desc"></div>
|
||||||
|
<!-- <div class="desc"><i class="fa fa-info-circle"></i> 建议使用homebrew安装freerdp,安装后freerdp默认路径在:/usr/local/Cellar/freerdp/x.y.z/bin/xfreerdp</div>-->
|
||||||
|
<!-- <div class="desc"><i class="fa fa-info-circle"></i> 首次安装freerdp后需要重新启动计算机</div>-->
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
<hr/>
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<div class="col-sm-2"></div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a id="btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置!</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
<p class="cfg-title">本地RDP配置</p>
|
|
||||||
|
|
||||||
<div class="form-horizontal">
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="rdp-type" class="col-sm-1 control-label"><strong>RDP客户端:</strong></label>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<select id="rdp-type" class="form-control"></select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="rdp-app" class="col-sm-1 control-label"><strong>程序路径:</strong></label>
|
|
||||||
<div class="col-sm-8">
|
|
||||||
<input id="rdp-app" type="text" class="form-control input-args"/>
|
|
||||||
<span class="desc"><i class="fa fa-info-circle"></i> 建议使用homebrew安装freerdp,安装后freerdp默认路径在:/usr/local/Cellar/freerdp/x.y.z/bin/xfreerdp</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
<div class="form-horizontal">
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<div class="col-sm-1"></div>
|
|
||||||
<div class="col-sm-3">
|
|
||||||
<a id="btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
<script type="text/javascript" src="plugins/underscore/underscore-min.js"></script>
|
||||||
|
<script type="text/javascript" src="plugins/jquery/jquery.min.js"></script>
|
||||||
|
<script type="text/javascript" src="plugins/bootstrap/js/bootstrap.min.js"></script>
|
||||||
|
<!--[if lt IE 9]>
|
||||||
|
<script src="plugins/html5shiv/html5shiv.min.js"></script>
|
||||||
|
<![endif]-->
|
||||||
|
<!--<script type="text/javascript" src="js/json2.js"></script>-->
|
||||||
|
|
||||||
|
<script type="text/javascript" src="plugins/gritter/js/jquery.gritter.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="plugins/keypress/keypress.min.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="js/config.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="plugins/underscore/underscore-min.js"></script>
|
<script type="text/javascript">
|
||||||
<script type="text/javascript" src="plugins/jquery/jquery.min.js"></script>
|
</script>
|
||||||
<script type="text/javascript" src="plugins/bootstrap/js/bootstrap.min.js"></script>
|
|
||||||
<script type="text/javascript" src="plugins/gritter/js/jquery.gritter.js"></script>
|
|
||||||
<script type="text/javascript" src="plugins/keypress/keypress.min.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript" src="js/config.js"></script>
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
</script>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -5,16 +5,54 @@ var g_url_base = 'http://127.0.0.1:50022';
|
||||||
var g_cfg = null;
|
var g_cfg = null;
|
||||||
|
|
||||||
var dom = {
|
var dom = {
|
||||||
term_type: $('#term-type'),
|
version: $('#version'),
|
||||||
term_profile: $('#term-profile'),
|
|
||||||
|
ssh_type: $('#ssh-type'),
|
||||||
|
ssh_app: $('#ssh-app'),
|
||||||
|
ssh_cmdline: $('#ssh-cmdline'),
|
||||||
|
ssh_desc: $('#ssh-desc'),
|
||||||
|
|
||||||
|
sftp_type: $('#sftp-type'),
|
||||||
|
sftp_app: $('#sftp-app'),
|
||||||
|
sftp_cmdline: $('#sftp-cmdline'),
|
||||||
|
sftp_desc: $('#sftp-desc'),
|
||||||
|
|
||||||
|
|
||||||
|
telnet_type: $('#telnet-type'),
|
||||||
|
telnet_app: $('#telnet-app'),
|
||||||
|
telnet_cmdline: $('#telnet-cmdline'),
|
||||||
|
telnet_desc: $('#telnet-desc'),
|
||||||
|
|
||||||
rdp_type: $('#rdp-type'),
|
rdp_type: $('#rdp-type'),
|
||||||
rdp_app: $('#rdp-app'),
|
rdp_app: $('#rdp-app'),
|
||||||
|
rdp_cmdline: $('#rdp-cmdline'),
|
||||||
|
rdp_desc: $('#rdp-desc'),
|
||||||
|
|
||||||
btn_save: $('#btn-save')
|
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("获取助手版本信息失败!");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var get_config = function () {
|
function get_config() {
|
||||||
$.ajax({
|
$.ajax({
|
||||||
type: 'GET',
|
type: 'GET',
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
|
@ -24,51 +62,128 @@ var get_config = function () {
|
||||||
success: function (ret) {
|
success: function (ret) {
|
||||||
if (ret.code == 0) {
|
if (ret.code == 0) {
|
||||||
g_cfg = ret.data;
|
g_cfg = ret.data;
|
||||||
|
console.log(g_cfg);
|
||||||
update_dom();
|
update_dom();
|
||||||
} else {
|
} else {
|
||||||
notify_error("获取配置信息失败!");
|
alert("获取配置信息失败!");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
error: function (jqXhr, _error, _e) {
|
error: function (jqXhr, _error, _e) {
|
||||||
console.log('state:', jqXhr.state());
|
console.log('state:', jqXhr.state());
|
||||||
notify_error("获取配置信息失败!");
|
alert("获取配置信息失败!");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function update_dom() {
|
function update_dom() {
|
||||||
console.log('---', g_cfg);
|
if (_.isNull(g_cfg))
|
||||||
|
return;
|
||||||
|
|
||||||
dom.term_type.html('');
|
dom.ssh_type.html('');
|
||||||
|
if (!_.isUndefined(g_cfg.ssh)) {
|
||||||
if (!_.isUndefined(g_cfg.term)) {
|
if (_.isUndefined(g_cfg.ssh.selected)) {
|
||||||
if (_.isUndefined(g_cfg.term.selected)) {
|
g_cfg.ssh.selected = '';
|
||||||
g_cfg.term.selected = '';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!_.isUndefined(g_cfg.term.available) && g_cfg.term.available.length > 0) {
|
if (!_.isUndefined(g_cfg.ssh.available) && g_cfg.ssh.available.length > 0) {
|
||||||
var selected = '';
|
var selected = '';
|
||||||
var profile = '';
|
var app = '';
|
||||||
|
var cmdline = '';
|
||||||
|
|
||||||
var html = [];
|
var html = [];
|
||||||
for (var i = 0; i < g_cfg.term.available.length; i++) {
|
for (var i = 0; i < g_cfg.ssh.available.length; i++) {
|
||||||
var item = g_cfg.term.available[i];
|
var item = g_cfg.ssh.available[i];
|
||||||
|
|
||||||
if (selected === '' || item.name === g_cfg.term.selected) {
|
if (selected === '' || item.name === g_cfg.ssh.selected) {
|
||||||
selected = item.name;
|
selected = item.name;
|
||||||
profile = item.profile;
|
app = item.app;
|
||||||
|
cmdline = item.cmdline;
|
||||||
}
|
}
|
||||||
|
|
||||||
html.push('<option id="term-' + item.name + '" value="' + item.name + '">' + item.display + '</option>');
|
html.push('<option value="' + item.name + '">' + item.display + '</option>');
|
||||||
}
|
}
|
||||||
|
|
||||||
dom.term_type.html(html.join(''));
|
dom.ssh_type.html(html.join(''));
|
||||||
|
|
||||||
dom.term_type.val(selected);
|
dom.ssh_type.val(selected);
|
||||||
dom.term_profile.val(profile);
|
dom.ssh_app.val(app);
|
||||||
|
dom.ssh_cmdline.val(cmdline);
|
||||||
|
|
||||||
|
$(dom.ssh_type).trigger('change');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dom.sftp_type.html('');
|
||||||
|
if (!_.isUndefined(g_cfg.sftp)) {
|
||||||
|
if (_.isUndefined(g_cfg.sftp.selected)) {
|
||||||
|
g_cfg.sftp.selected = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_.isUndefined(g_cfg.sftp.available) && g_cfg.sftp.available.length > 0) {
|
||||||
|
var selected = '';
|
||||||
|
var app = '';
|
||||||
|
var cmdline = '';
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for (var i = 0; i < g_cfg.sftp.available.length; i++) {
|
||||||
|
var item = g_cfg.sftp.available[i];
|
||||||
|
|
||||||
|
if (selected === '' || item.name === g_cfg.sftp.selected) {
|
||||||
|
selected = item.name;
|
||||||
|
app = item.app;
|
||||||
|
cmdline = item.cmdline;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.push('<option value="' + item.name + '">' + item.display + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
dom.sftp_type.html(html.join(''));
|
||||||
|
|
||||||
|
dom.sftp_type.val(selected);
|
||||||
|
dom.sftp_app.val(app);
|
||||||
|
dom.sftp_cmdline.val(cmdline);
|
||||||
|
|
||||||
|
$(dom.sftp_type).trigger('change');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dom.telnet_type.html('');
|
||||||
|
if (!_.isUndefined(g_cfg.telnet)) {
|
||||||
|
if (_.isUndefined(g_cfg.telnet.selected)) {
|
||||||
|
g_cfg.telnet.selected = '';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_.isUndefined(g_cfg.telnet.available) && g_cfg.telnet.available.length > 0) {
|
||||||
|
var selected = '';
|
||||||
|
var app = '';
|
||||||
|
var cmdline = '';
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for (var i = 0; i < g_cfg.telnet.available.length; i++) {
|
||||||
|
var item = g_cfg.telnet.available[i];
|
||||||
|
|
||||||
|
if (selected === '' || item.name === g_cfg.telnet.selected) {
|
||||||
|
selected = item.name;
|
||||||
|
app = item.app;
|
||||||
|
cmdline = item.cmdline;
|
||||||
|
}
|
||||||
|
|
||||||
|
html.push('<option value="' + item.name + '">' + item.display + '</option>');
|
||||||
|
}
|
||||||
|
|
||||||
|
dom.telnet_type.html(html.join(''));
|
||||||
|
|
||||||
|
dom.telnet_type.val(selected);
|
||||||
|
dom.telnet_app.val(app);
|
||||||
|
dom.telnet_cmdline.val(cmdline);
|
||||||
|
|
||||||
|
$(dom.telnet_type).trigger('change');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
dom.rdp_type.html('');
|
||||||
if (!_.isUndefined(g_cfg.rdp)) {
|
if (!_.isUndefined(g_cfg.rdp)) {
|
||||||
if (_.isUndefined(g_cfg.rdp.selected)) {
|
if (_.isUndefined(g_cfg.rdp.selected)) {
|
||||||
g_cfg.rdp.selected = '';
|
g_cfg.rdp.selected = '';
|
||||||
|
@ -77,6 +192,7 @@ function update_dom() {
|
||||||
if (!_.isUndefined(g_cfg.rdp.available) && g_cfg.rdp.available.length > 0) {
|
if (!_.isUndefined(g_cfg.rdp.available) && g_cfg.rdp.available.length > 0) {
|
||||||
var selected = '';
|
var selected = '';
|
||||||
var app = '';
|
var app = '';
|
||||||
|
var cmdline = '';
|
||||||
|
|
||||||
var html = [];
|
var html = [];
|
||||||
for (var i = 0; i < g_cfg.rdp.available.length; i++) {
|
for (var i = 0; i < g_cfg.rdp.available.length; i++) {
|
||||||
|
@ -85,60 +201,57 @@ function update_dom() {
|
||||||
if (selected === '' || item.name === g_cfg.rdp.selected) {
|
if (selected === '' || item.name === g_cfg.rdp.selected) {
|
||||||
selected = item.name;
|
selected = item.name;
|
||||||
app = item.app;
|
app = item.app;
|
||||||
|
cmdline = item.cmdline;
|
||||||
}
|
}
|
||||||
|
|
||||||
html.push('<option id="rdp-' + item.name + '" value="' + item.name + '">' + item.display + '</option>');
|
html.push('<option value="' + item.name + '">' + item.display + '</option>');
|
||||||
}
|
}
|
||||||
|
|
||||||
dom.rdp_type.html(html.join(''));
|
dom.rdp_type.html(html.join(''));
|
||||||
|
|
||||||
dom.rdp_type.val(selected);
|
dom.rdp_type.val(selected);
|
||||||
dom.rdp_app.val(app);
|
dom.rdp_app.val(app);
|
||||||
|
dom.rdp_cmdline.val(cmdline);
|
||||||
|
|
||||||
|
$(dom.rdp_type).trigger('change');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function on_term_change() {
|
|
||||||
g_cfg.term.selected = dom.term_type.val();
|
|
||||||
|
|
||||||
for (var i = 0; i < g_cfg.term.available.length; i++) {
|
|
||||||
var item = g_cfg.term.available[i];
|
|
||||||
if (item.name === g_cfg.term.selected) {
|
|
||||||
dom.term_profile.val(item.profile);
|
|
||||||
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() {
|
function on_save() {
|
||||||
if (g_cfg === null)
|
if (g_cfg === null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
for (var i = 0; i < g_cfg.term.available.length; i++) {
|
var i = 0;
|
||||||
var item = g_cfg.term.available[i];
|
for (i = 0; i < g_cfg.ssh.available.length; i++) {
|
||||||
if (item.name === g_cfg.term.selected) {
|
var item = g_cfg.ssh.available[i];
|
||||||
item.profile = dom.term_profile.val();
|
if (item.name === g_cfg.ssh.selected) {
|
||||||
|
item.app = dom.ssh_app.val();
|
||||||
|
item.cmdline = dom.ssh_cmdline.val();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (var i = 0; i < g_cfg.rdp.available.length; i++) {
|
for (i = 0; i < g_cfg.sftp.available.length; i++) {
|
||||||
|
var item = g_cfg.sftp.available[i];
|
||||||
|
if (item.name === g_cfg.sftp.selected) {
|
||||||
|
item.app = dom.sftp_app.val();
|
||||||
|
item.cmdline = dom.sftp_cmdline.val();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// for (i = 0; i < g_cfg.telnet.available.length; i++) {
|
||||||
|
// var item = g_cfg.telnet.available[i];
|
||||||
|
// if (item.name === g_cfg.telnet.selected) {
|
||||||
|
// item.app = dom.telnet_app.val();
|
||||||
|
// item.cmdline = dom.telnet_cmdline.val();
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
for (i = 0; i < g_cfg.rdp.available.length; i++) {
|
||||||
var item = g_cfg.rdp.available[i];
|
var item = g_cfg.rdp.available[i];
|
||||||
if (item.name === g_cfg.rdp.selected) {
|
if (item.name === g_cfg.rdp.selected) {
|
||||||
item.app = dom.rdp_app.val();
|
item.app = dom.rdp_app.val();
|
||||||
|
item.cmdline = dom.rdp_cmdline.val();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -165,6 +278,30 @@ function on_save() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var select_local_file = function (callback) {
|
||||||
|
var data = {
|
||||||
|
action: 1
|
||||||
|
};
|
||||||
|
var args_ = encodeURIComponent(JSON.stringify(data));
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
type: 'GET',
|
||||||
|
timeout: -1,
|
||||||
|
url: g_url_base + '/api/file_action/' + args_,
|
||||||
|
jsonp: 'callback',
|
||||||
|
dataType: 'json',
|
||||||
|
success: function (ret) {
|
||||||
|
if(ret.code === 0)
|
||||||
|
callback(0, ret.path);
|
||||||
|
},
|
||||||
|
error: function (jqXhr, _error, _e) {
|
||||||
|
console.log('state:', jqXhr.state());
|
||||||
|
callback(-1, "");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function notify_error(message_, title_) {
|
function notify_error(message_, title_) {
|
||||||
var _title = title_ || '';
|
var _title = title_ || '';
|
||||||
$.gritter.add({
|
$.gritter.add({
|
||||||
|
@ -188,16 +325,91 @@ function notify_success(message_, title_) {
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
$(document).ready(function () {
|
$(document).ready(function () {
|
||||||
|
get_version();
|
||||||
|
|
||||||
|
dom.ssh_type.change(function () {
|
||||||
|
g_cfg.ssh.selected = dom.ssh_type.val();
|
||||||
|
for (var i = 0; i < g_cfg.ssh.available.length; i++) {
|
||||||
|
var item = g_cfg.ssh.available[i];
|
||||||
|
if (item.name === g_cfg.ssh.selected) {
|
||||||
|
dom.ssh_app.val(item.app);
|
||||||
|
dom.ssh_cmdline.val(item.cmdline);
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for(var j = 0; j < item.desc.length; j++) {
|
||||||
|
html.push('<div class="desc"><i class="fa fa-info-circle"></i> ' + item.desc[j] + '</div>');
|
||||||
|
}
|
||||||
|
dom.ssh_desc.html(html.join(''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notify_error('所选的配置项不存在!');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
dom.sftp_type.change(function () {
|
||||||
|
g_cfg.sftp.selected = dom.sftp_type.val();
|
||||||
|
for (var i = 0; i < g_cfg.sftp.available.length; i++) {
|
||||||
|
var item = g_cfg.sftp.available[i];
|
||||||
|
if (item.name === g_cfg.sftp.selected) {
|
||||||
|
dom.sftp_app.val(item.app);
|
||||||
|
dom.sftp_cmdline.val(item.cmdline);
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for(var j = 0; j < item.desc.length; j++) {
|
||||||
|
html.push('<div class="desc"><i class="fa fa-info-circle"></i> ' + item.desc[j] + '</div>');
|
||||||
|
}
|
||||||
|
dom.sftp_desc.html(html.join(''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notify_error('所选的配置项不存在!');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
dom.telnet_type.change(function () {
|
||||||
|
g_cfg.telnet.selected = dom.telnet_type.val();
|
||||||
|
for (var i = 0; i < g_cfg.telnet.available.length; i++) {
|
||||||
|
var item = g_cfg.telnet.available[i];
|
||||||
|
if (item.name === g_cfg.telnet.selected) {
|
||||||
|
dom.telnet_app.val(item.app);
|
||||||
|
dom.telnet_cmdline.val(item.cmdline);
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for(var j = 0; j < item.desc.length; j++) {
|
||||||
|
html.push('<div class="desc"><i class="fa fa-info-circle"></i> ' + item.desc[j] + '</div>');
|
||||||
|
}
|
||||||
|
dom.telnet_desc.html(html.join(''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notify_error('所选的配置项不存在!');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
dom.rdp_type.change(function () {
|
||||||
|
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);
|
||||||
|
dom.rdp_cmdline.val(item.cmdline);
|
||||||
|
|
||||||
|
var html = [];
|
||||||
|
for(var j = 0; j < item.desc.length; j++) {
|
||||||
|
html.push('<div class="desc"><i class="fa fa-info-circle"></i> ' + item.desc[j] + '</div>');
|
||||||
|
}
|
||||||
|
dom.rdp_desc.html(html.join(''));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notify_error('所选的配置项不存在!');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
get_config();
|
get_config();
|
||||||
|
|
||||||
dom.term_type.change(function () {
|
|
||||||
on_term_change();
|
|
||||||
});
|
|
||||||
dom.rdp_type.change(function () {
|
|
||||||
on_rdp_change();
|
|
||||||
});
|
|
||||||
|
|
||||||
dom.btn_save.click(function () {
|
dom.btn_save.click(function () {
|
||||||
on_save();
|
on_save();
|
||||||
|
|
|
@ -30,7 +30,7 @@ html, body {
|
||||||
//text-align: center;
|
//text-align: center;
|
||||||
line-height: @header-height;
|
line-height: @header-height;
|
||||||
//border-bottom: 1px solid darken(@toolbar-bg, 20%);
|
//border-bottom: 1px solid darken(@toolbar-bg, 20%);
|
||||||
font-size: 80%;
|
//font-size: 80%;
|
||||||
|
|
||||||
background-color: #3b3b3b;
|
background-color: #3b3b3b;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -58,7 +58,7 @@ html, body {
|
||||||
line-height: @footer-height;
|
line-height: @footer-height;
|
||||||
background-color: @toolbar-bg;
|
background-color: @toolbar-bg;
|
||||||
border-top: 1px solid darken(@toolbar-bg, 20%);
|
border-top: 1px solid darken(@toolbar-bg, 20%);
|
||||||
font-size: 80%;
|
//font-size: 80%;
|
||||||
z-index: 999;
|
z-index: 999;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,24 +74,18 @@ html, body {
|
||||||
margin-bottom: 5px;
|
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-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {
|
.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 {
|
||||||
padding-left: 3px;
|
padding-left: 3px;
|
||||||
padding-right: 3px;
|
padding-right: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.arg-detail {
|
.arg-detail {
|
||||||
font-size: 11px;
|
//font-size: 13px;
|
||||||
ol, ul {
|
ol, ul {
|
||||||
margin-bottom: 0;
|
margin-bottom: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.desc {
|
|
||||||
display:inline-block;
|
|
||||||
margin-top:5px;
|
|
||||||
color:rgb(107, 107, 107);
|
|
||||||
}
|
|
||||||
|
|
||||||
.arg-detail-common {
|
.arg-detail-common {
|
||||||
//border:1px solid #f33;
|
//border:1px solid #f33;
|
||||||
background-color: #dbffbe;
|
background-color: #dbffbe;
|
||||||
|
@ -104,6 +98,12 @@ html, body {
|
||||||
.input-args {
|
.input-args {
|
||||||
font-family: @font-family-mono;
|
font-family: @font-family-mono;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.desc {
|
||||||
|
// display:inline-block;
|
||||||
|
margin-top:5px;
|
||||||
|
color:rgb(107, 107, 107);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.arg-varb {
|
.arg-varb {
|
||||||
|
@ -111,7 +111,7 @@ html, body {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
font-family: @font-family-mono;
|
font-family: @font-family-mono;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
width: 128px;
|
width: 164px;
|
||||||
//margin-right:20px;
|
//margin-right:20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,28 +38,29 @@ NSDictionary *plistDict;
|
||||||
plistDict = [[NSBundle mainBundle] infoDictionary];
|
plistDict = [[NSBundle mainBundle] infoDictionary];
|
||||||
|
|
||||||
//Get the application name.
|
//Get the application name.
|
||||||
id applicationName = [plistDict objectForKey:@"CFBundleName"];
|
// id applicationName = [plistDict objectForKey:@"CFBundleName"];
|
||||||
//Get the build version.
|
//Get the build version.
|
||||||
id applicationVersion = [plistDict objectForKey:@"CFBundleVersion"];
|
id applicationVersion = [plistDict objectForKey:@"CFBundleVersion"];
|
||||||
//Get the copyright.
|
//Get the copyright.
|
||||||
id applicationCopyright = [plistDict objectForKey:@"NSHumanReadableCopyright"];
|
// id applicationCopyright = [plistDict objectForKey:@"NSHumanReadableCopyright"];
|
||||||
|
|
||||||
//Build the string for the windows title.
|
//Build the string for the windows title.
|
||||||
NSString *aboutTitle = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"About ",nil), applicationName];
|
// NSString *aboutTitle = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"About ",nil), applicationName];
|
||||||
[aboutWindow.window setTitle:aboutTitle];
|
NSString *strTitle = [NSString stringWithFormat:@"%@%@",
|
||||||
|
NSLocalizedString(@"about ",nil),
|
||||||
|
NSLocalizedString(@"app_name",nil)];
|
||||||
|
[aboutWindow.window setTitle:strTitle];
|
||||||
|
|
||||||
//Build the string for the application name. appName - tagline
|
//Build the string for the application name. appName - tagline
|
||||||
NSString *progName = [NSString stringWithFormat:@"%@", NSLocalizedString(@"Teleport Assist",nil)];
|
NSString *strProgName = [NSString stringWithFormat:@"%@", NSLocalizedString(@"app_full_name", nil)];
|
||||||
[appName setStringValue:progName];
|
[appName setStringValue:strProgName];
|
||||||
|
|
||||||
//Build the string for the version. Version: $build
|
//Build the string for the version. Version: $build
|
||||||
NSString *progVersion = [NSString stringWithFormat:@"%@", applicationVersion];
|
NSString *strVersion = [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"version", nil), applicationVersion];
|
||||||
[appVersion setStringValue:progVersion];
|
[appVersion setStringValue:strVersion];
|
||||||
|
|
||||||
//Make the copyright font smaller.
|
|
||||||
// [appCopyright setFont:[NSFont systemFontOfSize:10]];
|
|
||||||
[appCopyright setStringValue:applicationCopyright];
|
|
||||||
|
|
||||||
|
NSString *strCopyright = [NSString stringWithFormat:@"%@", NSLocalizedString(@"copyright", nil)];
|
||||||
|
[appCopyright setStringValue:strCopyright];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (IBAction)btnHomepage:(id)sender {
|
- (IBAction)btnHomepage:(id)sender {
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
// tp_assist
|
// tp_assist
|
||||||
//
|
//
|
||||||
// Created by ApexLiu on 2017/9/29.
|
// Created by ApexLiu on 2017/9/29.
|
||||||
// Copyright © 2017年 eomsoft. All rights reserved.
|
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "AppDelegate-C-Interface.h"
|
#include "AppDelegate-C-Interface.h"
|
||||||
|
|
|
@ -3,13 +3,13 @@
|
||||||
// tp_assist
|
// tp_assist
|
||||||
//
|
//
|
||||||
// Created by ApexLiu on 2017/9/27.
|
// Created by ApexLiu on 2017/9/27.
|
||||||
// Copyright © 2017年 eomsoft. All rights reserved.
|
|
||||||
//
|
//
|
||||||
|
|
||||||
#ifndef wrap_c_objc_h
|
#ifndef wrap_c_objc_h
|
||||||
#define wrap_c_objc_h
|
#define wrap_c_objc_h
|
||||||
|
|
||||||
int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char* term_type, const char* term_theme, const char* term_title);
|
int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char* term_type, const char* term_theme, const char* term_title);
|
||||||
|
int AppDelegate_select_app (void *_self);
|
||||||
|
|
||||||
// for cpp global object initialize.
|
// for cpp global object initialize.
|
||||||
int 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);
|
||||||
|
|
|
@ -16,5 +16,6 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) start_ssh_client:(NSString*)cmd_line termType:(NSString*)term_type termTheme:(NSString*)term_theme termTitle:(NSString*)term_title;
|
- (int) start_ssh_client:(NSString*)cmd_line termType:(NSString*)term_type termTheme:(NSString*)term_theme termTitle:(NSString*)term_title;
|
||||||
|
- (int) select_app:(NSString*)ignore;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -37,6 +37,11 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
|
||||||
return [(__bridge id)_self start_ssh_client:cmdLine termType:termType termTheme:termTheme termTitle:termTitle];
|
return [(__bridge id)_self start_ssh_client:cmdLine termType:termType termTheme:termTheme termTitle:termTitle];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AppDelegate_select_app (void *_self) {
|
||||||
|
NSString* strIgnore = @"";
|
||||||
|
return [(__bridge id)_self select_app:strIgnore];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) awakeFromNib {
|
- (void) awakeFromNib {
|
||||||
|
|
||||||
// The path for the configuration file (by default: ~/.tp_assist.ini)
|
// The path for the configuration file (by default: ~/.tp_assist.ini)
|
||||||
|
@ -44,59 +49,55 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
|
||||||
|
|
||||||
// if the config file does not exist, create a default one
|
// if the config file does not exist, create a default one
|
||||||
if ( ![[NSFileManager defaultManager] fileExistsAtPath:cfgFile] ) {
|
if ( ![[NSFileManager defaultManager] fileExistsAtPath:cfgFile] ) {
|
||||||
NSString *cfgFileInResource = [[NSBundle mainBundle] pathForResource:@"tp-assist.default" ofType:@"json"];
|
NSString *cfgFileInResource = [[NSBundle mainBundle] pathForResource:@"tp-assist.macos" ofType:@"json"];
|
||||||
[[NSFileManager defaultManager] copyItemAtPath:cfgFileInResource toPath:cfgFile error:nil];
|
[[NSFileManager defaultManager] copyItemAtPath:cfgFileInResource toPath:cfgFile error:nil];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Define Icons
|
// Define Icons
|
||||||
//only regular icon is needed for 10.10 and higher. OS X changes the icon for us.
|
//only regular icon is needed for 10.10 and higher. OS X changes the icon for us.
|
||||||
regularIcon = [NSImage imageNamed:@"StatusIcon"];
|
regularIcon = [NSImage imageNamed:@"StatusIcon"];
|
||||||
altIcon = [NSImage imageNamed:@"StatusIconAlt"];
|
[regularIcon setTemplate:YES];
|
||||||
|
|
||||||
// TODO: 现在statusIcon有两个问题:
|
altIcon = [NSImage imageNamed:@"StatusIconAlt"];
|
||||||
// 1. 不会响应系统设置“暗色菜单栏和Dock”的事件
|
|
||||||
// 2. 即使是设置为暗色系,启动本程序也会使用黑色图标,导致在菜单栏中看不到图标。
|
|
||||||
// 因此,应该响应系统的设置菜单栏颜色的事件,同时启动前先获取菜单栏的色系。
|
|
||||||
|
|
||||||
// Create the status bar item
|
// Create the status bar item
|
||||||
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
|
statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
|
||||||
[statusItem setMenu:menu];
|
[statusItem setMenu:menu];
|
||||||
[statusItem setImage: regularIcon];
|
[statusItem setImage: regularIcon];
|
||||||
[statusItem setHighlightMode:YES];
|
[statusItem setHighlightMode:YES];
|
||||||
[statusItem setAlternateImage: altIcon];
|
[statusItem setAlternateImage: altIcon];
|
||||||
|
|
||||||
// Needed to trigger the menuWillOpen event
|
// Needed to trigger the menuWillOpen event
|
||||||
[menu setDelegate:self];
|
[menu setDelegate:self];
|
||||||
|
|
||||||
|
|
||||||
//http_rpc_start((__bridge void*)self);
|
|
||||||
|
|
||||||
NSString *resPath = [[NSBundle mainBundle] resourcePath];
|
NSString *resPath = [[NSBundle mainBundle] resourcePath];
|
||||||
std::string cpp_res_path = [resPath cStringUsingEncoding:NSUTF8StringEncoding];
|
std::string cpp_res_path = [resPath cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
std::string cpp_cfg_file = [cfgFile cStringUsingEncoding:NSUTF8StringEncoding];
|
std::string cpp_cfg_file = [cfgFile cStringUsingEncoding:NSUTF8StringEncoding];
|
||||||
|
|
||||||
int ret = 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) {
|
if(ret != 0) {
|
||||||
// TODO: show error message and exit.
|
http_rpc_stop();
|
||||||
NSString *msg = Nil;
|
|
||||||
|
NSString *msg = Nil;
|
||||||
if(ret == -1)
|
if(ret == -1)
|
||||||
msg = @"初始化运行环境失败!";
|
msg = @"初始化运行环境失败!";
|
||||||
else if(ret == -2)
|
else if(ret == -2)
|
||||||
msg = @"加载配置文件失败!";
|
msg = @"加载配置文件失败!\n\n请删除 ~/.tp-assist.json 后重试!";
|
||||||
else if(ret == -3)
|
else if(ret == -3)
|
||||||
msg = @"启动本地通讯端口失败!请检查本地50022端口是否被占用!";
|
msg = @"启动本地通讯端口失败!\n\n请检查本地50022和50023端口是否被占用!";
|
||||||
|
else
|
||||||
|
msg = @"发生未知错误!";
|
||||||
|
|
||||||
NSAlert *alert = [NSAlert alertWithMessageText:@"无法启动Teleport助手"
|
NSAlert *alert = [[NSAlert alloc] init];
|
||||||
defaultButton:@"确定"
|
alert.icon = [NSImage imageNamed:@"tpassist"];
|
||||||
alternateButton:Nil
|
[alert addButtonWithTitle:@"确定"];
|
||||||
otherButton:Nil
|
[alert setMessageText:@"无法启动Teleport助手"];
|
||||||
informativeTextWithFormat:msg];
|
[alert setInformativeText:msg];
|
||||||
[alert runModal];
|
[alert runModal];
|
||||||
|
|
||||||
http_rpc_stop();
|
|
||||||
|
|
||||||
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
|
[[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
|
||||||
[NSApp terminate:NSApp]; }
|
[NSApp terminate:NSApp];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (int) start_ssh_client:(NSString*)cmd_line termType:(NSString*)term_type termTheme:(NSString*)term_theme termTitle:(NSString*)term_title {
|
- (int) start_ssh_client:(NSString*)cmd_line termType:(NSString*)term_type termTheme:(NSString*)term_theme termTitle:(NSString*)term_title {
|
||||||
|
@ -122,8 +123,8 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
|
||||||
|
|
||||||
if (handlerName && [handlerName length])
|
if (handlerName && [handlerName length])
|
||||||
{
|
{
|
||||||
/* If we have a handlerName (and potentially parameters), we build
|
// If we have a handlerName (and potentially parameters), we build
|
||||||
* an NSAppleEvent to execute the script. */
|
// an NSAppleEvent to execute the script.
|
||||||
|
|
||||||
//Get a descriptor
|
//Get a descriptor
|
||||||
int pid = [[NSProcessInfo processInfo] processIdentifier];
|
int pid = [[NSProcessInfo processInfo] processIdentifier];
|
||||||
|
@ -133,7 +134,8 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
|
||||||
|
|
||||||
//Create the container event
|
//Create the container event
|
||||||
|
|
||||||
//We need these constants from the Carbon OpenScripting framework, but we don't actually need Carbon.framework...
|
// We need these constants from the Carbon OpenScripting framework,
|
||||||
|
// but we don't actually need Carbon.framework...
|
||||||
#define kASAppleScriptSuite 'ascr'
|
#define kASAppleScriptSuite 'ascr'
|
||||||
#define kASSubroutineEvent 'psbr'
|
#define kASSubroutineEvent 'psbr'
|
||||||
#define keyASSubroutineName 'snam'
|
#define keyASSubroutineName 'snam'
|
||||||
|
@ -165,9 +167,30 @@ int AppDelegate_start_ssh_client (void *_self, const char* cmd_line, const char*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (int) select_app:(NSString*)strIgnore {
|
||||||
|
// NOT WORK NOW
|
||||||
|
// this function called by ts_http_rpc.c but it run in worker thread.
|
||||||
|
// once we call select_app from worker thread, the NSOpenPanel alloc crash.
|
||||||
|
// so we have had to show UI like "post a event and call callback" stuff.
|
||||||
|
|
||||||
|
NSOpenPanel *mySelectPanel = [[NSOpenPanel alloc] init];
|
||||||
|
[mySelectPanel setCanChooseDirectories:YES];
|
||||||
|
[mySelectPanel setCanChooseFiles:YES];
|
||||||
|
[mySelectPanel setCanCreateDirectories:YES];
|
||||||
|
[mySelectPanel setAllowsMultipleSelection:NO];
|
||||||
|
[mySelectPanel setResolvesAliases:YES];
|
||||||
|
|
||||||
|
if([mySelectPanel runModal] == NSModalResponseOK) {
|
||||||
|
NSURL *ret = [mySelectPanel URL];
|
||||||
|
NSLog(@"%@", ret.absoluteString);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
- (IBAction)visitWebsite:(id)sender {
|
- (IBAction)visitWebsite:(id)sender {
|
||||||
|
|
||||||
NSURL *url = [NSURL URLWithString:@"http://www.tp4a.com/"];
|
NSURL *url = [NSURL URLWithString:@"https://www.tp4a.com/"];
|
||||||
[[NSWorkspace sharedWorkspace] openURL:url];
|
[[NSWorkspace sharedWorkspace] openURL:url];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
|
@ -16,11 +16,11 @@
|
||||||
</customObject>
|
</customObject>
|
||||||
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
|
||||||
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
|
||||||
<window title="About Teleport Assist" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
<window title="About Teleport Assist" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="F0z-JX-Cv5">
|
||||||
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
<windowStyleMask key="styleMask" titled="YES" closable="YES"/>
|
||||||
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
<windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
|
||||||
<rect key="contentRect" x="750" y="574" width="315" height="204"/>
|
<rect key="contentRect" x="750" y="574" width="315" height="204"/>
|
||||||
<rect key="screenRect" x="0.0" y="0.0" width="1440" height="877"/>
|
<rect key="screenRect" x="0.0" y="0.0" width="2048" height="1129"/>
|
||||||
<view key="contentView" id="se5-gp-TjO">
|
<view key="contentView" id="se5-gp-TjO">
|
||||||
<rect key="frame" x="0.0" y="0.0" width="315" height="204"/>
|
<rect key="frame" x="0.0" y="0.0" width="315" height="204"/>
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
|
@ -53,7 +53,7 @@
|
||||||
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
|
||||||
<buttonCell key="cell" type="push" title="Homepage" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="uUM-88-32s">
|
<buttonCell key="cell" type="push" title="Homepage" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="uUM-88-32s">
|
||||||
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
<behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
|
||||||
<font key="font" metaFont="system" size="11"/>
|
<font key="font" metaFont="smallSystem"/>
|
||||||
</buttonCell>
|
</buttonCell>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="btnHomepage:" target="-2" id="ZGb-bg-pCR"/>
|
<action selector="btnHomepage:" target="-2" id="ZGb-bg-pCR"/>
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
<connections>
|
<connections>
|
||||||
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
<outlet property="delegate" destination="-2" id="0bl-1N-AYu"/>
|
||||||
</connections>
|
</connections>
|
||||||
<point key="canvasLocation" x="51" y="233"/>
|
<point key="canvasLocation" x="50.5" y="233"/>
|
||||||
</window>
|
</window>
|
||||||
</objects>
|
</objects>
|
||||||
<resources>
|
<resources>
|
||||||
|
|
|
@ -2,3 +2,13 @@
|
||||||
Localizable.strings
|
Localizable.strings
|
||||||
TPAssist
|
TPAssist
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
"app_name" = "Teleport助手";
|
||||||
|
|
||||||
|
//=============================================
|
||||||
|
// for About Window
|
||||||
|
//=============================================
|
||||||
|
"version" = "Version: ";
|
||||||
|
"app_full_name" = "Teleport Assist for macOS";
|
||||||
|
"copyright" = "Copyright © 2017~2018 TP4A. All rights reserved.";
|
||||||
|
"visit_tp4a_website" = "Visit Teleport Website"
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="13196" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<deployment identifier="macosx"/>
|
<deployment identifier="macosx"/>
|
||||||
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="13196"/>
|
<development version="10000" identifier="xcode"/>
|
||||||
|
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14460.31"/>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<objects>
|
<objects>
|
||||||
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
<customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
|
||||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.9 KiB |
After Width: | Height: | Size: 2.5 KiB |
|
@ -17,11 +17,11 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>3.1.0</string>
|
<string>3.2.0</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>3.1.0</string>
|
<string>3.2.0</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>
|
||||||
|
@ -29,12 +29,12 @@
|
||||||
<key>LSUIElement</key>
|
<key>LSUIElement</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2017~2018 EOMSOFT. All rights reserved.</string>
|
<string>Copyright © 2017~2018 TP4A. All rights reserved.</string>
|
||||||
<key>NSMainNibFile</key>
|
<key>NSMainNibFile</key>
|
||||||
<string>MainMenu</string>
|
<string>MainMenu</string>
|
||||||
<key>NSPrincipalClass</key>
|
<key>NSPrincipalClass</key>
|
||||||
<string>NSApplication</string>
|
<string>NSApplication</string>
|
||||||
<key>Product Homepage</key>
|
<key>Product Homepage</key>
|
||||||
<string>http://teleport.eomsoft.net/</string>
|
<string>https://www.tp4a.com/</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
|
@ -19,6 +19,20 @@ bool TsCfg::init(void) {
|
||||||
if(!_load(file_content))
|
if(!_load(file_content))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if(!m_root.isObject()) {
|
||||||
|
EXLOGE("invalid config file, not in json format?\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_root["file_version"].isNull()) {
|
||||||
|
EXLOGE("invalid config file, maybe need create new one?\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!m_root["file_version"].isInt()) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,6 +52,76 @@ bool TsCfg::save(const ex_astr& new_value)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TsCfg::_parse_app(const Json::Value& m_root, const ex_astr& str_app, APP_CONFIG& cfg) {
|
||||||
|
const Json::Value& jApp = m_root[str_app.c_str()];
|
||||||
|
if(!jApp.isObject())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (!jApp["selected"].isString()) {
|
||||||
|
EXLOGE("invalid config, error 2.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
ex_astr _selected = jApp["selected"].asCString();;
|
||||||
|
|
||||||
|
if (!jApp["available"].isArray() || jApp["available"].size() == 0) {
|
||||||
|
EXLOGE("invalid config, error 3.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const Json::Value& jAppList = jApp["available"];
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
for (i = 0; i < jAppList.size(); ++i) {
|
||||||
|
if (
|
||||||
|
!jAppList[i]["name"].isString()
|
||||||
|
|| !jAppList[i]["app"].isString()
|
||||||
|
|| !jAppList[i]["cmdline"].isString()
|
||||||
|
|| !jAppList[i]["desc"].isArray()
|
||||||
|
) {
|
||||||
|
EXLOGE("invalid config, error 4.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(jAppList[i]["name"].asString().empty()) {
|
||||||
|
EXLOGE("invalid config, need name.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (jAppList[i]["display"].isNull() || jAppList[i]["display"].asString().empty()) {
|
||||||
|
cfg.display = jAppList[i]["name"].asCString();
|
||||||
|
} else
|
||||||
|
cfg.display = jAppList[i]["display"].asCString();
|
||||||
|
|
||||||
|
if (jAppList[i]["name"].asCString() != _selected)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
cfg.name = jAppList[i]["name"].asCString();
|
||||||
|
cfg.display = jAppList[i]["display"].asCString();
|
||||||
|
cfg.application = jAppList[i]["app"].asCString();
|
||||||
|
cfg.cmdline = jAppList[i]["cmdline"].asCString();
|
||||||
|
|
||||||
|
if(jAppList[i]["desc"].size() > 0) {
|
||||||
|
const Json::Value& jAppDescList = jAppList[i]["desc"];
|
||||||
|
|
||||||
|
int j = 0;
|
||||||
|
for(j = 0; j < jAppDescList.size(); ++j) {
|
||||||
|
if(!jAppDescList[j].isString())
|
||||||
|
return false;
|
||||||
|
cfg.description.push_back(jAppDescList[j].asCString());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (cfg.application.empty() || cfg.cmdline.empty()) {
|
||||||
|
// EXLOGE("invalid config, error 6.\n");
|
||||||
|
// return false;
|
||||||
|
// }
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TsCfg::_load(const ex_astr& str_json) {
|
bool TsCfg::_load(const ex_astr& str_json) {
|
||||||
Json::Reader jreader;
|
Json::Reader jreader;
|
||||||
|
|
||||||
|
@ -46,6 +130,233 @@ bool TsCfg::_load(const ex_astr& str_json) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//===================================
|
||||||
|
// check ssh config
|
||||||
|
//===================================
|
||||||
|
if(!_parse_app(m_root, "ssh", ssh))
|
||||||
|
return false;
|
||||||
|
if(!_parse_app(m_root, "sftp", sftp))
|
||||||
|
return false;
|
||||||
|
// if(!_parse_app(m_root, "telnet", telnet))
|
||||||
|
// return false;
|
||||||
|
if(!_parse_app(m_root, "rdp", rdp))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
if (!m_root["ssh"].isObject()) {
|
||||||
|
EXLOGE("invalid config, error 1.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_root["ssh"]["selected"].isString()) {
|
||||||
|
EXLOGE("invalid config, error 2.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sel_name = m_root["ssh"]["selected"].asCString();
|
||||||
|
|
||||||
|
if (!m_root["ssh"]["available"].isArray() || m_root["ssh"]["available"].size() == 0) {
|
||||||
|
EXLOGE("invalid config, error 3.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < m_root["ssh"]["available"].size(); ++i) {
|
||||||
|
|
||||||
|
if (
|
||||||
|
!m_root["ssh"]["available"][i]["name"].isString()
|
||||||
|
|| !m_root["ssh"]["available"][i]["app"].isString()
|
||||||
|
|| !m_root["ssh"]["available"][i]["cmdline"].isString()
|
||||||
|
) {
|
||||||
|
EXLOGE("invalid config, error 4.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["ssh"]["available"][i]["display"].isNull()) {
|
||||||
|
m_root["ssh"]["available"][i]["display"] = m_root["ssh"]["available"][i]["name"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["ssh"]["available"][i]["name"].asCString() != sel_name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
ssh_app = m_root["ssh"]["available"][i]["app"].asCString();
|
||||||
|
ssh_cmdline = m_root["ssh"]["available"][i]["cmdline"].asCString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ssh_app.length() == 0 || ssh_cmdline.length() == 0) {
|
||||||
|
EXLOGE("invalid config, error 6.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//===================================
|
||||||
|
// check sftp config
|
||||||
|
//===================================
|
||||||
|
|
||||||
|
if (!m_root["scp"].isObject()) {
|
||||||
|
EXLOGE("invalid config, error 1.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_root["scp"]["selected"].isString()) {
|
||||||
|
EXLOGE("invalid config, error 2.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sel_name = m_root["scp"]["selected"].asCString();
|
||||||
|
|
||||||
|
if (!m_root["scp"]["available"].isArray() || m_root["scp"]["available"].size() == 0) {
|
||||||
|
EXLOGE("invalid config, error 3.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < m_root["sftp"]["available"].size(); ++i) {
|
||||||
|
|
||||||
|
if (
|
||||||
|
!m_root["sftp"]["available"][i]["name"].isString()
|
||||||
|
|| !m_root["sftp"]["available"][i]["app"].isString()
|
||||||
|
|| !m_root["sftp"]["available"][i]["cmdline"].isString()
|
||||||
|
) {
|
||||||
|
EXLOGE("invalid config, error 4.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["scp"]["available"][i]["display"].isNull()) {
|
||||||
|
m_root["scp"]["available"][i]["display"] = m_root["scp"]["available"][i]["name"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["scp"]["available"][i]["name"].asCString() != sel_name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// tmp = m_root["scp"]["available"][i]["app"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, scp_app, EX_CODEPAGE_UTF8);
|
||||||
|
scp_app = m_root["scp"]["available"][i]["app"].asCString();
|
||||||
|
// tmp = m_root["scp"]["available"][i]["cmdline"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, scp_cmdline, EX_CODEPAGE_UTF8);
|
||||||
|
scp_cmdline = m_root["scp"]["available"][i]["cmdline"].asCString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (scp_app.length() == 0 || scp_cmdline.length() == 0) {
|
||||||
|
EXLOGE("invalid config, error 6.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//===================================
|
||||||
|
// check telnet config
|
||||||
|
//===================================
|
||||||
|
|
||||||
|
if (!m_root["telnet"].isObject()) {
|
||||||
|
EXLOGE("invalid config, error 1.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_root["telnet"]["selected"].isString()) {
|
||||||
|
EXLOGE("invalid config, error 2.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
sel_name = m_root["telnet"]["selected"].asCString();
|
||||||
|
|
||||||
|
if (!m_root["telnet"]["available"].isArray() || m_root["telnet"]["available"].size() == 0) {
|
||||||
|
EXLOGE("invalid config, error 3.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < m_root["telnet"]["available"].size(); ++i) {
|
||||||
|
|
||||||
|
if (
|
||||||
|
!m_root["telnet"]["available"][i]["name"].isString()
|
||||||
|
|| !m_root["telnet"]["available"][i]["app"].isString()
|
||||||
|
|| !m_root["telnet"]["available"][i]["cmdline"].isString()
|
||||||
|
) {
|
||||||
|
EXLOGE("invalid config, error 4.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["telnet"]["available"][i]["display"].isNull()) {
|
||||||
|
m_root["telnet"]["available"][i]["display"] = m_root["telnet"]["available"][i]["name"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["telnet"]["available"][i]["name"].asCString() != sel_name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// tmp = m_root["telnet"]["available"][i]["app"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, telnet_app, EX_CODEPAGE_UTF8);
|
||||||
|
// tmp = m_root["telnet"]["available"][i]["cmdline"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, telnet_cmdline, EX_CODEPAGE_UTF8);
|
||||||
|
telnet_app = m_root["telnet"]["available"][i]["app"].asCString();
|
||||||
|
telnet_cmdline = m_root["telnet"]["available"][i]["cmdline"].asCString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (telnet_app.length() == 0 || telnet_cmdline.length() == 0) {
|
||||||
|
EXLOGE("invalid config, error 6.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//===================================
|
||||||
|
// check rdp config
|
||||||
|
//===================================
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
sel_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]["cmdline"].isString()
|
||||||
|
) {
|
||||||
|
EXLOGE("invalid config, error 4.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["rdp"]["available"][i]["display"].isNull()) {
|
||||||
|
m_root["rdp"]["available"][i]["display"] = m_root["rdp"]["available"][i]["name"];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_root["rdp"]["available"][i]["name"].asCString() != sel_name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// tmp = m_root["rdp"]["available"][i]["app"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, rdp_app, EX_CODEPAGE_UTF8);
|
||||||
|
// tmp = m_root["rdp"]["available"][i]["cmdline"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, rdp_cmdline, EX_CODEPAGE_UTF8);
|
||||||
|
// tmp = m_root["rdp"]["available"][i]["name"].asCString();
|
||||||
|
// ex_astr2wstr(tmp, rdp_name, EX_CODEPAGE_UTF8);
|
||||||
|
rdp_app = m_root["rdp"]["available"][i]["app"].asCString();
|
||||||
|
rdp_cmdline = m_root["rdp"]["available"][i]["cmdline"].asCString();
|
||||||
|
rdp_name = m_root["rdp"]["available"][i]["name"].asCString();
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rdp_app.length() == 0 || rdp_cmdline.length() == 0 || rdp_name.length() == 0) {
|
||||||
|
EXLOGE("invalid config, error 6.\n");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if 0
|
||||||
// ------------ term ---------------------
|
// ------------ term ---------------------
|
||||||
|
|
||||||
if (!m_root["term"].isObject()) {
|
if (!m_root["term"].isObject()) {
|
||||||
|
@ -154,6 +465,7 @@ bool TsCfg::_load(const ex_astr& str_json) {
|
||||||
EXLOGE("invalid config, error 6.\n");
|
EXLOGE("invalid config, error 6.\n");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,14 @@
|
||||||
|
|
||||||
#include <json/json.h>
|
#include <json/json.h>
|
||||||
|
|
||||||
|
typedef struct APP_CONFIG {
|
||||||
|
ex_astr name;
|
||||||
|
ex_astr display;
|
||||||
|
ex_astr application;
|
||||||
|
ex_astr cmdline;
|
||||||
|
ex_astrs description;
|
||||||
|
}APP_CONFIG;
|
||||||
|
|
||||||
class TsCfg
|
class TsCfg
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -17,18 +25,14 @@ public:
|
||||||
|
|
||||||
Json::Value& get_root() {return m_root;}
|
Json::Value& get_root() {return m_root;}
|
||||||
|
|
||||||
ex_astr term_name;
|
APP_CONFIG ssh;
|
||||||
ex_astr term_display;
|
APP_CONFIG sftp;
|
||||||
ex_astr term_app;
|
APP_CONFIG telnet;
|
||||||
ex_astr term_profile;
|
APP_CONFIG rdp;
|
||||||
|
|
||||||
ex_astr rdp_name;
|
|
||||||
ex_astr rdp_display;
|
|
||||||
ex_astr rdp_app;
|
|
||||||
//ex_astr rdp_cmdline;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool _load(const ex_astr& str_json);
|
bool _load(const ex_astr& str_json);
|
||||||
|
bool _parse_app(const Json::Value& m_root, const ex_astr& str_app, APP_CONFIG& cfg);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Json::Value m_root;
|
Json::Value m_root;
|
||||||
|
|
|
@ -1,12 +1,7 @@
|
||||||
#ifndef __TS_CONST_H__
|
#ifndef __TS_CONST_H__
|
||||||
#define __TS_CONST_H__
|
#define __TS_CONST_H__
|
||||||
|
|
||||||
//#define TS_WEB_URL L"http://teleport.eomsoft.net/"
|
#define TS_HTTP_RPC_PORT 50022
|
||||||
//#define TS_BBS_URL L"http://bbs.eomsoft.net/"
|
#define TS_HTTPS_RPC_PORT 50023
|
||||||
//#define TS_TRAY_MSG L"Teleport助手正常工作中"
|
|
||||||
|
|
||||||
#define TS_HTTP_RPC_PORT 50022
|
|
||||||
//#define TS_HTTP_RPC_HOST "127.0.0.1"
|
|
||||||
#define TS_HTTP_RPC_HOST "localhost"
|
|
||||||
|
|
||||||
#endif // __TS_CONST_H__
|
#endif // __TS_CONST_H__
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
//#include "stdafx.h"
|
|
||||||
#include "ts_env.h"
|
#include "ts_env.h"
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -24,12 +23,12 @@ bool TsEnv::init(const char* cfg_file, const char* res_path)
|
||||||
ex_astr2wstr(cfg_file, m_cfg_file);
|
ex_astr2wstr(cfg_file, m_cfg_file);
|
||||||
ex_astr2wstr(res_path, m_res_path);
|
ex_astr2wstr(res_path, m_res_path);
|
||||||
|
|
||||||
//#ifdef EX_DEBUG
|
#ifdef EX_DEBUG
|
||||||
// m_site_path = L"/Users/apex/work/eomsoft/teleport-dev/client/tp_assist_macos/site";
|
m_site_path = L"/Users/apex/work/tp4a/teleport/client/tp_assist_macos/site";
|
||||||
//#else
|
#else
|
||||||
m_site_path = m_res_path;
|
m_site_path = m_res_path;
|
||||||
ex_path_join(m_site_path, false, L"site", NULL);
|
ex_path_join(m_site_path, false, L"site", NULL);
|
||||||
//#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
//#include "stdafx.h"
|
|
||||||
|
|
||||||
//#pragma warning(disable:4091)
|
|
||||||
|
|
||||||
//#include <commdlg.h>
|
|
||||||
//#include <ShlObj.h>
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include <teleport_const.h>
|
#include <teleport_const.h>
|
||||||
|
@ -15,7 +9,6 @@
|
||||||
#include "../AppDelegate-C-Interface.h"
|
#include "../AppDelegate-C-Interface.h"
|
||||||
|
|
||||||
#include "ts_http_rpc.h"
|
#include "ts_http_rpc.h"
|
||||||
//#include "dlg_main.h"
|
|
||||||
#include "ts_ver.h"
|
#include "ts_ver.h"
|
||||||
#include "ts_env.h"
|
#include "ts_env.h"
|
||||||
#include "ts_cfg.h"
|
#include "ts_cfg.h"
|
||||||
|
@ -25,33 +18,44 @@
|
||||||
#define RDP_CLIENT_FREERDP
|
#define RDP_CLIENT_FREERDP
|
||||||
|
|
||||||
TsHttpRpc g_http_interface;
|
TsHttpRpc g_http_interface;
|
||||||
|
TsHttpRpc g_https_interface;
|
||||||
|
|
||||||
void* g_app = NULL;
|
void* g_app = NULL;
|
||||||
|
|
||||||
int http_rpc_start(void* app) {
|
int http_rpc_start(void* app) {
|
||||||
g_app = app;
|
g_app = app;
|
||||||
|
|
||||||
// if(!g_env.init())
|
EXLOGW("======================================================\n");
|
||||||
// return;
|
|
||||||
|
|
||||||
if (!g_http_interface.init(TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT))
|
if (!g_http_interface.init_http())
|
||||||
{
|
{
|
||||||
EXLOGE("[ERROR] can not start HTTP-RPC listener, maybe port %d is already in use.\n", 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 -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXLOGW("======================================================\n");
|
EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on localhost:%d\n", TS_HTTP_RPC_PORT);
|
||||||
EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on %s:%d\n", TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT);
|
|
||||||
|
|
||||||
if(!g_http_interface.start())
|
if(!g_http_interface.start())
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
return 0;
|
if (!g_https_interface.init_https())
|
||||||
|
{
|
||||||
|
EXLOGE("[ERROR] can not start HTTPS-RPC listener, maybe port %d is already in use.\n", TS_HTTPS_RPC_PORT);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXLOGW("[rpc] TeleportAssist-HTTPS-RPC ready on localhost:%d\n", TS_HTTPS_RPC_PORT);
|
||||||
|
|
||||||
|
if(!g_https_interface.start())
|
||||||
|
return -2;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void http_rpc_stop(void)
|
void http_rpc_stop(void)
|
||||||
{
|
{
|
||||||
g_http_interface.stop();
|
g_http_interface.stop();
|
||||||
|
g_https_interface.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
|
#define HEXTOI(x) (isdigit(x) ? x - '0' : x - 'W')
|
||||||
|
@ -102,45 +106,79 @@ TsHttpRpc::~TsHttpRpc()
|
||||||
mg_mgr_free(&m_mg_mgr);
|
mg_mgr_free(&m_mg_mgr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TsHttpRpc::init(const char* ip, int port)
|
bool TsHttpRpc::init_http()
|
||||||
{
|
{
|
||||||
struct mg_connection* nc = NULL;
|
|
||||||
|
|
||||||
char addr[128] = { 0 };
|
char addr[128] = { 0 };
|
||||||
if (0 == strcmp(ip, "127.0.0.1") || 0 == strcmp(ip, "localhost"))
|
ex_strformat(addr, 128, "tcp://localhost:%d", TS_HTTP_RPC_PORT);
|
||||||
ex_strformat(addr, 128, "tcp://127.0.0.1:%d", port);
|
|
||||||
else
|
|
||||||
ex_strformat(addr, 128, "tcp://%s:%d", ip, port);
|
|
||||||
|
|
||||||
nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler);
|
struct mg_connection* nc = NULL;
|
||||||
if (nc == NULL)
|
nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler);
|
||||||
{
|
if (nc == NULL) {
|
||||||
EXLOGE("[rpc] TsHttpRpc::init %s:%d\n", ip, port);
|
EXLOGE("[rpc] TsHttpRpc::init_http() localhost:%d\n", TS_HTTP_RPC_PORT);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
nc->user_data = this;
|
nc->user_data = this;
|
||||||
|
|
||||||
mg_set_protocol_http_websocket(nc);
|
mg_set_protocol_http_websocket(nc);
|
||||||
|
|
||||||
m_content_type_map[".js"] = "application/javascript";
|
return _on_init();
|
||||||
m_content_type_map[".png"] = "image/png";
|
}
|
||||||
m_content_type_map[".jpeg"] = "image/jpeg";
|
|
||||||
m_content_type_map[".jpg"] = "image/jpeg";
|
|
||||||
m_content_type_map[".gif"] = "image/gif";
|
|
||||||
m_content_type_map[".ico"] = "image/x-icon";
|
|
||||||
m_content_type_map[".json"] = "image/json";
|
|
||||||
m_content_type_map[".html"] = "text/html";
|
|
||||||
m_content_type_map[".css"] = "text/css";
|
|
||||||
m_content_type_map[".tif"] = "image/tiff";
|
|
||||||
m_content_type_map[".tiff"] = "image/tiff";
|
|
||||||
m_content_type_map[".svg"] = "text/html";
|
|
||||||
|
|
||||||
return true;
|
bool TsHttpRpc::init_https()
|
||||||
|
{
|
||||||
|
ex_wstr file_ssl_cert = g_env.m_res_path;
|
||||||
|
ex_path_join(file_ssl_cert, false, L"localhost.pem", NULL);
|
||||||
|
ex_wstr file_ssl_key = g_env.m_res_path;
|
||||||
|
ex_path_join(file_ssl_key, false, L"localhost.key", NULL);
|
||||||
|
ex_astr _ssl_cert;
|
||||||
|
ex_wstr2astr(file_ssl_cert, _ssl_cert);
|
||||||
|
ex_astr _ssl_key;
|
||||||
|
ex_wstr2astr(file_ssl_key, _ssl_key);
|
||||||
|
|
||||||
|
const char *err = NULL;
|
||||||
|
struct mg_bind_opts bind_opts;
|
||||||
|
memset(&bind_opts, 0, sizeof(bind_opts));
|
||||||
|
bind_opts.ssl_cert = _ssl_cert.c_str();
|
||||||
|
bind_opts.ssl_key = _ssl_key.c_str();
|
||||||
|
bind_opts.error_string = &err;
|
||||||
|
|
||||||
|
char addr[128] = { 0 };
|
||||||
|
ex_strformat(addr, 128, "tcp://localhost:%d", TS_HTTPS_RPC_PORT);
|
||||||
|
|
||||||
|
struct mg_connection* nc = NULL;
|
||||||
|
nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts);
|
||||||
|
if (nc == NULL) {
|
||||||
|
EXLOGE("[rpc] TsHttpRpc::init_https() localhost:%d\n", TS_HTTPS_RPC_PORT);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
nc->user_data = this;
|
||||||
|
|
||||||
|
mg_set_protocol_http_websocket(nc);
|
||||||
|
|
||||||
|
return _on_init();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TsHttpRpc::_on_init() {
|
||||||
|
m_content_type_map[".js"] = "application/javascript";
|
||||||
|
m_content_type_map[".png"] = "image/png";
|
||||||
|
m_content_type_map[".jpeg"] = "image/jpeg";
|
||||||
|
m_content_type_map[".jpg"] = "image/jpeg";
|
||||||
|
m_content_type_map[".gif"] = "image/gif";
|
||||||
|
m_content_type_map[".ico"] = "image/x-icon";
|
||||||
|
m_content_type_map[".json"] = "image/json";
|
||||||
|
m_content_type_map[".html"] = "text/html";
|
||||||
|
m_content_type_map[".css"] = "text/css";
|
||||||
|
m_content_type_map[".tif"] = "image/tiff";
|
||||||
|
m_content_type_map[".tiff"] = "image/tiff";
|
||||||
|
m_content_type_map[".svg"] = "text/html";
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TsHttpRpc::_thread_loop(void)
|
void TsHttpRpc::_thread_loop(void)
|
||||||
{
|
{
|
||||||
while (!m_stop_flag)
|
while (!m_need_stop)
|
||||||
{
|
{
|
||||||
mg_mgr_poll(&m_mg_mgr, 500);
|
mg_mgr_poll(&m_mg_mgr, 500);
|
||||||
}
|
}
|
||||||
|
@ -148,10 +186,10 @@ void TsHttpRpc::_thread_loop(void)
|
||||||
EXLOGV("[core] rpc main loop end.\n");
|
EXLOGV("[core] rpc main loop end.\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void TsHttpRpc::_set_stop_flag(void)
|
//void TsHttpRpc::_set_stop_flag(void)
|
||||||
{
|
//{
|
||||||
m_stop_flag = true;
|
// m_stop_flag = true;
|
||||||
}
|
//}
|
||||||
|
|
||||||
void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_data)
|
void TsHttpRpc::_mg_event_handler(struct mg_connection *nc, int ev, void *ev_data)
|
||||||
{
|
{
|
||||||
|
@ -464,11 +502,15 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
|
|
||||||
ex_astr teleport_ip = jsRoot["teleport_ip"].asCString();
|
ex_astr teleport_ip = jsRoot["teleport_ip"].asCString();
|
||||||
int teleport_port = jsRoot["teleport_port"].asUInt();
|
int teleport_port = jsRoot["teleport_port"].asUInt();
|
||||||
|
char _port[64] = {0};
|
||||||
|
ex_strformat(_port, 64, "%d", teleport_port);
|
||||||
|
ex_astr str_teleport_port = _port;
|
||||||
|
|
||||||
ex_astr real_host_ip = jsRoot["remote_host_ip"].asCString();
|
ex_astr real_host_ip = jsRoot["remote_host_ip"].asCString();
|
||||||
ex_astr sid = jsRoot["session_id"].asCString();
|
ex_astr sid = jsRoot["session_id"].asCString();
|
||||||
|
|
||||||
ex_astr s_exec;
|
ex_astr s_exec;
|
||||||
|
ex_astr s_arg;
|
||||||
ex_astrs s_argv;
|
ex_astrs s_argv;
|
||||||
|
|
||||||
|
|
||||||
|
@ -478,7 +520,7 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
// RDP
|
// RDP
|
||||||
//==============================================
|
//==============================================
|
||||||
|
|
||||||
if(g_cfg.rdp_app.length() == 0) {
|
if(g_cfg.rdp.application.length() == 0) {
|
||||||
_create_json_ret(buf, TPE_NOT_EXISTS);
|
_create_json_ret(buf, TPE_NOT_EXISTS);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -546,7 +588,7 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
//w_exe_path = _T("/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp -u {user_name} {size} {console} ");
|
//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} ");
|
//w_exe_path = _T("xfreerdp -u {user_name} {size} {console} ");
|
||||||
//s_exec = "/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp";
|
//s_exec = "/usr/local/Cellar/freerdp/1.0.2_1/bin/xfreerdp";
|
||||||
s_exec = g_cfg.rdp_app;
|
s_exec = g_cfg.rdp.application;
|
||||||
s_argv.push_back(s_exec.c_str());
|
s_argv.push_back(s_exec.c_str());
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -594,25 +636,49 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
|
|
||||||
if (pro_sub == TP_PROTOCOL_TYPE_SSH_SHELL)
|
if (pro_sub == TP_PROTOCOL_TYPE_SSH_SHELL)
|
||||||
{
|
{
|
||||||
char szCmd[1024] = {0};
|
if(g_cfg.ssh.name == "terminal" || g_cfg.ssh.name == "iterm2") {
|
||||||
ex_strformat(szCmd, 1023, "ssh %s@%s -p %d", sid.c_str(), teleport_ip.c_str(), teleport_port);
|
char szCmd[1024] = {0};
|
||||||
|
ex_strformat(szCmd, 1023, "ssh %s@%s -p %d", sid.c_str(), teleport_ip.c_str(), teleport_port);
|
||||||
|
|
||||||
char szTitle[128] = {0};
|
char szTitle[128] = {0};
|
||||||
ex_strformat(szTitle, 127, "TP#%s", real_host_ip.c_str());
|
ex_strformat(szTitle, 127, "TP#%s", real_host_ip.c_str());
|
||||||
|
|
||||||
int ret = AppDelegate_start_ssh_client(g_app, szCmd, g_cfg.term_name.c_str(), g_cfg.term_profile.c_str(), szTitle);
|
int ret = AppDelegate_start_ssh_client(g_app, szCmd, g_cfg.ssh.name.c_str(), g_cfg.ssh.cmdline.c_str(), szTitle);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
_create_json_ret(buf, TPE_OK);
|
_create_json_ret(buf, TPE_OK);
|
||||||
else
|
else
|
||||||
_create_json_ret(buf, TPE_FAILED);
|
_create_json_ret(buf, TPE_FAILED);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_cfg.ssh.application.length() == 0) {
|
||||||
|
_create_json_ret(buf, TPE_NOT_EXISTS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_exec = g_cfg.ssh.application;
|
||||||
|
s_argv.push_back(s_exec.c_str());
|
||||||
|
|
||||||
|
s_arg = g_cfg.ssh.cmdline;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
// sorry, SFTP not supported yet for macOS.
|
// sorry, SFTP not supported yet for macOS.
|
||||||
_create_json_ret(buf, TPE_NOT_IMPLEMENT);
|
// _create_json_ret(buf, TPE_NOT_IMPLEMENT);
|
||||||
return;
|
// return;
|
||||||
}
|
|
||||||
|
if(g_cfg.sftp.application.length() == 0) {
|
||||||
|
_create_json_ret(buf, TPE_NOT_EXISTS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
s_exec = g_cfg.sftp.application;
|
||||||
|
s_argv.push_back(s_exec.c_str());
|
||||||
|
|
||||||
|
s_arg = g_cfg.sftp.cmdline;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (pro_type == TP_PROTOCOL_TYPE_TELNET)
|
else if (pro_type == TP_PROTOCOL_TYPE_TELNET)
|
||||||
{
|
{
|
||||||
|
@ -621,74 +687,96 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
//==============================================
|
//==============================================
|
||||||
|
|
||||||
// sorry, TELNET not supported yet for macOS.
|
// sorry, TELNET not supported yet for macOS.
|
||||||
_create_json_ret(buf, TPE_NOT_IMPLEMENT);
|
_create_json_ret(buf, TPE_NOT_IMPLEMENT);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// ex_replace_all(w_exe_path, _T("{host_port}"), w_port);
|
// if(g_cfg.telnet.name == "terminal" || g_cfg.telnet.name == "iterm2") {
|
||||||
// ex_replace_all(w_exe_path, _T("{host_ip}"), w_teleport_ip.c_str());
|
// char szCmd[1024] = {0};
|
||||||
// ex_replace_all(w_exe_path, _T("{user_name}"), w_sid.c_str());
|
// ex_strformat(szCmd, 1023, "telnet -l %s %s %d", sid.c_str(), teleport_ip.c_str(), teleport_port);
|
||||||
// ex_replace_all(w_exe_path, _T("{real_ip}"), w_real_host_ip.c_str());
|
//
|
||||||
//ex_replace_all(w_exe_path, _T("{assist_tools_path}"), g_env.m_tools_path.c_str());
|
// char szTitle[128] = {0};
|
||||||
|
// ex_strformat(szTitle, 127, "TP#%s", real_host_ip.c_str());
|
||||||
|
//
|
||||||
|
// int ret = AppDelegate_start_ssh_client(g_app, szCmd, g_cfg.telnet.name.c_str(), g_cfg.telnet.cmdline.c_str(), szTitle);
|
||||||
|
// if(ret == 0)
|
||||||
|
// _create_json_ret(buf, TPE_OK);
|
||||||
|
// else
|
||||||
|
// _create_json_ret(buf, TPE_FAILED);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// if(g_cfg.telnet.application.length() == 0) {
|
||||||
|
// _create_json_ret(buf, TPE_NOT_EXISTS);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// s_exec = g_cfg.telnet.application;
|
||||||
|
// s_argv.push_back(s_exec.c_str());
|
||||||
|
//
|
||||||
|
// s_arg = g_cfg.telnet.cmdline;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//---- split s_arg and push to s_argv ---
|
||||||
|
ex_astr::size_type p1 = 0;
|
||||||
|
ex_astr::size_type p2 = 0;
|
||||||
|
ex_astr tmp = s_arg;
|
||||||
|
for(;;) {
|
||||||
|
ex_remove_white_space(tmp, EX_RSC_BEGIN);
|
||||||
|
if(tmp.empty()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(tmp[0] == '"') {
|
||||||
|
p1 = 1;
|
||||||
|
p2 = tmp.find('"', p1);
|
||||||
|
|
||||||
|
if(p2 == ex_astr::npos) {
|
||||||
|
_create_json_ret(buf, TPE_PARAM);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ex_astr _t;
|
||||||
|
_t.assign(tmp, p1, p2 - p1);
|
||||||
|
tmp.erase(0, p2 + 2);
|
||||||
|
|
||||||
|
s_argv.push_back(_t);
|
||||||
|
} else {
|
||||||
|
p1 = 0;
|
||||||
|
p2 = tmp.find(' ', p1);
|
||||||
|
|
||||||
|
if(p2 == ex_astr::npos) {
|
||||||
|
s_argv.push_back(tmp);
|
||||||
|
tmp.clear();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ex_astr _t;
|
||||||
|
_t.assign(tmp, p1, p2 - p1);
|
||||||
|
tmp.erase(0, p2 + 1);
|
||||||
|
|
||||||
|
s_argv.push_back(_t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Json::Value root_ret;
|
Json::Value root_ret;
|
||||||
ex_astr utf8_path = s_exec;
|
ex_astr utf8_path = s_exec;
|
||||||
//ex_wstr2astr(w_exe_path, utf8_path, EX_CODEPAGE_UTF8);
|
|
||||||
|
|
||||||
ex_astrs::iterator it = s_argv.begin();
|
ex_astrs::iterator it = s_argv.begin();
|
||||||
for(; it != s_argv.end(); ++it) {
|
for(; it != s_argv.end(); ++it) {
|
||||||
utf8_path += " ";
|
ex_replace_all((*it), "{host_port}", str_teleport_port);
|
||||||
utf8_path += (*it);
|
ex_replace_all((*it), "{host_ip}", teleport_ip);
|
||||||
}
|
ex_replace_all((*it), "{user_name}", sid);
|
||||||
|
ex_replace_all((*it), "{real_ip}", real_host_ip);
|
||||||
|
//ex_replace_all(utf8_path, _T("{assist_tools_path}"), g_env.m_tools_path.c_str());
|
||||||
|
|
||||||
|
utf8_path += " ";
|
||||||
|
utf8_path += (*it);
|
||||||
|
}
|
||||||
|
|
||||||
root_ret["path"] = utf8_path;
|
root_ret["path"] = utf8_path;
|
||||||
|
|
||||||
// if (!CreateProcess(NULL, (wchar_t *)w_exe_path.c_str(), NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi))
|
|
||||||
// {
|
|
||||||
// EXLOGE(_T("CreateProcess() failed. Error=0x%08X.\n %s\n"), GetLastError(), w_exe_path.c_str());
|
|
||||||
// root_ret["code"] = TPE_START_CLIENT;
|
|
||||||
// _create_json_ret(buf, root_ret);
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//system(utf8_path.c_str());
|
|
||||||
//ex_astr __sid;
|
|
||||||
//ex_wstr2astr(w_sid, __sid);
|
|
||||||
//execlp("xfreerdp", "-u", __sid.c_str(), "-g", "800x600", "127.0.0.1:52089", NULL);
|
|
||||||
// FILE *f = popen(utf8_path.c_str(), "r");
|
|
||||||
// if(f == NULL) {
|
|
||||||
// root_ret["code"] = TPE_FAILED;
|
|
||||||
// } else {
|
|
||||||
// root_ret["code"] = TPE_OK;
|
|
||||||
// pclose(f);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// {
|
|
||||||
// int i = 0;
|
|
||||||
// char** _argv = (char**)calloc(s_argv.size()+1, sizeof(char*));
|
|
||||||
// if (!_argv)
|
|
||||||
// return;
|
|
||||||
//
|
|
||||||
// for (i = 0; i < s_argv.size(); ++i)
|
|
||||||
// {
|
|
||||||
// _argv[i] = ex_strdup(s_argv[i].c_str());
|
|
||||||
// }
|
|
||||||
// _argv[i] = NULL;
|
|
||||||
//
|
|
||||||
// execv(s_exec.c_str(), _argv);
|
|
||||||
//
|
|
||||||
// for(i = 0; i < s_argv.size(); ++i) {
|
|
||||||
// if(_argv[i] != NULL) {
|
|
||||||
// free(_argv[i]);
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// free(_argv);
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// for macOS, Create Process should be fork()/exec()...
|
// for macOS, Create Process should be fork()/exec()...
|
||||||
pid_t processId;
|
pid_t processId;
|
||||||
if ((processId = fork()) == 0) {
|
if ((processId = fork()) == 0) {
|
||||||
|
@ -704,7 +792,7 @@ void TsHttpRpc::_rpc_func_run_client(const ex_astr& func_args, ex_astr& buf)
|
||||||
}
|
}
|
||||||
_argv[i] = NULL;
|
_argv[i] = NULL;
|
||||||
|
|
||||||
execv(s_exec.c_str(), _argv);
|
execv(s_exec.c_str(), _argv);
|
||||||
|
|
||||||
for(i = 0; i < s_argv.size(); ++i) {
|
for(i = 0; i < s_argv.size(); ++i) {
|
||||||
if(_argv[i] != NULL) {
|
if(_argv[i] != NULL) {
|
||||||
|
@ -756,8 +844,44 @@ void TsHttpRpc::_rpc_func_set_config(const ex_astr& func_args, ex_astr& buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
void TsHttpRpc::_rpc_func_file_action(const ex_astr& func_args, ex_astr& buf) {
|
void TsHttpRpc::_rpc_func_file_action(const ex_astr& func_args, ex_astr& buf) {
|
||||||
_create_json_ret(buf, TPE_NOT_IMPLEMENT);
|
_create_json_ret(buf, TPE_FAILED);
|
||||||
|
#if 0
|
||||||
|
Json::Reader jreader;
|
||||||
|
Json::Value jsRoot;
|
||||||
|
|
||||||
|
if (!jreader.parse(func_args.c_str(), jsRoot)) {
|
||||||
|
_create_json_ret(buf, TPE_JSON_FORMAT);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if (!jsRoot["action"].isNumeric()) {
|
||||||
|
// _create_json_ret(buf, TPE_PARAM);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// int action = jsRoot["action"].asUInt();
|
||||||
|
|
||||||
|
AppDelegate_select_app(g_app);
|
||||||
|
_create_json_ret(buf, TPE_FAILED);
|
||||||
|
|
||||||
|
// if (ret) {
|
||||||
|
// if (action == 1 || action == 2 || action == 3) {
|
||||||
|
// 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);
|
||||||
|
//
|
||||||
|
// return;
|
||||||
|
// } else {
|
||||||
|
// _create_json_ret(buf, TPE_OK);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// } else {
|
||||||
|
// _create_json_ret(buf, TPE_DATA);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void TsHttpRpc::_rpc_func_get_version(const ex_astr& func_args, ex_astr& buf)
|
void TsHttpRpc::_rpc_func_get_version(const ex_astr& func_args, ex_astr& buf)
|
||||||
|
|
|
@ -14,28 +14,37 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
//=================================================================
|
//=================================================================
|
||||||
接口使用说明:
|
|
||||||
|
|
||||||
本程序启动后,监听 127.0.0.1:50022,接收http请求,请求格式要求如下:
|
# HTTP-RPC-INTERFACE:
|
||||||
|
|
||||||
GET 方式
|
listen on http://localhost:50022 and https://localhost:50023.
|
||||||
http://127.0.0.1:50022/method/json_param
|
|
||||||
其中json_param是使用url_encode进行编码后的json格式字符串
|
|
||||||
|
|
||||||
POST 方式
|
----------------
|
||||||
http://127.0.0.1:50022/method
|
GET method:
|
||||||
post的数据区域是json_param
|
http://127.0.0.1:50022/method/json_param
|
||||||
|
|
||||||
其中,URI分为三个部分:
|
here `json_param` is string in json format and encoded by url_encode().
|
||||||
method 请求执行的任务方法。
|
|
||||||
json_param 此任务方法的附加参数,如果没有附加参数,这部分可以省略。
|
|
||||||
|
|
||||||
返回格式:执行结束后,返回一个json格式的字符串给请求者,格式如下:
|
----------------
|
||||||
|
POST method
|
||||||
|
http://127.0.0.1:50022/method
|
||||||
|
|
||||||
{"code":0,"data":varb}
|
here the data field of POST should be json_param.
|
||||||
|
|
||||||
其中,code是必有的,其值是一个错误编码,0表示成功。如果失败,则可能没有data域。操作成功时,data域就是
|
|
||||||
操作的返回数据,其格式根据具体执行的任务方法不同而不同。
|
## URI detail:
|
||||||
|
|
||||||
|
- method the method to request to execute.
|
||||||
|
- json_param param of the method and it is optional.
|
||||||
|
|
||||||
|
## RESULT
|
||||||
|
|
||||||
|
A string in json format should returned with following format:
|
||||||
|
|
||||||
|
{"code":0,"data":varb}
|
||||||
|
|
||||||
|
`code` field always exists and 0 means success.
|
||||||
|
`data` field is optional.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -50,7 +59,8 @@ public:
|
||||||
TsHttpRpc();
|
TsHttpRpc();
|
||||||
~TsHttpRpc();
|
~TsHttpRpc();
|
||||||
|
|
||||||
bool init(const char* ip, int port);
|
bool init_http();
|
||||||
|
bool init_https();
|
||||||
|
|
||||||
ex_astr get_content_type(ex_astr file_suffix)
|
ex_astr get_content_type(ex_astr file_suffix)
|
||||||
{
|
{
|
||||||
|
@ -67,7 +77,10 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void _thread_loop(void);
|
void _thread_loop(void);
|
||||||
void _set_stop_flag(void);
|
// void _set_stop_flag(void);
|
||||||
|
// void _on_stop();
|
||||||
|
|
||||||
|
bool _on_init();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _parse_request(struct http_message* req, ex_astr& func_cmd, ex_astr& func_args);
|
int _parse_request(struct http_message* req, ex_astr& func_cmd, ex_astr& func_args);
|
||||||
|
|
|
@ -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.1.0"
|
#define TP_ASSIST_VER L"3.2.0"
|
||||||
|
|
||||||
#endif // __TS_ASSIST_VER_H__
|
#endif // __TS_ASSIST_VER_H__
|
||||||
|
|
|
@ -1,15 +1,2 @@
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Version"; ObjectID = "6fl-Xm-UPS"; */
|
|
||||||
"6fl-Xm-UPS.title" = "Version";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Copyright"; ObjectID = "Cmu-CQ-3V9"; */
|
|
||||||
"Cmu-CQ-3V9.title" = "Copyright";
|
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "Window"; ObjectID = "F0z-JX-Cv5"; */
|
|
||||||
"F0z-JX-Cv5.title" = "Window";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Program Name and Tag Line"; ObjectID = "tb3-eK-HAT"; */
|
|
||||||
"tb3-eK-HAT.title" = "Teleport Assistor for MacOS";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "Homepage"; ObjectID = "uUM-88-32s"; */
|
/* Class = "NSButtonCell"; title = "Homepage"; ObjectID = "uUM-88-32s"; */
|
||||||
"uUM-88-32s.title" = "Visit TELEPORT Website";
|
"uUM-88-32s.title" = "Visit Teleport Website";
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"136.title" = "Quit TPAssist";
|
"136.title" = "Quit TPAssist";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "About"; ObjectID = "638"; */
|
/* Class = "NSMenuItem"; title = "About"; ObjectID = "638"; */
|
||||||
"638.title" = "About";
|
"638.title" = "About Teleport Assist";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "644"; */
|
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "644"; */
|
||||||
"644.title" = "Quit";
|
"644.title" = "Quit";
|
||||||
|
@ -23,11 +23,4 @@
|
||||||
/* Class = "NSMenuItem"; title = "Settings"; ObjectID = "646"; */
|
/* Class = "NSMenuItem"; title = "Settings"; ObjectID = "646"; */
|
||||||
"646.title" = "Settings";
|
"646.title" = "Settings";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "Settings"; ObjectID = "647"; */
|
"pkv-BD-W9b.title" = "Visit Teleport Website";
|
||||||
"647.title" = "Settings";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "648"; */
|
|
||||||
"648.title" = "Edit";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "649"; */
|
|
||||||
"649.title" = "Quit";
|
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
{
|
|
||||||
"term": {
|
|
||||||
"selected": "Terminal",
|
|
||||||
"available": [
|
|
||||||
{
|
|
||||||
"name":"Terminal",
|
|
||||||
"display": "终端(系统自带)",
|
|
||||||
"app": "Terminal.app",
|
|
||||||
"profile": "Basic"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "iTerm2",
|
|
||||||
"display": "iTerm2",
|
|
||||||
"app": "iTerm2.app",
|
|
||||||
"profile": "Default"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
|
|
||||||
"rdp": {
|
|
||||||
"selected": "FreeRDP",
|
|
||||||
"available": [
|
|
||||||
{
|
|
||||||
"name": "FreeRDP",
|
|
||||||
"display": "FreeRDP",
|
|
||||||
"app": ""
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
After Width: | Height: | Size: 8.1 KiB |
|
@ -1,15 +1,2 @@
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Version"; ObjectID = "6fl-Xm-UPS"; */
|
|
||||||
"6fl-Xm-UPS.title" = "Version";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Copyright"; ObjectID = "Cmu-CQ-3V9"; */
|
|
||||||
"Cmu-CQ-3V9.title" = "Copyright";
|
|
||||||
|
|
||||||
/* Class = "NSWindow"; title = "Window"; ObjectID = "F0z-JX-Cv5"; */
|
|
||||||
"F0z-JX-Cv5.title" = "Window";
|
|
||||||
|
|
||||||
/* Class = "NSTextFieldCell"; title = "Program Name and Tag Line"; ObjectID = "tb3-eK-HAT"; */
|
|
||||||
"tb3-eK-HAT.title" = "Teleport助手 for MacOS";
|
|
||||||
|
|
||||||
/* Class = "NSButtonCell"; title = "官方网站"; ObjectID = "uUM-88-32s"; */
|
/* Class = "NSButtonCell"; title = "官方网站"; ObjectID = "uUM-88-32s"; */
|
||||||
"uUM-88-32s.title" = "访问TELEPORT官方网站";
|
"uUM-88-32s.title" = "访问 Teleport 网站";
|
||||||
|
|
|
@ -7,9 +7,13 @@
|
||||||
|
|
||||||
/* NSLocalizedString(@"",nil)*/
|
/* NSLocalizedString(@"",nil)*/
|
||||||
|
|
||||||
"About " = "关于 ";
|
"app_name" = "Teleport助手";
|
||||||
//"Version: " = "版本:";
|
|
||||||
"Teleport Assist" = "Teleport 助手 - macOS";
|
|
||||||
|
|
||||||
"Quit" = "退出";
|
//=============================================
|
||||||
//"Continue" = "继续";
|
// for About Window
|
||||||
|
//=============================================
|
||||||
|
"about " = "关于 ";
|
||||||
|
"version" = "版本:";
|
||||||
|
"app_full_name" = "Teleport助手 - macOS";
|
||||||
|
"copyright" = "© 2017~2018 TP4A,保留所有权利。";
|
||||||
|
"visit_tp4a_website" = "访问 Teleport 网站";
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
"136.title" = "退出 TPAssist";
|
"136.title" = "退出 TPAssist";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "关于"; ObjectID = "638"; */
|
/* Class = "NSMenuItem"; title = "关于"; ObjectID = "638"; */
|
||||||
"638.title" = "关于";
|
"638.title" = "关于Teleport助手";
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "退出"; ObjectID = "644"; */
|
/* Class = "NSMenuItem"; title = "退出"; ObjectID = "644"; */
|
||||||
"644.title" = "退出";
|
"644.title" = "退出";
|
||||||
|
@ -23,11 +23,4 @@
|
||||||
/* Class = "NSMenuItem"; title = "设置"; ObjectID = "646"; */
|
/* Class = "NSMenuItem"; title = "设置"; ObjectID = "646"; */
|
||||||
"646.title" = "设置";
|
"646.title" = "设置";
|
||||||
|
|
||||||
/* Class = "NSMenu"; title = "设置"; ObjectID = "647"; */
|
"pkv-BD-W9b.title" = "访问Teleport网站";
|
||||||
"647.title" = "设置";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "编辑"; ObjectID = "648"; */
|
|
||||||
"648.title" = "编辑";
|
|
||||||
|
|
||||||
/* Class = "NSMenuItem"; title = "Quit"; ObjectID = "649"; */
|
|
||||||
"649.title" = "Quit";
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
[common]
|
|
||||||
client_list=other
|
|
||||||
current_client=winscp
|
|
||||||
[other]
|
|
||||||
alias_name=自定义
|
|
||||||
command_line=
|
|
||||||
desc=desc
|
|
||||||
name=other
|
|
||||||
path=
|
|
|
@ -1,21 +0,0 @@
|
||||||
[common]
|
|
||||||
client_list=securecrt,xshell,other
|
|
||||||
current_client=putty
|
|
||||||
[other]
|
|
||||||
alias_name=自定义
|
|
||||||
command_line=
|
|
||||||
desc=desc
|
|
||||||
name=other
|
|
||||||
path=
|
|
||||||
[securecrt]
|
|
||||||
alias_name=SecureCRT
|
|
||||||
command_line=/T /N "TP#ssh://{real_ip}" /SSH2 /P {host_port} /PASSWORD **** {user_name}@{host_ip}
|
|
||||||
desc=SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。
|
|
||||||
name=securecrt
|
|
||||||
path=
|
|
||||||
[xshell]
|
|
||||||
alias_name=Xshell
|
|
||||||
command_line=-newtab "TP#ssh://{real_ip}" -url ssh://{user_name}:****@{host_ip}:{host_port}
|
|
||||||
desc=Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。
|
|
||||||
name=xshell
|
|
||||||
path=
|
|
|
@ -1,15 +0,0 @@
|
||||||
[common]
|
|
||||||
client_list=securecrt,other
|
|
||||||
current_client=putty
|
|
||||||
[other]
|
|
||||||
alias_name=自定义
|
|
||||||
command_line=
|
|
||||||
desc=
|
|
||||||
name=other
|
|
||||||
path=
|
|
||||||
[securecrt]
|
|
||||||
alias_name=SecureCRT
|
|
||||||
command_line=/T /N "TP#telnet://{real_ip}" /ARG {user_name} /SCRIPT "{assist_tools_path}\securecrt-telnet.vbs" /TELNET {host_ip} {host_port}
|
|
||||||
desc=SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件。
|
|
||||||
name=securecrt
|
|
||||||
path=
|
|
|
@ -18,7 +18,7 @@
|
||||||
|
|
||||||
extern HINSTANCE g_hInstance;
|
extern HINSTANCE g_hInstance;
|
||||||
|
|
||||||
HWND g_hDlgMain = NULL;
|
HWND g_hDlgMain = nullptr;
|
||||||
static DWORD g_dwTaskbarRecreateMessage = 0;
|
static DWORD g_dwTaskbarRecreateMessage = 0;
|
||||||
static BOOL g_IsTrayIconShowed = FALSE;
|
static BOOL g_IsTrayIconShowed = FALSE;
|
||||||
|
|
||||||
|
@ -90,19 +90,13 @@ INT_PTR CALLBACK eomDlgMainProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARA
|
||||||
|
|
||||||
case IDM_OPEN_WEB:
|
case IDM_OPEN_WEB:
|
||||||
{
|
{
|
||||||
ShellExecute(NULL, _T("open"), TS_WEB_URL, NULL, NULL, SW_SHOW);
|
ShellExecute(nullptr, _T("open"), TS_WEB_URL, nullptr, nullptr, SW_SHOW);
|
||||||
return TRUE;
|
|
||||||
}break;
|
|
||||||
|
|
||||||
case IDM_OPEN_BBS:
|
|
||||||
{
|
|
||||||
ShellExecute(NULL, _T("open"), TS_BBS_URL, NULL, NULL, SW_SHOW);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
case IDM_OPEN_CONFIG:
|
case IDM_OPEN_CONFIG:
|
||||||
{
|
{
|
||||||
ShellExecute(NULL, _T("open"), _T("http://127.0.0.1:50022/config"), NULL, NULL, SW_SHOW);
|
ShellExecute(nullptr, _T("open"), _T("http://localhost:50022/config"), nullptr, nullptr, SW_SHOW);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}break;
|
}break;
|
||||||
|
|
||||||
|
@ -129,7 +123,7 @@ INT_PTR CALLBACK eomDlgMainProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARA
|
||||||
HMENU hPopup = GetSubMenu(hMenu, 0);
|
HMENU hPopup = GetSubMenu(hMenu, 0);
|
||||||
SetMenuDefaultItem(hPopup, IDM_ABOUT, FALSE);
|
SetMenuDefaultItem(hPopup, IDM_ABOUT, FALSE);
|
||||||
|
|
||||||
TrackPopupMenu(hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwndDlg, NULL);
|
TrackPopupMenu(hPopup, TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hwndDlg, nullptr);
|
||||||
DestroyMenu(hMenu);
|
DestroyMenu(hMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -216,7 +210,7 @@ void center_window(HWND hwndDlg)
|
||||||
rc.top = (cyScreen - (rc.bottom - rc.top)) / 3;
|
rc.top = (cyScreen - (rc.bottom - rc.top)) / 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
SetWindowPos(hwndDlg, NULL, rc.left, rc.top, 0, 0, SWP_NOSIZE);
|
SetWindowPos(hwndDlg, nullptr, rc.left, rc.top, 0, 0, SWP_NOSIZE);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 359 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 3.2 KiB |
|
@ -4,220 +4,223 @@
|
||||||
<!--[if !IE]><!-->
|
<!--[if !IE]><!-->
|
||||||
<html lang="zh_CN">
|
<html lang="zh_CN">
|
||||||
<!--<![endif]-->
|
<!--<![endif]-->
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8"/>
|
<meta charset="utf-8" />
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
<title>TELEPORT助手配置</title>
|
<title>TELEPORT助手配置</title>
|
||||||
<link rel="shortcut icon" href="favicon.png">
|
<link rel="shortcut icon" href="favicon.png">
|
||||||
|
|
||||||
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
|
<link href="plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
|
||||||
<link href="plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet">
|
<link href="plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet">
|
||||||
<link href="plugins/gritter/css/jquery.gritter.css" rel="stylesheet">
|
<link href="plugins/gritter/css/jquery.gritter.css" rel="stylesheet">
|
||||||
|
|
||||||
<link href="css/style.css" rel="stylesheet" type="text/css"/>
|
<link href="css/style.css" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport 助手本地配置</span>
|
<span class="title"><i class="fa fa-cog fa-fw"></i> Teleport 助手本地配置</span>
|
||||||
<span class="sub-title" id="version"></span>
|
<span class="sub-title" id="version"></span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="header-fix"></div>
|
||||||
<div class="header-fix"></div>
|
|
||||||
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<p><a href="http://teleport.eomsoft.net/" target="_blank">TELEPORT</a> | ©2015 - 2018,保留所有权利。</p>
|
<p><a href="https://tp4a.com/" target="_blank">TELEPORT</a> | ©2015 - 2018,保留所有权利。</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
|
|
||||||
<div class="content">
|
<div class="content">
|
||||||
|
|
||||||
<div class="arg-detail arg-detail-common">
|
<div class="arg-detail arg-detail-common">
|
||||||
<p><strong>此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</strong></p>
|
<p><strong>此处配置保存到本地计算机上,如果更换计算机,需要重新配置!</strong></p>
|
||||||
<span><strong>注意:</strong>命令行参数设置中,可以用以下变量替换(注意大小写!):</span>
|
<span><strong>注意:</strong>命令行参数设置中,可以用以下变量替换(注意大小写!):</span>
|
||||||
<ul>
|
<ul>
|
||||||
<li><span class="arg-varb">{host_ip}</span> 替换主机IP地址</li>
|
<li><span class="arg-varb">{host_ip}</span> 替换主机IP地址</li>
|
||||||
<li><span class="arg-varb">{host_port}</span> 替换主机端口号</li>
|
<li><span class="arg-varb">{host_port}</span> 替换主机端口号</li>
|
||||||
<li><span class="arg-varb">{user_name}</span> 替换用户名</li>
|
<li><span class="arg-varb">{user_name}</span> 替换用户名</li>
|
||||||
<li><span class="arg-varb">{real_ip}</span> 替换为远程主机真实IP(仅用于显示,例如客户端的窗口标题或标签页标题等)</li>
|
<li><span class="arg-varb">{real_ip}</span> 替换为远程主机真实IP(仅用于显示,例如客户端的窗口标题或标签页标题等)</li>
|
||||||
<li><span class="arg-varb">{assist_tools_path}</span> 替换为助手工具所在的tools目录的绝对路径</li>
|
<li><span class="arg-varb">{assist_tools_path}</span> 替换为助手工具所在的tools目录的绝对路径</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
<p class="cfg-title">本地 SSH 客户端配置</p>
|
|
||||||
|
|
||||||
<div class="form-horizontal">
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<select id="ssh-type" class="form-control"></select>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
<hr/>
|
||||||
<div class="col-sm-9">
|
<p class="cfg-title">本地 SSH 客户端配置</p>
|
||||||
<div class="input-group">
|
|
||||||
<input id="ssh-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
<div class="form-horizontal">
|
||||||
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="ssh-select-app">选择...</button></span>
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select id="ssh-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group">
|
||||||
|
<input id="ssh-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
||||||
|
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="ssh-select-app">选择...</button></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="ssh-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="ssh-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="ssh-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
<hr/>
|
||||||
<div class="col-sm-9">
|
<p class="cfg-title">本地 SFTP 客户端配置</p>
|
||||||
<input id="ssh-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数"/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<div class="form-horizontal">
|
||||||
<p class="cfg-title">本地 SFTP 客户端配置</p>
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="scp-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
<div class="form-horizontal">
|
<select id="scp-type" class="form-control"></select>
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="scp-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<select id="scp-type" class="form-control"></select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="scp-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<div class="input-group">
|
|
||||||
<input id="scp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
|
||||||
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="scp-select-app">选择...</button></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
<div class="form-group form-group-sm">
|
||||||
<label for="scp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
<label for="scp-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input id="scp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数"/>
|
<div class="input-group">
|
||||||
</div>
|
<input id="scp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
||||||
</div>
|
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="scp-select-app">选择...</button></span>
|
||||||
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
<p class="cfg-title">本地 TELNET 客户端配置</p>
|
|
||||||
|
|
||||||
<div class="form-horizontal">
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="telnet-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
|
||||||
<div class="col-sm-4">
|
|
||||||
<select id="telnet-type" class="form-control"></select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="telnet-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
|
||||||
<div class="col-sm-9">
|
|
||||||
<div class="input-group">
|
|
||||||
<input id="telnet-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
|
||||||
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="telnet-select-app">选择...</button></span>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
<div class="form-group form-group-sm">
|
||||||
<label for="telnet-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
<label for="scp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<input id="telnet-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数"/>
|
<input id="scp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
<hr/>
|
||||||
|
<p class="cfg-title">本地 TELNET 客户端配置</p>
|
||||||
|
|
||||||
|
<div class="form-horizontal">
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="telnet-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
|
<div class="col-sm-4">
|
||||||
|
<select id="telnet-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="telnet-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<div class="input-group">
|
||||||
|
<input id="telnet-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
||||||
|
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="telnet-select-app">选择...</button></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="telnet-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="telnet-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
<hr/>
|
||||||
<p class="cfg-title">本地 RDP 客户端配置</p>
|
<p class="cfg-title">本地 RDP 客户端配置</p>
|
||||||
|
|
||||||
<!--<div class="arg-detail arg-detail-common">-->
|
<!--<div class="arg-detail arg-detail-common">-->
|
||||||
<!--RDP专用命令行参数:-->
|
<!--RDP专用命令行参数:-->
|
||||||
<!--<ul>-->
|
<!--<ul>-->
|
||||||
<!--<li><span class="arg-varb">{tmp_rdp_file}</span> 替换为助手工具生成的临时配置文件(.rdp)的绝对路径,用于支持按.rdp配置文件进行连接的RDP客户端</li>-->
|
<!--<li><span class="arg-varb">{tmp_rdp_file}</span> 替换为助手工具生成的临时配置文件(.rdp)的绝对路径,用于支持按.rdp配置文件进行连接的RDP客户端</li>-->
|
||||||
<!--<li><span class="arg-varb">{size}</span> [仅FreeRDP] 替换为屏幕尺寸</li>-->
|
<!--<li><span class="arg-varb">{size}</span> [仅FreeRDP] 替换为屏幕尺寸</li>-->
|
||||||
<!--<li><span class="arg-varb">{console}</span> [仅FreeRDP] 替换为是否以Console模式连接</li>-->
|
<!--<li><span class="arg-varb">{console}</span> [仅FreeRDP] 替换为是否以Console模式连接</li>-->
|
||||||
<!--<li><span class="arg-varb">{clipboard}</span> [仅FreeRDP] 替换为是否允许剪贴板</li>-->
|
<!--<li><span class="arg-varb">{clipboard}</span> [仅FreeRDP] 替换为是否允许剪贴板</li>-->
|
||||||
<!--<li><span class="arg-varb">{drives}</span> [仅FreeRDP] 替换为是否允许映射本地磁盘</li>-->
|
<!--<li><span class="arg-varb">{drives}</span> [仅FreeRDP] 替换为是否允许映射本地磁盘</li>-->
|
||||||
<!--</ul>-->
|
<!--</ul>-->
|
||||||
<!--</div>-->
|
<!--</div>-->
|
||||||
|
|
||||||
|
|
||||||
<div class="form-horizontal">
|
<div class="form-horizontal">
|
||||||
<div class="form-group form-group-sm">
|
<div class="form-group form-group-sm">
|
||||||
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
<label for="ssh-type" class="col-sm-2 control-label"><strong>客户端:</strong></label>
|
||||||
<div class="col-sm-4">
|
<div class="col-sm-4">
|
||||||
<select id="rdp-type" class="form-control"></select>
|
<select id="rdp-type" class="form-control"></select>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
<div class="form-group form-group-sm">
|
||||||
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
<label for="ssh-app" class="col-sm-2 control-label"><strong>程序路径:</strong></label>
|
||||||
<div class="col-sm-9">
|
<div class="col-sm-9">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<input id="rdp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
<input id="rdp-app" type="text" class="form-control input-args" placeholder="客户端可执行程序文件路径" readonly="readonly">
|
||||||
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="rdp-select-app">选择...</button></span>
|
<span class="input-group-btn"><button class="btn btn-sm btn-primary" type="button" id="rdp-select-app">选择...</button></span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group form-group-sm">
|
||||||
|
<label for="rdp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
||||||
|
<div class="col-sm-9">
|
||||||
|
<input id="rdp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<label for="rdp-cmdline" class="col-sm-2 control-label"><strong>命令参数:</strong></label>
|
<hr/>
|
||||||
<div class="col-sm-9">
|
<div class="form-horizontal">
|
||||||
<input id="rdp-cmdline" type="text" class="form-control input-args" placeholder="客户端启动所需命令行参数"/>
|
<div class="form-group form-group-sm">
|
||||||
|
<div class="col-sm-2"></div>
|
||||||
|
<div class="col-sm-6">
|
||||||
|
<a id="btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置!</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<hr/>
|
|
||||||
<div class="form-horizontal">
|
|
||||||
<div class="form-group form-group-sm">
|
|
||||||
<div class="col-sm-2"></div>
|
|
||||||
<div class="col-sm-6">
|
|
||||||
<a id="btn-save" class="btn btn-primary" href="javascript:;"><i class="fa fa-check fa-fw"></i> 保存设置!</a>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
<script type="text/javascript" src="plugins/underscore/underscore-min.js"></script>
|
||||||
<script type="text/javascript" src="plugins/underscore/underscore-min.js"></script>
|
<script type="text/javascript" src="plugins/jquery/jquery.min.js"></script>
|
||||||
<script type="text/javascript" src="plugins/jquery/jquery.min.js"></script>
|
<script type="text/javascript" src="plugins/bootstrap/js/bootstrap.min.js"></script>
|
||||||
<script type="text/javascript" src="plugins/bootstrap/js/bootstrap.min.js"></script>
|
<!--[if lt IE 9]>
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="plugins/html5shiv/html5shiv.min.js"></script>
|
<script src="plugins/html5shiv/html5shiv.min.js"></script>
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<!--<script type="text/javascript" src="js/json2.js"></script>-->
|
<!--<script type="text/javascript" src="js/json2.js"></script>-->
|
||||||
|
|
||||||
<script type="text/javascript" src="plugins/gritter/js/jquery.gritter.js"></script>
|
<script type="text/javascript" src="plugins/gritter/js/jquery.gritter.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="plugins/keypress/keypress.min.js"></script>
|
<script type="text/javascript" src="plugins/keypress/keypress.min.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript" src="js/config.js"></script>
|
<script type="text/javascript" src="js/config.js"></script>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
||||||
</html>
|
</html>
|
|
@ -1,6 +1,6 @@
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
var g_url_base = 'http://127.0.0.1:50022';
|
var g_url_base = 'http://localhost:50022';
|
||||||
|
|
||||||
var g_cfg = null;
|
var g_cfg = null;
|
||||||
|
|
||||||
|
|
|
@ -22,210 +22,224 @@ static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
void failed(const char* msg);
|
void failed(const char* msg);
|
||||||
void failed(const wchar_t* msg);
|
void failed(const wchar_t* msg);
|
||||||
|
|
||||||
static HANDLE g_SingleInstanceMutexHandle = NULL;
|
static HANDLE g_SingleInstanceMutexHandle=NULL;
|
||||||
|
|
||||||
HINSTANCE g_hInstance = NULL;
|
HINSTANCE g_hInstance=NULL;
|
||||||
ULONG g_ulSingleInstanceMsgId = 0;
|
ULONG g_ulSingleInstanceMsgId=0;
|
||||||
static TCHAR szKernalName[MAX_PATH] = { 0 };
|
static TCHAR szKernalName[MAX_PATH]={ 0 };
|
||||||
|
|
||||||
HWND g_hwndBase = NULL;
|
HWND g_hwndBase=NULL;
|
||||||
int g_argc = 0;
|
int g_argc=0;
|
||||||
wchar_t** g_argv = NULL;
|
wchar_t** g_argv=NULL;
|
||||||
|
|
||||||
#define EOM_ASSIST_GUID _T("A6EFE1250C5F4416BFA819FE92CBD4B4")
|
#define EOM_ASSIST_GUID _T("A6EFE1250C5F4416BFA819FE92CBD4B4")
|
||||||
#define EOM_ASSIST_INSTANCE _T("TS_ASSIST_SINGLE_INSTANCE")
|
#define EOM_ASSIST_INSTANCE _T("TS_ASSIST_SINGLE_INSTANCE")
|
||||||
#define EOM_ASSIST_WIN_CLASS _T("TS_ASSIST_WINDOW_CLASS")
|
#define EOM_ASSIST_WIN_CLASS _T("TS_ASSIST_WINDOW_CLASS")
|
||||||
#define MAKEDWORD(low, high) ((DWORD)(((WORD)(((DWORD_PTR)(low)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(high)) & 0xffff))) << 16))
|
#define MAKEDWORD(low, high) ((DWORD)(((WORD)(((DWORD_PTR)(low)) & 0xffff)) | ((DWORD)((WORD)(((DWORD_PTR)(high)) & 0xffff))) << 16))
|
||||||
|
|
||||||
DWORD WINAPI ThreadProc(LPVOID lpParam)
|
DWORD WINAPI HttpServerThreadProc(LPVOID lpParam) {
|
||||||
{
|
http_rpc_main_loop(false);
|
||||||
http_rpc_main_loop();
|
return 0;
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd)
|
DWORD WINAPI HttpsServerThreadProc(LPVOID lpParam) {
|
||||||
{
|
http_rpc_main_loop(true);
|
||||||
EXLOG_USE_LOGGER(&g_ex_logger);
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
WORD wVersionRequested;
|
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) {
|
||||||
WSADATA wsaData;
|
EXLOG_USE_LOGGER(&g_ex_logger);
|
||||||
int err;
|
|
||||||
|
|
||||||
wVersionRequested = MAKEWORD(1, 1);
|
WORD wVersionRequested;
|
||||||
|
WSADATA wsaData;
|
||||||
|
int err;
|
||||||
|
|
||||||
err = WSAStartup(wVersionRequested, &wsaData);
|
wVersionRequested=MAKEWORD(1, 1);
|
||||||
if (err != 0) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LOBYTE(wsaData.wVersion) != 1 ||
|
err=WSAStartup(wVersionRequested, &wsaData);
|
||||||
HIBYTE(wsaData.wVersion) != 1) {
|
if (err != 0) {
|
||||||
WSACleanup();
|
return 0;
|
||||||
return 0;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
g_env.init();
|
if (LOBYTE(wsaData.wVersion) != 1 ||
|
||||||
|
HIBYTE(wsaData.wVersion) != 1) {
|
||||||
|
WSACleanup();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_env.init();
|
||||||
|
|
||||||
#ifdef EX_DEBUG
|
#ifdef EX_DEBUG
|
||||||
EXLOG_LEVEL(EX_LOG_LEVEL_DEBUG);
|
EXLOG_LEVEL(EX_LOG_LEVEL_DEBUG);
|
||||||
#else
|
#else
|
||||||
EXLOG_LEVEL(EX_LOG_LEVEL_INFO);
|
EXLOG_LEVEL(EX_LOG_LEVEL_INFO);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
EXLOG_FILE(L"tp_assist.log", g_env.m_log_path.c_str(), EX_LOG_FILE_MAX_SIZE, EX_LOG_FILE_MAX_COUNT);
|
EXLOG_FILE(L"tp_assist.log", g_env.m_log_path.c_str(), EX_LOG_FILE_MAX_SIZE, EX_LOG_FILE_MAX_COUNT);
|
||||||
|
|
||||||
// g_cfgSSH.init();
|
// g_cfgSSH.init();
|
||||||
// g_cfgScp.init();
|
// g_cfgScp.init();
|
||||||
// g_cfgTelnet.init();
|
// g_cfgTelnet.init();
|
||||||
g_cfg.init();
|
g_cfg.init();
|
||||||
|
|
||||||
g_hInstance = hInstance;
|
g_hInstance=hInstance;
|
||||||
_stprintf_s(szKernalName, MAX_PATH, _T("%s_%s"), EOM_ASSIST_GUID, EOM_ASSIST_INSTANCE);
|
_stprintf_s(szKernalName, MAX_PATH, _T("%s_%s"), EOM_ASSIST_GUID, EOM_ASSIST_INSTANCE);
|
||||||
g_ulSingleInstanceMsgId = RegisterWindowMessage(szKernalName);
|
g_ulSingleInstanceMsgId=RegisterWindowMessage(szKernalName);
|
||||||
if (0 == g_ulSingleInstanceMsgId)
|
if (0 == g_ulSingleInstanceMsgId)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
LPWSTR szCmdLine = (LPWSTR)::GetCommandLineW(); //获取命令行参数;
|
LPWSTR szCmdLine=(LPWSTR)::GetCommandLineW(); //获取命令行参数;
|
||||||
g_argv = CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串;
|
g_argv=CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串;
|
||||||
|
std::wstring arg;
|
||||||
|
for (int i=0; i < g_argc; ++i) {
|
||||||
|
arg = g_argv[i];
|
||||||
|
if (0 == lstrcmp(g_argv[i], _T("--stop"))) {
|
||||||
|
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_INSTANCE_EXIT, 0);
|
||||||
|
LocalFree(g_argv);
|
||||||
|
g_argv=NULL;
|
||||||
|
return -1;
|
||||||
|
}else if (arg.find(L"teleport_ip",0) !=std::wstring::npos && arg.find(L"teleport_port") != std::wstring::npos && arg.find(L"remote_host_ip") != std::wstring::npos && arg.find(L"session_id") != std::wstring::npos) {
|
||||||
|
//把wchar_t **转换为std::string
|
||||||
|
size_t len = wcslen(g_argv[i]) + 1;
|
||||||
|
size_t converted = 0;
|
||||||
|
char *CStr;
|
||||||
|
CStr = (char*)malloc(len * sizeof(char));
|
||||||
|
wcstombs_s(&converted, CStr, len, g_argv[i], _TRUNCATE);
|
||||||
|
std::string func_args = CStr;
|
||||||
|
|
||||||
for (int i = 0; i < g_argc; ++i)
|
//调用TsHttpRpc类里的_rpc_func_run_client启动客户端
|
||||||
{
|
TsHttpRpc ts_http_rpc;
|
||||||
if(0 == lstrcmp(g_argv[i], _T("--stop")))
|
ex_astr buf;
|
||||||
{
|
ts_http_rpc._rpc_func_url_protocol(func_args, buf);
|
||||||
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_INSTANCE_EXIT, 0);
|
|
||||||
|
free(CStr);
|
||||||
LocalFree(g_argv);
|
LocalFree(g_argv);
|
||||||
g_argv = NULL;
|
g_argv = NULL;
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// make sure run single instance.
|
|
||||||
_stprintf_s(szKernalName, MAX_PATH, _T("%s_%s"), EOM_ASSIST_GUID, EOM_ASSIST_INSTANCE);
|
|
||||||
g_SingleInstanceMutexHandle = CreateMutex(NULL, FALSE, szKernalName);
|
|
||||||
if (GetLastError() == ERROR_ALREADY_EXISTS)
|
|
||||||
{
|
|
||||||
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_SHOW_EXIST_DLGUI, 0);
|
|
||||||
CloseHandle(g_SingleInstanceMutexHandle);
|
|
||||||
LocalFree(g_argv);
|
|
||||||
g_argv = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// create dialog-box window.
|
|
||||||
MyRegisterClass();
|
|
||||||
|
|
||||||
// Perform application initialization:
|
|
||||||
if (!InitInstance())
|
|
||||||
{
|
|
||||||
CloseHandle(g_SingleInstanceMutexHandle);
|
|
||||||
LocalFree(g_argv);
|
|
||||||
g_argv = NULL;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
HANDLE hThread = NULL;
|
|
||||||
DWORD dwThreadId;
|
|
||||||
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadId);
|
|
||||||
|
|
||||||
MSG msg;
|
|
||||||
while (GetMessage(&msg, NULL, 0, 0))
|
|
||||||
{
|
|
||||||
TranslateMessage(&msg);
|
|
||||||
DispatchMessage(&msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
http_rpc_stop();
|
|
||||||
WaitForSingleObject(hThread, INFINITE);
|
|
||||||
|
|
||||||
CloseHandle(g_SingleInstanceMutexHandle);
|
|
||||||
|
|
||||||
LocalFree(g_argv);
|
|
||||||
g_argv = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void failed(const char* msg)
|
|
||||||
{
|
|
||||||
OutputDebugStringA(msg);
|
|
||||||
}
|
|
||||||
void failed(const wchar_t* msg)
|
|
||||||
{
|
|
||||||
OutputDebugStringW(msg);
|
|
||||||
}
|
|
||||||
|
|
||||||
ATOM MyRegisterClass()
|
|
||||||
{
|
|
||||||
WNDCLASSEX wcex;
|
|
||||||
|
|
||||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
|
||||||
|
|
||||||
wcex.style = CS_HREDRAW | CS_VREDRAW;
|
|
||||||
wcex.lpfnWndProc = WndProc;
|
|
||||||
wcex.cbClsExtra = 0;
|
|
||||||
wcex.cbWndExtra = 0;
|
|
||||||
wcex.hInstance = g_hInstance;
|
|
||||||
wcex.hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_NORMAL_BIG));
|
|
||||||
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
||||||
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
|
|
||||||
wcex.lpszMenuName = MAKEINTRESOURCE(IDR_ASSIST);
|
|
||||||
wcex.lpszClassName = EOM_ASSIST_WIN_CLASS;
|
|
||||||
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_NORMAL_SMALL));
|
|
||||||
|
|
||||||
return RegisterClassEx(&wcex);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL InitInstance(void)
|
|
||||||
{
|
|
||||||
g_hwndBase = CreateWindow(EOM_ASSIST_WIN_CLASS, _T(""), WS_OVERLAPPEDWINDOW, 8, 0, 8, 0, NULL, NULL, g_hInstance, NULL);
|
|
||||||
if (!g_hwndBase)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
ShowWindow(g_hwndBase, SW_HIDE);
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|
||||||
{
|
|
||||||
if (g_ulSingleInstanceMsgId == message)
|
|
||||||
{
|
|
||||||
if (WMU_INSTANCE_EXIT == wParam)
|
|
||||||
{
|
|
||||||
PostMessage(g_hDlgMain, WM_COMMAND, MAKEDWORD(IDCANCEL, 0), NULL);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if (WMU_SHOW_EXIST_DLGUI == wParam)
|
}
|
||||||
{
|
|
||||||
ShowWindow(g_hDlgMain, SW_SHOW);
|
|
||||||
SetWindowPos(g_hDlgMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
||||||
SetActiveWindow(g_hDlgMain);
|
|
||||||
BringWindowToTop(g_hDlgMain);
|
|
||||||
SetWindowPos(g_hDlgMain, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (message)
|
// make sure run single instance.
|
||||||
{
|
_stprintf_s(szKernalName, MAX_PATH, _T("%s_%s"), EOM_ASSIST_GUID, EOM_ASSIST_INSTANCE);
|
||||||
case WM_CREATE:
|
g_SingleInstanceMutexHandle=CreateMutex(NULL, FALSE, szKernalName);
|
||||||
PostMessage(hWnd, WM_COMMAND, MAKEDWORD(IDM_MAIN, 0), NULL);
|
if (GetLastError() == ERROR_ALREADY_EXISTS) {
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_SHOW_EXIST_DLGUI, 0);
|
||||||
break;
|
CloseHandle(g_SingleInstanceMutexHandle);
|
||||||
case WM_COMMAND:
|
LocalFree(g_argv);
|
||||||
|
g_argv=NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (IDM_MAIN == LOWORD(wParam))
|
|
||||||
{
|
// create dialog-box window.
|
||||||
CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), hWnd, eomDlgMainProc);
|
MyRegisterClass();
|
||||||
ShowWindow(g_hDlgMain, SW_HIDE);
|
|
||||||
}
|
// Perform application initialization:
|
||||||
break;
|
if (!InitInstance()) {
|
||||||
case WM_DESTROY:
|
CloseHandle(g_SingleInstanceMutexHandle);
|
||||||
SendMessage(g_hDlgMain, WMU_DLG_MAIN_EXIT, NULL, NULL);
|
LocalFree(g_argv);
|
||||||
PostQuitMessage(0);
|
g_argv=NULL;
|
||||||
break;
|
return FALSE;
|
||||||
default:
|
}
|
||||||
return DefWindowProc(hWnd, message, wParam, lParam);
|
|
||||||
}
|
HANDLE hThreadHttpServer=NULL;
|
||||||
return 0;
|
DWORD dwThreadId=0;
|
||||||
|
hThreadHttpServer=CreateThread(NULL, 0, HttpServerThreadProc, NULL, 0, &dwThreadId);
|
||||||
|
|
||||||
|
HANDLE hThreadHttpsServer=NULL;
|
||||||
|
dwThreadId=0;
|
||||||
|
hThreadHttpsServer=CreateThread(NULL, 0, HttpsServerThreadProc, NULL, 0, &dwThreadId);
|
||||||
|
|
||||||
|
MSG msg;
|
||||||
|
while (GetMessage(&msg, NULL, 0, 0)) {
|
||||||
|
TranslateMessage(&msg);
|
||||||
|
DispatchMessage(&msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
http_rpc_stop(false);
|
||||||
|
WaitForSingleObject(hThreadHttpServer, INFINITE);
|
||||||
|
|
||||||
|
http_rpc_stop(true);
|
||||||
|
WaitForSingleObject(hThreadHttpsServer, INFINITE);
|
||||||
|
|
||||||
|
CloseHandle(g_SingleInstanceMutexHandle);
|
||||||
|
|
||||||
|
LocalFree(g_argv);
|
||||||
|
g_argv=NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void failed(const char* msg) {
|
||||||
|
OutputDebugStringA(msg);
|
||||||
|
}
|
||||||
|
void failed(const wchar_t* msg) {
|
||||||
|
OutputDebugStringW(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
ATOM MyRegisterClass() {
|
||||||
|
WNDCLASSEX wcex;
|
||||||
|
|
||||||
|
wcex.cbSize=sizeof(WNDCLASSEX);
|
||||||
|
|
||||||
|
wcex.style=CS_HREDRAW | CS_VREDRAW;
|
||||||
|
wcex.lpfnWndProc=WndProc;
|
||||||
|
wcex.cbClsExtra=0;
|
||||||
|
wcex.cbWndExtra=0;
|
||||||
|
wcex.hInstance=g_hInstance;
|
||||||
|
wcex.hIcon=LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_NORMAL_BIG));
|
||||||
|
wcex.hCursor=LoadCursor(NULL, IDC_ARROW);
|
||||||
|
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW + 1);
|
||||||
|
wcex.lpszMenuName=MAKEINTRESOURCE(IDR_ASSIST);
|
||||||
|
wcex.lpszClassName=EOM_ASSIST_WIN_CLASS;
|
||||||
|
wcex.hIconSm=LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_NORMAL_SMALL));
|
||||||
|
|
||||||
|
return RegisterClassEx(&wcex);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL InitInstance(void) {
|
||||||
|
g_hwndBase=CreateWindow(EOM_ASSIST_WIN_CLASS, _T(""), WS_OVERLAPPEDWINDOW, 8, 0, 8, 0, NULL, NULL, g_hInstance, NULL);
|
||||||
|
if (!g_hwndBase)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
ShowWindow(g_hwndBase, SW_HIDE);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
|
||||||
|
if (g_ulSingleInstanceMsgId == message) {
|
||||||
|
if (WMU_INSTANCE_EXIT == wParam) {
|
||||||
|
PostMessage(g_hDlgMain, WM_COMMAND, MAKEDWORD(IDCANCEL, 0), NULL);
|
||||||
|
return 0;
|
||||||
|
} else if (WMU_SHOW_EXIST_DLGUI == wParam) {
|
||||||
|
ShowWindow(g_hDlgMain, SW_SHOW);
|
||||||
|
SetWindowPos(g_hDlgMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
||||||
|
SetActiveWindow(g_hDlgMain);
|
||||||
|
BringWindowToTop(g_hDlgMain);
|
||||||
|
SetWindowPos(g_hDlgMain, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (message) {
|
||||||
|
case WM_CREATE:
|
||||||
|
PostMessage(hWnd, WM_COMMAND, MAKEDWORD(IDM_MAIN, 0), NULL);
|
||||||
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
|
break;
|
||||||
|
case WM_COMMAND:
|
||||||
|
|
||||||
|
if (IDM_MAIN == LOWORD(wParam)) {
|
||||||
|
CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), hWnd, eomDlgMainProc);
|
||||||
|
ShowWindow(g_hDlgMain, SW_HIDE);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case WM_DESTROY:
|
||||||
|
SendMessage(g_hDlgMain, WMU_DLG_MAIN_EXIT, NULL, NULL);
|
||||||
|
PostQuitMessage(0);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return DefWindowProc(hWnd, message, wParam, lParam);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,7 @@
|
||||||
<PrecompiledHeader>Use</PrecompiledHeader>
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
<WarningLevel>Level3</WarningLevel>
|
<WarningLevel>Level3</WarningLevel>
|
||||||
<Optimization>Disabled</Optimization>
|
<Optimization>Disabled</Optimization>
|
||||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;MG_ENABLE_SSL;_DEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
<Optimization>MaxSpeed</Optimization>
|
<Optimization>MaxSpeed</Optimization>
|
||||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
<PreprocessorDefinitions>WIN32;MG_ENABLE_SSL;NDEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
<SDLCheck>true</SDLCheck>
|
<SDLCheck>true</SDLCheck>
|
||||||
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
|
||||||
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
|
# Visual Studio 15
|
||||||
|
VisualStudioVersion = 15.0.28307.168
|
||||||
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "tp_assist", "tp_assist.vs2017.vcxproj", "{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}"
|
||||||
|
EndProject
|
||||||
|
Global
|
||||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
Debug|x86 = Debug|x86
|
||||||
|
Release|x86 = Release|x86
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
|
{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}.Debug|x86.ActiveCfg = Debug|Win32
|
||||||
|
{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}.Debug|x86.Build.0 = Debug|Win32
|
||||||
|
{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}.Release|x86.ActiveCfg = Release|Win32
|
||||||
|
{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}.Release|x86.Build.0 = Release|Win32
|
||||||
|
EndGlobalSection
|
||||||
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
|
HideSolutionNode = FALSE
|
||||||
|
EndGlobalSection
|
||||||
|
EndGlobal
|
|
@ -0,0 +1,185 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup Label="ProjectConfigurations">
|
||||||
|
<ProjectConfiguration Include="Debug|Win32">
|
||||||
|
<Configuration>Debug</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
<ProjectConfiguration Include="Release|Win32">
|
||||||
|
<Configuration>Release</Configuration>
|
||||||
|
<Platform>Win32</Platform>
|
||||||
|
</ProjectConfiguration>
|
||||||
|
</ItemGroup>
|
||||||
|
<PropertyGroup Label="Globals">
|
||||||
|
<ProjectGuid>{63B7A8F2-9722-487C-A92A-3DB5D8CA1473}</ProjectGuid>
|
||||||
|
<Keyword>Win32Proj</Keyword>
|
||||||
|
<RootNamespace>tp_assist</RootNamespace>
|
||||||
|
<ProjectName>tp_assist</ProjectName>
|
||||||
|
<WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>Application</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<PlatformToolset>v141</PlatformToolset>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>Unicode</CharacterSet>
|
||||||
|
<UseOfMfc>false</UseOfMfc>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||||
|
<ImportGroup Label="ExtensionSettings">
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||||
|
</ImportGroup>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<LinkIncremental>true</LinkIncremental>
|
||||||
|
<OutDir>..\..\out\client\$(PlatformTarget)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>..\..\out\_tmp_\$(ProjectName)\$(PlatformTarget)\$(Configuration)\</IntDir>
|
||||||
|
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
|
||||||
|
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<LinkIncremental>false</LinkIncremental>
|
||||||
|
<OutDir>..\..\out\client\$(PlatformTarget)\$(Configuration)\</OutDir>
|
||||||
|
<IntDir>..\..\out\_tmp_\$(ProjectName)\$(PlatformTarget)\$(Configuration)\</IntDir>
|
||||||
|
</PropertyGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<PreprocessorDefinitions>WIN32;MG_ENABLE_SSL;_DEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<AdditionalDependencies>..\..\external\openssl\out32\ssleay32.lib;..\..\external\openssl\out32\libeay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<PreprocessorDefinitions>WIN32;MG_ENABLE_SSL;NDEBUG;_WINDOWS;_WINSOCK_DEPRECATED_NO_WARNINGS;MG_ENABLE_THREADS;MG_DISABLE_HTTP_DIGEST_AUTH;MG_DISABLE_MQTT;MG_DISABLE_SSI;MG_DISABLE_FILESYSTEM;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||||
|
<SDLCheck>true</SDLCheck>
|
||||||
|
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||||
|
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<SubSystem>Windows</SubSystem>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
<AdditionalDependencies>..\..\external\openssl\out32\ssleay32.lib;..\..\external\openssl\out32\libeay32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_const.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_ini.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_log.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_path.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_platform.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_str.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_thread.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_types.h" />
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_util.h" />
|
||||||
|
<ClInclude Include="..\..\common\teleport\teleport_const.h" />
|
||||||
|
<ClInclude Include="..\..\external\mongoose\mongoose.h" />
|
||||||
|
<ClInclude Include="dlg_main.h" />
|
||||||
|
<ClInclude Include="msocketx.h" />
|
||||||
|
<ClInclude Include="Resource.h" />
|
||||||
|
<ClInclude Include="stdafx.h" />
|
||||||
|
<ClInclude Include="targetver.h" />
|
||||||
|
<ClInclude Include="tp_assist.h" />
|
||||||
|
<ClInclude Include="ts_cfg.h" />
|
||||||
|
<ClInclude Include="ts_const.h" />
|
||||||
|
<ClInclude Include="ts_env.h" />
|
||||||
|
<ClInclude Include="ts_http_rpc.h" />
|
||||||
|
<ClInclude Include="ts_network.h" />
|
||||||
|
<ClInclude Include="ts_ver.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_ini.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_log.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_path.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_str.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_thread.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_util.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_reader.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_value.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_writer.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\mongoose\mongoose.c">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="dlg_main.cpp" />
|
||||||
|
<ClCompile Include="msocketx.cpp" />
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
|
||||||
|
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="tp_assist.cpp" />
|
||||||
|
<ClCompile Include="ts_cfg.cpp" />
|
||||||
|
<ClCompile Include="ts_env.cpp" />
|
||||||
|
<ClCompile Include="ts_http_rpc.cpp" />
|
||||||
|
<ClCompile Include="ts_network.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="tp_assist.rc" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="res\tp.ico" />
|
||||||
|
<Image Include="res\tp_small.ico" />
|
||||||
|
<Image Include="res\tray_normal.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\..\external\jsoncpp\src\lib_json\json_valueiterator.inl" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
|
@ -0,0 +1,180 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="dlg_main.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="stdafx.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="tp_assist.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="ts_http_rpc.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="ts_network.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="msocketx.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="ts_env.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="ts_cfg.cpp">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_reader.cpp">
|
||||||
|
<Filter>jsoncpp</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_value.cpp">
|
||||||
|
<Filter>jsoncpp</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\jsoncpp\src\lib_json\json_writer.cpp">
|
||||||
|
<Filter>jsoncpp</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\external\mongoose\mongoose.c">
|
||||||
|
<Filter>mongoose</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_str.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_util.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_path.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_ini.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_log.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\common\libex\src\ex_thread.cpp">
|
||||||
|
<Filter>libex\src</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="Resource.h">
|
||||||
|
<Filter>resource</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="dlg_main.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="stdafx.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="targetver.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="tp_assist.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_http_rpc.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_network.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_env.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_cfg.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\external\mongoose\mongoose.h">
|
||||||
|
<Filter>mongoose</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="msocketx.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_const.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_path.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_platform.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_str.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_types.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_util.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_const.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="ts_ver.h">
|
||||||
|
<Filter>main app</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_ini.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_log.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\libex\include\ex\ex_thread.h">
|
||||||
|
<Filter>libex\header</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\common\teleport\teleport_const.h">
|
||||||
|
<Filter>teleport</Filter>
|
||||||
|
</ClInclude>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Image Include="res\tp.ico">
|
||||||
|
<Filter>resource</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\tp_small.ico">
|
||||||
|
<Filter>resource</Filter>
|
||||||
|
</Image>
|
||||||
|
<Image Include="res\tray_normal.ico">
|
||||||
|
<Filter>resource</Filter>
|
||||||
|
</Image>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Filter Include="resource">
|
||||||
|
<UniqueIdentifier>{52b425b1-8aa9-4e08-acbd-c88387350530}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="jsoncpp">
|
||||||
|
<UniqueIdentifier>{adabe93d-3938-4b11-9352-5b67a1efd7e3}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="mongoose">
|
||||||
|
<UniqueIdentifier>{35a345a0-6147-4c87-97c9-3b0b2a57e348}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="main app">
|
||||||
|
<UniqueIdentifier>{0942cec3-67df-4d19-bbc1-e962145e496f}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="libex">
|
||||||
|
<UniqueIdentifier>{a88e05d3-51f4-463f-84cc-c3bc86f07aac}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="libex\header">
|
||||||
|
<UniqueIdentifier>{e3e7a811-5905-4ad5-86a7-9721af5d015a}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="libex\src">
|
||||||
|
<UniqueIdentifier>{d7d49fa4-5192-42c5-bc70-5584d9d646c6}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
<Filter Include="teleport">
|
||||||
|
<UniqueIdentifier>{1291a5cf-cb08-4ad6-8a86-8a0486297c63}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ResourceCompile Include="tp_assist.rc">
|
||||||
|
<Filter>resource</Filter>
|
||||||
|
</ResourceCompile>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="..\..\external\jsoncpp\src\lib_json\json_valueiterator.inl">
|
||||||
|
<Filter>jsoncpp</Filter>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
</Project>
|
|
@ -105,7 +105,7 @@ bool TsCfg::_load(const ex_astr& str_json) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//===================================
|
//===================================
|
||||||
// check scp config
|
// check sftp config
|
||||||
//===================================
|
//===================================
|
||||||
|
|
||||||
if (!m_root["scp"].isObject()) {
|
if (!m_root["scp"].isObject()) {
|
||||||
|
|
|
@ -1,12 +1,10 @@
|
||||||
#ifndef __TS_CONST_H__
|
#ifndef __TS_CONST_H__
|
||||||
#define __TS_CONST_H__
|
#define __TS_CONST_H__
|
||||||
|
|
||||||
#define TS_WEB_URL L"http://teleport.eomsoft.net/"
|
#define TS_WEB_URL L"https://tp4a.com/"
|
||||||
#define TS_BBS_URL L"http://bbs.eomsoft.net/"
|
#define TS_TRAY_MSG L"Teleport助手正常工作中"
|
||||||
#define TS_TRAY_MSG L"Teleport助手正常工作中"
|
|
||||||
|
|
||||||
#define TS_HTTP_RPC_PORT 50022
|
#define TS_HTTP_RPC_PORT 50022
|
||||||
//#define TS_HTTP_RPC_HOST "127.0.0.1"
|
#define TS_HTTPS_RPC_PORT 50023
|
||||||
#define TS_HTTP_RPC_HOST "localhost"
|
|
||||||
|
|
||||||
#endif // __TS_CONST_H__
|
#endif // __TS_CONST_H__
|
||||||
|
|
|
@ -17,14 +17,14 @@
|
||||||
//=================================================================
|
//=================================================================
|
||||||
接口使用说明:
|
接口使用说明:
|
||||||
|
|
||||||
本程序启动后,监听 127.0.0.1:50022,接收http请求,请求格式要求如下:
|
本程序启动后,监听 localhost:50022,接收http请求,请求格式要求如下:
|
||||||
|
|
||||||
GET 方式
|
GET 方式
|
||||||
http://127.0.0.1:50022/method/json_param
|
http://localhost:50022/method/json_param
|
||||||
其中json_param是使用url_encode进行编码后的json格式字符串
|
其中json_param是使用url_encode进行编码后的json格式字符串
|
||||||
|
|
||||||
POST 方式
|
POST 方式
|
||||||
http://127.0.0.1:50022/method
|
http://localhost:50022/method
|
||||||
post的数据区域是json_param
|
post的数据区域是json_param
|
||||||
|
|
||||||
其中,URI分为三个部分:
|
其中,URI分为三个部分:
|
||||||
|
@ -40,54 +40,55 @@ json_param
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void http_rpc_main_loop(void);
|
void http_rpc_main_loop(bool is_https);
|
||||||
void http_rpc_stop(void);
|
void http_rpc_stop(bool is_https);
|
||||||
|
|
||||||
typedef std::map<ex_astr, ex_astr> content_type_map;
|
typedef std::map<ex_astr, ex_astr> content_type_map;
|
||||||
|
|
||||||
class TsHttpRpc
|
// for https server, see
|
||||||
{
|
// http://www.xiaovdiy.cn/?post=284
|
||||||
|
|
||||||
|
class TsHttpRpc {
|
||||||
public:
|
public:
|
||||||
TsHttpRpc();
|
TsHttpRpc();
|
||||||
~TsHttpRpc();
|
~TsHttpRpc();
|
||||||
|
|
||||||
bool init(const char* ip, int port);
|
bool init_http();
|
||||||
void run(void);
|
bool init_https();
|
||||||
void stop(void);
|
void run(void);
|
||||||
|
void stop(void);
|
||||||
|
void _rpc_func_url_protocol(const ex_astr& func_args, ex_astr& buf);
|
||||||
|
|
||||||
ex_astr get_content_type(ex_astr file_suffix)
|
ex_astr get_content_type(ex_astr file_suffix) {
|
||||||
{
|
content_type_map::iterator it=m_content_type_map.find(file_suffix);
|
||||||
content_type_map::iterator it = m_content_type_map.find(file_suffix);
|
if (it != m_content_type_map.end()) {
|
||||||
if (it != m_content_type_map.end())
|
return it->second;
|
||||||
{
|
} else {
|
||||||
return it->second;
|
return "application/octet-stream";
|
||||||
}
|
}
|
||||||
else
|
};
|
||||||
{
|
|
||||||
return "application/octet-stream";
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int _parse_request(struct http_message* req, ex_astr& func_cmd, ex_astr& func_args);
|
bool _on_init();
|
||||||
void _process_js_request(const ex_astr& func_cmd, const ex_astr& func_args, ex_astr& buf);
|
int _parse_request(struct http_message* req, ex_astr& func_cmd, ex_astr& func_args);
|
||||||
void _create_json_ret(ex_astr& buf, int errcode);
|
void _process_js_request(const ex_astr& func_cmd, const ex_astr& func_args, ex_astr& buf);
|
||||||
void _create_json_ret(ex_astr& buf, Json::Value& jr_root);
|
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_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_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_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_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_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_file_action(const ex_astr& func_args, ex_astr& buf);
|
||||||
void _rpc_func_get_version(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);
|
static void _mg_event_handler(struct mg_connection *nc, int ev, void *ev_data);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
content_type_map m_content_type_map;
|
content_type_map m_content_type_map;
|
||||||
struct mg_mgr m_mg_mgr;
|
struct mg_mgr m_mg_mgr;
|
||||||
bool m_stop;
|
bool m_stop;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // __TS_HTTP_RPC_H__
|
#endif // __TS_HTTP_RPC_H__
|
||||||
|
|
|
@ -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.1.0"
|
#define TP_ASSIST_VER L"3.2.0"
|
||||||
|
|
||||||
#endif // __TS_ASSIST_VER_H__
|
#endif // __TS_ASSIST_VER_H__
|
||||||
|
|
|
@ -92,7 +92,7 @@ public:
|
||||||
|
|
||||||
int Count(void) const
|
int Count(void) const
|
||||||
{
|
{
|
||||||
return m_secs.size();
|
return (int)(m_secs.size());
|
||||||
}
|
}
|
||||||
void Save(int codepage = EX_CODEPAGE_UTF8);
|
void Save(int codepage = EX_CODEPAGE_UTF8);
|
||||||
#ifdef EX_DEBUG
|
#ifdef EX_DEBUG
|
||||||
|
|
|
@ -35,7 +35,7 @@ wchar_t* ex_abspath_to(const wchar_t* base_abs_path, const wchar_t* relate_path)
|
||||||
bool ex_exec_file(ex_wstr& out_filename);
|
bool ex_exec_file(ex_wstr& out_filename);
|
||||||
bool ex_abspath(ex_wstr& inout_path);
|
bool ex_abspath(ex_wstr& inout_path);
|
||||||
bool ex_dirname(ex_wstr& inout_filename);
|
bool ex_dirname(ex_wstr& inout_filename);
|
||||||
bool ex_path_join(ex_wstr& inout_path, bool auto_abspath, ...);
|
bool ex_path_join(ex_wstr& inout_path, EX_BOOL auto_abspath, ...);
|
||||||
bool ex_abspath_to(const ex_wstr& base_abs_path, const ex_wstr& relate_path, ex_wstr& out_path);
|
bool ex_abspath_to(const ex_wstr& base_abs_path, const ex_wstr& relate_path, ex_wstr& out_path);
|
||||||
bool ex_mkdirs(const ex_wstr& in_path);
|
bool ex_mkdirs(const ex_wstr& in_path);
|
||||||
|
|
||||||
|
|
|
@ -31,10 +31,12 @@ public:
|
||||||
bool terminate(void);
|
bool terminate(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// 线程循环
|
// main loop of this thread.
|
||||||
virtual void _thread_loop(void) = 0;
|
virtual void _thread_loop(void) = 0;
|
||||||
// 设置停止标志,让线程能够正常结束
|
// called by another thread when thread ready to stop.
|
||||||
virtual void _set_stop_flag(void) = 0;
|
virtual void _on_stop(void) {};
|
||||||
|
// called inside thread when thread fully stopped.
|
||||||
|
virtual void _on_stopped(void) {};
|
||||||
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
static unsigned int WINAPI _thread_func(LPVOID lpParam);
|
static unsigned int WINAPI _thread_func(LPVOID lpParam);
|
||||||
|
@ -46,7 +48,7 @@ protected:
|
||||||
ex_astr m_thread_name;
|
ex_astr m_thread_name;
|
||||||
EX_THREAD_HANDLE m_handle;
|
EX_THREAD_HANDLE m_handle;
|
||||||
bool m_is_running;
|
bool m_is_running;
|
||||||
bool m_stop_flag;
|
bool m_need_stop;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -174,7 +174,7 @@ EX_BOOL ex_copy_file(const wchar_t* from_file, const wchar_t* to_file) {
|
||||||
|
|
||||||
if (S_ISLNK(src_stat.st_mode)) {
|
if (S_ISLNK(src_stat.st_mode)) {
|
||||||
char lnk[1024] = {0};
|
char lnk[1024] = {0};
|
||||||
int lnk_size;
|
ssize_t lnk_size;
|
||||||
if ((lnk_size = readlink(source.c_str(), lnk, 1023)) == -1)
|
if ((lnk_size = readlink(source.c_str(), lnk, 1023)) == -1)
|
||||||
return EX_FALSE;
|
return EX_FALSE;
|
||||||
lnk[lnk_size] = '\0';
|
lnk[lnk_size] = '\0';
|
||||||
|
@ -182,9 +182,9 @@ EX_BOOL ex_copy_file(const wchar_t* from_file, const wchar_t* to_file) {
|
||||||
return EX_FALSE;
|
return EX_FALSE;
|
||||||
}
|
}
|
||||||
else if (S_ISREG(src_stat.st_mode)) {
|
else if (S_ISREG(src_stat.st_mode)) {
|
||||||
int src, dst;
|
int src = -1, dst = -1;
|
||||||
int rsize;
|
ssize_t rsize = 0;
|
||||||
char buf[1024];
|
char buf[1024] = {0};
|
||||||
if ((src = open(source.c_str(), O_RDONLY)) == -1) {
|
if ((src = open(source.c_str(), O_RDONLY)) == -1) {
|
||||||
close(dst);
|
close(dst);
|
||||||
return EX_FALSE;
|
return EX_FALSE;
|
||||||
|
@ -409,7 +409,7 @@ bool ex_abspath(ex_wstr& inout_path)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ex_path_join(ex_wstr& inout_path, bool auto_abspath, ...)
|
bool ex_path_join(ex_wstr& inout_path, EX_BOOL auto_abspath, ...)
|
||||||
{
|
{
|
||||||
wchar_t* tmp;
|
wchar_t* tmp;
|
||||||
|
|
||||||
|
|
|
@ -9,90 +9,90 @@
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
unsigned int WINAPI ExThreadBase::_thread_func(LPVOID pParam)
|
unsigned int WINAPI ExThreadBase::_thread_func(LPVOID pParam)
|
||||||
#else
|
#else
|
||||||
void* ExThreadBase::_thread_func(void* pParam)
|
|
||||||
|
void *ExThreadBase::_thread_func(void *pParam)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
ExThreadBase* p = (ExThreadBase*)pParam;
|
ExThreadBase *_this = (ExThreadBase *) pParam;
|
||||||
ex_astr thread_name = p->m_thread_name;
|
|
||||||
p->m_is_running = true;
|
|
||||||
p->_thread_loop();
|
|
||||||
p->m_is_running = false;
|
|
||||||
// if(!p->m_stop_by_request)
|
|
||||||
// p->m_thread_manager->_remove_thread(p);
|
|
||||||
|
|
||||||
EXLOGV(" # thread [%s] end.\n", thread_name.c_str());
|
_this->m_is_running = true;
|
||||||
|
_this->_thread_loop();
|
||||||
|
_this->m_is_running = false;
|
||||||
|
_this->m_handle = 0;
|
||||||
|
|
||||||
return 0;
|
EXLOGV(" # thread [%s] exit.\n", _this->m_thread_name.c_str());
|
||||||
|
_this->_on_stopped();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
ExThreadBase::ExThreadBase(const char* thread_name) :
|
ExThreadBase::ExThreadBase(const char *thread_name) :
|
||||||
m_handle(0),
|
m_handle(0),
|
||||||
m_is_running(false),
|
m_is_running(false),
|
||||||
m_stop_flag(false)
|
m_need_stop(false) {
|
||||||
{
|
m_thread_name = thread_name;
|
||||||
m_thread_name = thread_name;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ExThreadBase::~ExThreadBase()
|
ExThreadBase::~ExThreadBase() {
|
||||||
{
|
if(m_is_running) {
|
||||||
|
EXLOGE(" # thread [%s] not stop before destroy.\n", m_thread_name.c_str());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExThreadBase::start(void)
|
bool ExThreadBase::start(void) {
|
||||||
{
|
m_need_stop = false;
|
||||||
EXLOGV(" . thread [%s] starting.\n", m_thread_name.c_str());
|
EXLOGV(" . thread [%s] starting.\n", m_thread_name.c_str());
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
HANDLE h = (HANDLE)_beginthreadex(NULL, 0, _thread_func, (void*)this, 0, NULL);
|
HANDLE h = (HANDLE)_beginthreadex(NULL, 0, _thread_func, (void*)this, 0, NULL);
|
||||||
|
|
||||||
if (NULL == h)
|
if (NULL == h)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
m_handle = h;
|
m_handle = h;
|
||||||
#else
|
#else
|
||||||
pthread_t ptid = 0;
|
pthread_t ptid = 0;
|
||||||
int ret = pthread_create(&ptid, NULL, _thread_func, (void*)this);
|
int ret = pthread_create(&ptid, NULL, _thread_func, (void *) this);
|
||||||
if (ret != 0)
|
if (ret != 0) {
|
||||||
{
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
m_handle = ptid;
|
||||||
m_handle = ptid;
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExThreadBase::stop(void)
|
bool ExThreadBase::stop(void) {
|
||||||
{
|
if (m_handle == 0) {
|
||||||
EXLOGV("[thread] try to stop thread [%s].\n", m_thread_name.c_str());
|
EXLOGW("[thread] thread [%s] already stopped.\n", m_thread_name.c_str());
|
||||||
_set_stop_flag();
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
EXLOGV("[thread] wait thread [%s] end.\n", m_thread_name.c_str());
|
EXLOGV("[thread] try to stop thread [%s].\n", m_thread_name.c_str());
|
||||||
|
m_need_stop = true;
|
||||||
|
_on_stop();
|
||||||
|
|
||||||
if(m_handle == 0)
|
EXLOGV("[thread] wait thread [%s] exit.\n", m_thread_name.c_str());
|
||||||
return true;
|
|
||||||
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
if (WaitForSingleObject(m_handle, INFINITE) != WAIT_OBJECT_0)
|
if (WaitForSingleObject(m_handle, INFINITE) != WAIT_OBJECT_0)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (pthread_join(m_handle, NULL) != 0)
|
if (pthread_join(m_handle, NULL) != 0) {
|
||||||
{
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ExThreadBase::terminate(void)
|
bool ExThreadBase::terminate(void) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
return TerminateThread(m_handle, 1) ? true : false;
|
return (TerminateThread(m_handle, 1) == TRUE);
|
||||||
#else
|
#else
|
||||||
return pthread_cancel(m_handle) == 0 ? true : false;
|
return (pthread_cancel(m_handle) == 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,105 +100,89 @@ bool ExThreadBase::terminate(void)
|
||||||
//
|
//
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|
||||||
ExThreadManager::ExThreadManager()
|
ExThreadManager::ExThreadManager() {}
|
||||||
{}
|
|
||||||
|
|
||||||
ExThreadManager::~ExThreadManager()
|
ExThreadManager::~ExThreadManager() {
|
||||||
{
|
if (!m_threads.empty()) {
|
||||||
if (m_threads.size() > 0)
|
EXLOGE("when destroy thread manager, there are %d thread not exit.\n", m_threads.size());
|
||||||
{
|
stop_all();
|
||||||
EXLOGE("when destroy thread manager, there are %d thread not exit.\n", m_threads.size());
|
}
|
||||||
stop_all();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExThreadManager::stop_all(void)
|
void ExThreadManager::stop_all(void) {
|
||||||
{
|
ExThreadSmartLock locker(m_lock);
|
||||||
ExThreadSmartLock locker(m_lock);
|
|
||||||
|
|
||||||
ex_threads::iterator it = m_threads.begin();
|
ex_threads::iterator it = m_threads.begin();
|
||||||
for (; it != m_threads.end(); ++it)
|
for (; it != m_threads.end(); ++it) {
|
||||||
{
|
(*it)->stop();
|
||||||
(*it)->stop();
|
}
|
||||||
}
|
m_threads.clear();
|
||||||
m_threads.clear();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExThreadManager::add(ExThreadBase* tb)
|
void ExThreadManager::add(ExThreadBase *tb) {
|
||||||
{
|
ExThreadSmartLock locker(m_lock);
|
||||||
ExThreadSmartLock locker(m_lock);
|
|
||||||
|
|
||||||
ex_threads::iterator it = m_threads.begin();
|
ex_threads::iterator it = m_threads.begin();
|
||||||
for (; it != m_threads.end(); ++it)
|
for (; it != m_threads.end(); ++it) {
|
||||||
{
|
if ((*it) == tb) {
|
||||||
if ((*it) == tb)
|
EXLOGE("when add thread to manager, it already exist.\n");
|
||||||
{
|
return;
|
||||||
EXLOGE("when add thread to manager, it already exist.\n");
|
}
|
||||||
return;
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_threads.push_back(tb);
|
m_threads.push_back(tb);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExThreadManager::remove(ExThreadBase* tb)
|
void ExThreadManager::remove(ExThreadBase *tb) {
|
||||||
{
|
ExThreadSmartLock locker(m_lock);
|
||||||
ExThreadSmartLock locker(m_lock);
|
|
||||||
|
|
||||||
ex_threads::iterator it = m_threads.begin();
|
ex_threads::iterator it = m_threads.begin();
|
||||||
for (; it != m_threads.end(); ++it)
|
for (; it != m_threads.end(); ++it) {
|
||||||
{
|
if ((*it) == tb) {
|
||||||
if ((*it) == tb)
|
m_threads.erase(it);
|
||||||
{
|
return;
|
||||||
//delete (*it);
|
}
|
||||||
m_threads.erase(it);
|
}
|
||||||
return;
|
EXLOGE("thread not hold by thread-manager while remove it.\n");
|
||||||
}
|
|
||||||
}
|
|
||||||
EXLOGE("when remove thread from manager, it not exist.\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//=========================================================
|
//=========================================================
|
||||||
//
|
//
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|
||||||
ExThreadLock::ExThreadLock()
|
ExThreadLock::ExThreadLock() {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
InitializeCriticalSection(&m_locker);
|
InitializeCriticalSection(&m_locker);
|
||||||
#else
|
#else
|
||||||
pthread_mutexattr_t attr;
|
pthread_mutexattr_t attr;
|
||||||
pthread_mutexattr_init(&attr);
|
pthread_mutexattr_init(&attr);
|
||||||
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
|
||||||
pthread_mutex_init(&m_locker, &attr);
|
pthread_mutex_init(&m_locker, &attr);
|
||||||
pthread_mutexattr_destroy(&attr);
|
pthread_mutexattr_destroy(&attr);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ExThreadLock::~ExThreadLock()
|
ExThreadLock::~ExThreadLock() {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
DeleteCriticalSection(&m_locker);
|
DeleteCriticalSection(&m_locker);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_destroy(&m_locker);
|
pthread_mutex_destroy(&m_locker);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExThreadLock::lock(void)
|
void ExThreadLock::lock(void) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
EnterCriticalSection(&m_locker);
|
EnterCriticalSection(&m_locker);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_lock(&m_locker);
|
pthread_mutex_lock(&m_locker);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExThreadLock::unlock(void)
|
void ExThreadLock::unlock(void) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
LeaveCriticalSection(&m_locker);
|
LeaveCriticalSection(&m_locker);
|
||||||
#else
|
#else
|
||||||
pthread_mutex_unlock(&m_locker);
|
pthread_mutex_unlock(&m_locker);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,39 +190,35 @@ void ExThreadLock::unlock(void)
|
||||||
//
|
//
|
||||||
//=========================================================
|
//=========================================================
|
||||||
|
|
||||||
int ex_atomic_add(volatile int* pt, int t)
|
int ex_atomic_add(volatile int *pt, int t) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
return (int)InterlockedExchangeAdd((long*)pt, (long)t);
|
return (int)InterlockedExchangeAdd((long*)pt, (long)t);
|
||||||
#else
|
#else
|
||||||
return __sync_add_and_fetch(pt, t);
|
return __sync_add_and_fetch(pt, t);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int ex_atomic_inc(volatile int* pt)
|
int ex_atomic_inc(volatile int *pt) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
return (int)InterlockedIncrement((long*)pt);
|
return (int)InterlockedIncrement((long*)pt);
|
||||||
#else
|
#else
|
||||||
return __sync_add_and_fetch(pt, 1);
|
return __sync_add_and_fetch(pt, 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int ex_atomic_dec(volatile int* pt)
|
int ex_atomic_dec(volatile int *pt) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
return (int)InterlockedDecrement((long*)pt);
|
return (int)InterlockedDecrement((long*)pt);
|
||||||
#else
|
#else
|
||||||
return __sync_add_and_fetch(pt, -1);
|
return __sync_add_and_fetch(pt, -1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ex_u64 ex_get_thread_id(void)
|
ex_u64 ex_get_thread_id(void) {
|
||||||
{
|
|
||||||
#ifdef EX_OS_WIN32
|
#ifdef EX_OS_WIN32
|
||||||
return GetCurrentThreadId();
|
return GetCurrentThreadId();
|
||||||
#else
|
#else
|
||||||
return (ex_u64)pthread_self();
|
return (ex_u64) pthread_self();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -376,9 +376,13 @@ static const char * _inet_ntop_v6(const ex_u8 *src, char *dst, size_t size)
|
||||||
{
|
{
|
||||||
if (words[i] == 0)
|
if (words[i] == 0)
|
||||||
{
|
{
|
||||||
if (cur.base == -1)
|
if (cur.base == -1) {
|
||||||
cur.base = i, cur.len = 1;
|
cur.base = i;
|
||||||
else cur.len++;
|
cur.len = 1;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
cur.len++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (cur.base != -1)
|
else if (cur.base != -1)
|
||||||
{
|
{
|
||||||
|
|
|
@ -8,6 +8,11 @@
|
||||||
// - WEB界面与WEB后台
|
// - WEB界面与WEB后台
|
||||||
// - WEB后台与CORE核心服务
|
// - WEB后台与CORE核心服务
|
||||||
|
|
||||||
|
//=======================================================
|
||||||
|
// UrlprotocolÏà¹Ø
|
||||||
|
//=======================================================
|
||||||
|
#define TP_URLPROTO_APP_NAME "teleport"
|
||||||
|
|
||||||
//=======================================================
|
//=======================================================
|
||||||
// 远程连接认证方式
|
// 远程连接认证方式
|
||||||
//=======================================================
|
//=======================================================
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"title": "Teleport助手安装",
|
||||||
|
"icon": "dmg_icon.icns",
|
||||||
|
"background": "dmg_bg.png",
|
||||||
|
"icon-size": 108,
|
||||||
|
"contents": [
|
||||||
|
{ "x": 140, "y": 320, "type": "file", "path": "../../../client/tp_assist_macos/build//Release/TP-Assist.app" },
|
||||||
|
{ "x": 498, "y": 320, "type": "link", "path": "/Applications" }
|
||||||
|
]
|
||||||
|
}
|
After Width: | Height: | Size: 283 KiB |
After Width: | Height: | Size: 705 KiB |