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-----
|
|
@ -22,38 +22,41 @@ static LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
|||
void failed(const char* msg);
|
||||
void failed(const wchar_t* msg);
|
||||
|
||||
static HANDLE g_SingleInstanceMutexHandle = NULL;
|
||||
static HANDLE g_SingleInstanceMutexHandle=NULL;
|
||||
|
||||
HINSTANCE g_hInstance = NULL;
|
||||
ULONG g_ulSingleInstanceMsgId = 0;
|
||||
static TCHAR szKernalName[MAX_PATH] = { 0 };
|
||||
HINSTANCE g_hInstance=NULL;
|
||||
ULONG g_ulSingleInstanceMsgId=0;
|
||||
static TCHAR szKernalName[MAX_PATH]={ 0 };
|
||||
|
||||
HWND g_hwndBase = NULL;
|
||||
int g_argc = 0;
|
||||
wchar_t** g_argv = NULL;
|
||||
HWND g_hwndBase=NULL;
|
||||
int g_argc=0;
|
||||
wchar_t** g_argv=NULL;
|
||||
|
||||
#define EOM_ASSIST_GUID _T("A6EFE1250C5F4416BFA819FE92CBD4B4")
|
||||
#define EOM_ASSIST_INSTANCE _T("TS_ASSIST_SINGLE_INSTANCE")
|
||||
#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))
|
||||
|
||||
DWORD WINAPI ThreadProc(LPVOID lpParam)
|
||||
{
|
||||
http_rpc_main_loop();
|
||||
DWORD WINAPI HttpServerThreadProc(LPVOID lpParam) {
|
||||
http_rpc_main_loop(false);
|
||||
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);
|
||||
|
||||
WORD wVersionRequested;
|
||||
WSADATA wsaData;
|
||||
int err;
|
||||
|
||||
wVersionRequested = MAKEWORD(1, 1);
|
||||
wVersionRequested=MAKEWORD(1, 1);
|
||||
|
||||
err = WSAStartup(wVersionRequested, &wsaData);
|
||||
err=WSAStartup(wVersionRequested, &wsaData);
|
||||
if (err != 0) {
|
||||
return 0;
|
||||
}
|
||||
|
@ -74,40 +77,37 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
|
|||
|
||||
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_cfgScp.init();
|
||||
// g_cfgTelnet.init();
|
||||
// g_cfgSSH.init();
|
||||
// g_cfgScp.init();
|
||||
// g_cfgTelnet.init();
|
||||
g_cfg.init();
|
||||
|
||||
g_hInstance = hInstance;
|
||||
g_hInstance=hInstance;
|
||||
_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)
|
||||
return FALSE;
|
||||
|
||||
LPWSTR szCmdLine = (LPWSTR)::GetCommandLineW(); //获取命令行参数;
|
||||
g_argv = CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串;
|
||||
LPWSTR szCmdLine=(LPWSTR)::GetCommandLineW(); //获取命令行参数;
|
||||
g_argv=CommandLineToArgvW(szCmdLine, &g_argc); //拆分命令行参数字符串;
|
||||
|
||||
for (int i = 0; i < g_argc; ++i)
|
||||
{
|
||||
if(0 == lstrcmp(g_argv[i], _T("--stop")))
|
||||
{
|
||||
for (int i=0; i < g_argc; ++i) {
|
||||
if (0 == lstrcmp(g_argv[i], _T("--stop"))) {
|
||||
PostMessage(HWND_BROADCAST, g_ulSingleInstanceMsgId, WMU_INSTANCE_EXIT, 0);
|
||||
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)
|
||||
{
|
||||
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;
|
||||
g_argv=NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -116,68 +116,70 @@ int APIENTRY wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmd
|
|||
MyRegisterClass();
|
||||
|
||||
// Perform application initialization:
|
||||
if (!InitInstance())
|
||||
{
|
||||
if (!InitInstance()) {
|
||||
CloseHandle(g_SingleInstanceMutexHandle);
|
||||
LocalFree(g_argv);
|
||||
g_argv = NULL;
|
||||
g_argv=NULL;
|
||||
return FALSE;
|
||||
}
|
||||
HANDLE hThread = NULL;
|
||||
DWORD dwThreadId;
|
||||
hThread = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwThreadId);
|
||||
|
||||
HANDLE hThreadHttpServer=NULL;
|
||||
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))
|
||||
{
|
||||
while (GetMessage(&msg, NULL, 0, 0)) {
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
http_rpc_stop();
|
||||
WaitForSingleObject(hThread, INFINITE);
|
||||
http_rpc_stop(false);
|
||||
WaitForSingleObject(hThreadHttpServer, INFINITE);
|
||||
|
||||
http_rpc_stop(true);
|
||||
WaitForSingleObject(hThreadHttpsServer, INFINITE);
|
||||
|
||||
CloseHandle(g_SingleInstanceMutexHandle);
|
||||
|
||||
LocalFree(g_argv);
|
||||
g_argv = NULL;
|
||||
g_argv=NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
void failed(const char* msg)
|
||||
{
|
||||
void failed(const char* msg) {
|
||||
OutputDebugStringA(msg);
|
||||
}
|
||||
void failed(const wchar_t* msg)
|
||||
{
|
||||
void failed(const wchar_t* msg) {
|
||||
OutputDebugStringW(msg);
|
||||
}
|
||||
|
||||
ATOM MyRegisterClass()
|
||||
{
|
||||
ATOM MyRegisterClass() {
|
||||
WNDCLASSEX wcex;
|
||||
|
||||
wcex.cbSize = sizeof(WNDCLASSEX);
|
||||
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));
|
||||
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);
|
||||
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;
|
||||
|
||||
|
@ -186,17 +188,12 @@ BOOL InitInstance(void)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
if (g_ulSingleInstanceMsgId == message)
|
||||
{
|
||||
if (WMU_INSTANCE_EXIT == wParam)
|
||||
{
|
||||
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)
|
||||
{
|
||||
} 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);
|
||||
|
@ -206,16 +203,14 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
}
|
||||
}
|
||||
|
||||
switch (message)
|
||||
{
|
||||
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))
|
||||
{
|
||||
if (IDM_MAIN == LOWORD(wParam)) {
|
||||
CreateDialog(g_hInstance, MAKEINTRESOURCE(IDD_DLG_MAIN), hWnd, eomDlgMainProc);
|
||||
ShowWindow(g_hDlgMain, SW_HIDE);
|
||||
}
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
<PrecompiledHeader>Use</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<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>
|
||||
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||
</ClCompile>
|
||||
|
@ -76,7 +76,7 @@
|
|||
<Optimization>MaxSpeed</Optimization>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<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>
|
||||
<AdditionalIncludeDirectories>..\..\common\teleport;..\..\common\libex\include;..\..\external\jsoncpp\include;..\..\external\openssl\inc32</AdditionalIncludeDirectories>
|
||||
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
#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"
|
||||
#define TS_HTTPS_RPC_PORT 50023
|
||||
|
||||
#endif // __TS_CONST_H__
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "ts_http_rpc.h"
|
||||
#include "dlg_main.h"
|
||||
#include "ts_ver.h"
|
||||
#include "ts_env.h"
|
||||
|
||||
/*
|
||||
1.
|
||||
|
@ -118,22 +119,40 @@ password 51:b:%s\n\
|
|||
|
||||
|
||||
TsHttpRpc g_http_interface;
|
||||
TsHttpRpc g_https_interface;
|
||||
|
||||
void http_rpc_main_loop(void) {
|
||||
if (!g_http_interface.init(TS_HTTP_RPC_HOST, TS_HTTP_RPC_PORT)) {
|
||||
void http_rpc_main_loop(bool is_https) {
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
||||
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();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
@ -198,7 +217,60 @@ TsHttpRpc::~TsHttpRpc() {
|
|||
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 };
|
||||
if (!GetModuleFileNameA(nullptr, file_name, MAX_PATH))
|
||||
return false;
|
||||
|
@ -212,23 +284,6 @@ bool TsHttpRpc::init(const char* ip, int port) {
|
|||
if (match)
|
||||
*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[".png"] = "image/png";
|
||||
m_content_type_map[".jpeg"] = "image/jpeg";
|
||||
|
|
|
@ -40,45 +40,42 @@ json_param
|
|||
|
||||
*/
|
||||
|
||||
void http_rpc_main_loop(void);
|
||||
void http_rpc_stop(void);
|
||||
void http_rpc_main_loop(bool is_https);
|
||||
void http_rpc_stop(bool is_https);
|
||||
|
||||
typedef std::map<ex_astr, ex_astr> content_type_map;
|
||||
|
||||
// for https server, see
|
||||
// http://www.xiaovdiy.cn/?post=284
|
||||
|
||||
class TsHttpRpc
|
||||
{
|
||||
class TsHttpRpc {
|
||||
public:
|
||||
TsHttpRpc();
|
||||
~TsHttpRpc();
|
||||
|
||||
bool init(const char* ip, int port);
|
||||
bool init_http();
|
||||
bool init_https();
|
||||
void run(void);
|
||||
void stop(void);
|
||||
|
||||
ex_astr get_content_type(ex_astr file_suffix)
|
||||
{
|
||||
content_type_map::iterator it = m_content_type_map.find(file_suffix);
|
||||
if (it != m_content_type_map.end())
|
||||
{
|
||||
ex_astr get_content_type(ex_astr file_suffix) {
|
||||
content_type_map::iterator it=m_content_type_map.find(file_suffix);
|
||||
if (it != m_content_type_map.end()) {
|
||||
return it->second;
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
return "application/octet-stream";
|
||||
}
|
||||
};
|
||||
|
||||
private:
|
||||
bool _on_init();
|
||||
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 _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_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_get_config(const ex_astr& func_args, ex_astr& buf);
|
||||
void _rpc_func_set_config(const ex_astr& func_args, ex_astr& buf);
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<content url="file://$MODULE_DIR$/webroot">
|
||||
<sourceFolder url="file://$MODULE_DIR$/webroot" isTestSource="false" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="jdk" jdkName="py37" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
<component name="TemplatesService">
|
||||
|
|
|
@ -457,8 +457,6 @@ $app.init_ws = function () {
|
|||
delete $app.ws;
|
||||
|
||||
var _sid = Cookies.get('_sid');
|
||||
console.log(location);
|
||||
console.log(location.host);
|
||||
if(location.protocol === 'http:') {
|
||||
$app.ws = new WebSocket('ws://' + location.host + '/ws/' + _sid);
|
||||
} else {
|
||||
|
|
|
@ -3,15 +3,21 @@
|
|||
$tp.assist = {
|
||||
running: false,
|
||||
version: '',
|
||||
// api_url: 'http://localhost:50022/api',
|
||||
api_url: 'http://127.0.0.1:50022/api',
|
||||
api_url: '',
|
||||
teleport_ip: window.location.hostname
|
||||
};
|
||||
|
||||
console.log(window.location.protocol);
|
||||
|
||||
// $assist 是 $tp.assist 的别名,方便使用。
|
||||
var $assist = $tp.assist;
|
||||
|
||||
$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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue