助手加入https支持(50022=http,50023=https),实测以https方式访问web时,可以在各种浏览器中与助手进行通讯了(IE/Edge/Chrome/Firefox),目前在Win平台测试通过。

pull/130/head
Apex Liu 2018-11-09 03:10:08 +08:00
parent 10567f38e5
commit 8dd6bdbde0
11 changed files with 362 additions and 237 deletions

View File

@ -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-----

View File

@ -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-----

View File

@ -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-----

View File

@ -37,14 +37,17 @@ wchar_t** g_argv = NULL;
#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);
return 0;
}
int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nShowCmd) {
EXLOG_USE_LOGGER(&g_ex_logger); EXLOG_USE_LOGGER(&g_ex_logger);
WORD wVersionRequested; WORD wVersionRequested;
@ -88,10 +91,8 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
LPWSTR szCmdLine=(LPWSTR)::GetCommandLineW(); //获取命令行参数; LPWSTR szCmdLine=(LPWSTR)::GetCommandLineW(); //获取命令行参数;
g_argv=CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串; g_argv=CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串;
for (int i = 0; i < g_argc; ++i) for (int i=0; i < g_argc; ++i) {
{ if (0 == lstrcmp(g_argv[i], _T("--stop"))) {
if(0 == lstrcmp(g_argv[i], _T("--stop")))
{
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_INSTANCE_EXIT, 0); PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_INSTANCE_EXIT, 0);
LocalFree(g_argv); LocalFree(g_argv);
g_argv=NULL; g_argv=NULL;
@ -102,8 +103,7 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
// make sure run single instance. // make sure run single instance.
_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_SingleInstanceMutexHandle=CreateMutex(NULL, FALSE, szKernalName); g_SingleInstanceMutexHandle=CreateMutex(NULL, FALSE, szKernalName);
if (GetLastError() == ERROR_ALREADY_EXISTS) if (GetLastError() == ERROR_ALREADY_EXISTS) {
{
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_SHOW_EXIST_DLGUI, 0); PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_SHOW_EXIST_DLGUI, 0);
CloseHandle(g_SingleInstanceMutexHandle); CloseHandle(g_SingleInstanceMutexHandle);
LocalFree(g_argv); LocalFree(g_argv);
@ -116,26 +116,32 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
MyRegisterClass(); MyRegisterClass();
// Perform application initialization: // Perform application initialization:
if (!InitInstance()) if (!InitInstance()) {
{
CloseHandle(g_SingleInstanceMutexHandle); CloseHandle(g_SingleInstanceMutexHandle);
LocalFree(g_argv); LocalFree(g_argv);
g_argv=NULL; g_argv=NULL;
return FALSE; return FALSE;
} }
HANDLE hThread = NULL;
DWORD dwThreadId; HANDLE hThreadHttpServer=NULL;
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadId); 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; MSG msg;
while (GetMessage(&msg, NULL, 0, 0)) while (GetMessage(&msg, NULL, 0, 0)) {
{
TranslateMessage(&msg); TranslateMessage(&msg);
DispatchMessage(&msg); DispatchMessage(&msg);
} }
http_rpc_stop(); http_rpc_stop(false);
WaitForSingleObject(hThread, INFINITE); WaitForSingleObject(hThreadHttpServer, INFINITE);
http_rpc_stop(true);
WaitForSingleObject(hThreadHttpsServer, INFINITE);
CloseHandle(g_SingleInstanceMutexHandle); CloseHandle(g_SingleInstanceMutexHandle);
@ -145,17 +151,14 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
} }
void failed(const char* msg) void failed(const char* msg) {
{
OutputDebugStringA(msg); OutputDebugStringA(msg);
} }
void failed(const wchar_t* msg) void failed(const wchar_t* msg) {
{
OutputDebugStringW(msg); OutputDebugStringW(msg);
} }
ATOM MyRegisterClass() ATOM MyRegisterClass() {
{
WNDCLASSEX wcex; WNDCLASSEX wcex;
wcex.cbSize=sizeof(WNDCLASSEX); wcex.cbSize=sizeof(WNDCLASSEX);
@ -175,8 +178,7 @@ ATOM MyRegisterClass()
return RegisterClassEx(&wcex); return RegisterClassEx(&wcex);
} }
BOOL InitInstance(void) BOOL InitInstance(void) {
{
g_hwndBase=CreateWindow(EOM_ASSIST_WIN_CLASS, _T(""), WS_OVERLAPPEDWINDOW, 8, 0, 8, 0, NULL, NULL, g_hInstance, NULL); g_hwndBase=CreateWindow(EOM_ASSIST_WIN_CLASS, _T(""), WS_OVERLAPPEDWINDOW, 8, 0, 8, 0, NULL, NULL, g_hInstance, NULL);
if (!g_hwndBase) if (!g_hwndBase)
return FALSE; return FALSE;
@ -186,17 +188,12 @@ BOOL InitInstance(void)
return TRUE; return TRUE;
} }
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
{ if (g_ulSingleInstanceMsgId == message) {
if (g_ulSingleInstanceMsgId == message) if (WMU_INSTANCE_EXIT == wParam) {
{
if (WMU_INSTANCE_EXIT == wParam)
{
PostMessage(g_hDlgMain, WM_COMMAND, MAKEDWORD(IDCANCEL, 0), NULL); PostMessage(g_hDlgMain, WM_COMMAND, MAKEDWORD(IDCANCEL, 0), NULL);
return 0; return 0;
} } else if (WMU_SHOW_EXIST_DLGUI == wParam) {
else if (WMU_SHOW_EXIST_DLGUI == wParam)
{
ShowWindow(g_hDlgMain, SW_SHOW); ShowWindow(g_hDlgMain, SW_SHOW);
SetWindowPos(g_hDlgMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); SetWindowPos(g_hDlgMain, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
SetActiveWindow(g_hDlgMain); SetActiveWindow(g_hDlgMain);
@ -206,16 +203,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
} }
} }
switch (message) switch (message) {
{
case WM_CREATE: case WM_CREATE:
PostMessage(hWnd, WM_COMMAND, MAKEDWORD(IDM_MAIN, 0), NULL); PostMessage(hWnd, WM_COMMAND, MAKEDWORD(IDM_MAIN, 0), NULL);
return DefWindowProc(hWnd, message, wParam, lParam); return DefWindowProc(hWnd, message, wParam, lParam);
break; break;
case WM_COMMAND: case WM_COMMAND:
if (IDM_MAIN == LOWORD(wParam)) if (IDM_MAIN == LOWORD(wParam)) {
{
CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), hWnd, eomDlgMainProc); CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), hWnd, eomDlgMainProc);
ShowWindow(g_hDlgMain, SW_HIDE); ShowWindow(g_hDlgMain, SW_HIDE);
} }

View File

@ -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>

View File

@ -5,7 +5,6 @@
#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__

View File

@ -13,6 +13,7 @@
#include "ts_http_rpc.h" #include "ts_http_rpc.h"
#include "dlg_main.h" #include "dlg_main.h"
#include "ts_ver.h" #include "ts_ver.h"
#include "ts_env.h"
/* /*
1. 1.
@ -118,22 +119,40 @@ password 51:b:%s\n\
TsHttpRpc g_http_interface; TsHttpRpc g_http_interface;
TsHttpRpc g_https_interface;
void http_rpc_main_loop(void) { void http_rpc_main_loop(bool is_https) {
if (!g_http_interface.init(TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT)) { if (is_https) {
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;
}
EXLOGW("======================================================\n");
EXLOGW("[rpc] TeleportAssist-HTTPS-RPC ready on 127.0.0.1:%d\n", TS_HTTPS_RPC_PORT);
g_https_interface.run();
EXLOGW("[rpc] HTTPS-Server main loop end.\n");
} else {
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; return;
} }
EXLOGW("======================================================\n"); EXLOGW("======================================================\n");
EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on %s:%d\n", TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT); EXLOGW("[rpc] TeleportAssist-HTTP-RPC ready on 127.0.0.1:%d\n", TS_HTTP_RPC_PORT);
g_http_interface.run(); g_http_interface.run();
EXLOGW("[rpc] main loop end.\n"); EXLOGW("[rpc] HTTP-Server main loop end.\n");
}
} }
void http_rpc_stop(void) { void http_rpc_stop(bool is_https) {
if (is_https)
g_https_interface.stop();
else
g_http_interface.stop(); g_http_interface.stop();
} }
@ -198,7 +217,60 @@ 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 = nullptr;
char addr[128] = { 0 };
ex_strformat(addr, 128, "tcp://127.0.0.1:%d", TS_HTTP_RPC_PORT);
nc = mg_bind(&m_mg_mgr, addr, _mg_event_handler);
if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%d\n", TS_HTTP_RPC_PORT);
return false;
}
nc->user_data = this;
mg_set_protocol_http_websocket(nc);
return _on_init();
}
bool TsHttpRpc::init_https() {
ex_wstr file_ssl_cert = g_env.m_exec_path;
ex_path_join(file_ssl_cert, true, L"cfg", L"localhost.pem", NULL);
ex_wstr file_ssl_key = g_env.m_exec_path;
ex_path_join(file_ssl_key, true, L"cfg", 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://127.0.0.1:%d", TS_HTTPS_RPC_PORT);
//ex_strformat(addr, 128, "%d", TS_HTTPS_RPC_PORT);
struct mg_connection* nc = nullptr;
nc = mg_bind_opt(&m_mg_mgr, addr, _mg_event_handler, bind_opts);
if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init 127.0.0.1:%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() {
char file_name[MAX_PATH] = { 0 }; char file_name[MAX_PATH] = { 0 };
if (!GetModuleFileNameA(nullptr, file_name, MAX_PATH)) if (!GetModuleFileNameA(nullptr, file_name, MAX_PATH))
return false; return false;
@ -212,23 +284,6 @@ bool TsHttpRpc::init(const char* ip, int port) {
if (match) if (match)
*match = '\0'; *match = '\0';
struct mg_connection* nc = nullptr;
char addr[128] = { 0 };
if (0 == strcmp(ip, "127.0.0.1") || 0 == strcmp(ip, "localhost"))
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);
if (!nc) {
EXLOGE("[rpc] TsHttpRpc::init %s:%d\n", ip, port);
return false;
}
nc->user_data = this;
mg_set_protocol_http_websocket(nc);
m_content_type_map[".js"] = "application/javascript"; m_content_type_map[".js"] = "application/javascript";
m_content_type_map[".png"] = "image/png"; m_content_type_map[".png"] = "image/png";
m_content_type_map[".jpeg"] = "image/jpeg"; m_content_type_map[".jpeg"] = "image/jpeg";

View File

@ -40,38 +40,35 @@ 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;
// for https server, see // for https server, see
// http://www.xiaovdiy.cn/?post=284 // http://www.xiaovdiy.cn/?post=284
class TsHttpRpc class TsHttpRpc {
{
public: public:
TsHttpRpc(); TsHttpRpc();
~TsHttpRpc(); ~TsHttpRpc();
bool init(const char* ip, int port); bool init_http();
bool init_https();
void run(void); void run(void);
void stop(void); void stop(void);
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; return it->second;
} } else {
else
{
return "application/octet-stream"; return "application/octet-stream";
} }
}; };
private: private:
bool _on_init();
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);
void _process_js_request(const ex_astr& func_cmd, const ex_astr& func_args, ex_astr& buf); void _process_js_request(const ex_astr& func_cmd, const ex_astr& func_args, ex_astr& buf);
void _create_json_ret(ex_astr& buf, int errcode); void _create_json_ret(ex_astr& buf, int errcode);

View File

@ -6,7 +6,7 @@
<content url="file://$MODULE_DIR$/webroot"> <content url="file://$MODULE_DIR$/webroot">
<sourceFolder url="file://$MODULE_DIR$/webroot" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/webroot" isTestSource="false" />
</content> </content>
<orderEntry type="inheritedJdk" /> <orderEntry type="jdk" jdkName="py37" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
</component> </component>
<component name="TemplatesService"> <component name="TemplatesService">

View File

@ -457,8 +457,6 @@ $app.init_ws = function () {
delete $app.ws; delete $app.ws;
var _sid = Cookies.get('_sid'); var _sid = Cookies.get('_sid');
console.log(location);
console.log(location.host);
if(location.protocol === 'http:') { if(location.protocol === 'http:') {
$app.ws = new WebSocket('ws://' + location.host + '/ws/' + _sid); $app.ws = new WebSocket('ws://' + location.host + '/ws/' + _sid);
} else { } else {

View File

@ -3,15 +3,21 @@
$tp.assist = { $tp.assist = {
running: false, running: false,
version: '', version: '',
// api_url: 'http://localhost:50022/api', api_url: '',
api_url: 'http://127.0.0.1:50022/api',
teleport_ip: window.location.hostname teleport_ip: window.location.hostname
}; };
console.log(window.location.protocol);
// $assist 是 $tp.assist 的别名,方便使用。 // $assist 是 $tp.assist 的别名,方便使用。
var $assist = $tp.assist; var $assist = $tp.assist;
$assist.init = function (cb_stack) { $assist.init = function (cb_stack) {
if(location.protocol === 'http:') {
$assist.api_url = 'http://localhost:50022/api';
} else {
$assist.api_url = 'https://localhost:50023/api';
}
$assist._make_message_box(); $assist._make_message_box();