mirror of https://github.com/tp4a/teleport
助手加入https支持(50022=http,50023=https),实测以https方式访问web时,可以在各种浏览器中与助手进行通讯了(IE/Edge/Chrome/Firefox),目前在Win平台测试通过。
parent
10567f38e5
commit
8dd6bdbde0
|
@ -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-----
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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__
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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">
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue