void ClientConnection::Save_Latest_Connection() { vnclog.Print(2, _T("Saving connection info\n")); char fname[_MAX_PATH]; // char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); int disp = PORT_TO_DISPLAY(m_port); char optionfile[MAX_PATH]; char *tempvar=NULL; tempvar = getenv( "TEMP" ); if (tempvar) strcpy(optionfile,tempvar); else strcpy(optionfile,""); strcat(optionfile,"\\options.vnc"); sprintf(fname, optionfile); vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); ret = WritePrivateProfileString("connection", "proxyhost", m_proxyhost, fname); sprintf(buf, "%d", m_proxyport); WritePrivateProfileString("connection", "proxyport", buf, fname); buf[0] = '\0'; WritePrivateProfileString("connection", "password", buf, fname); m_opts.Save(fname); m_opts.Register(); }
void ClientConnection::SaveConnection() { //vnclog.Print(2, _T("Saving connection info\n")); char fname[_MAX_PATH]; char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); int disp = PORT_TO_DISPLAY(m_port); sprintf(fname, "%.10s-%d.vnc", m_host, (disp > 0 && disp < 100) ? disp : m_port); ofn.hwndOwner = m_hwnd; ofn.lpstrFile = fname; ofn.lpstrFileTitle = tname; ofn.Flags = OFN_HIDEREADONLY; if (!GetSaveFileName(&ofn)) { DWORD err = CommDlgExtendedError(); char msg[1024]; switch(err) { case 0: // user cancelled break; case FNERR_INVALIDFILENAME: { strcpy(msg, sz_K1); MessageBox(m_hwnd, msg, sz_K2, MB_ICONERROR | MB_OK | MB_SETFOREGROUND | MB_TOPMOST); } break; default: { //vnclog.Print(0, "Error %d from GetSaveFileName\n", err); Log.Add(_ERROR_, "Error %d from GetSaveFileName", err); } break; } return; } //vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); ret = WritePrivateProfileString("connection", "proxyhost", m_proxyhost, fname); sprintf(buf, "%d", m_proxyport); WritePrivateProfileString("connection", "proxyport", buf, fname); if (MessageBox(m_hwnd, sz_K3, sz_K4, MB_YESNO | MB_ICONWARNING) == IDYES) { for (int i = 0; i < MAXPWLEN; i++) { sprintf(buf+i*2, "%02x", (unsigned int) m_encPasswd[i]); } } else buf[0] = '\0'; WritePrivateProfileString("connection", "password", buf, fname); m_opts.Save(fname); m_opts.Register(); }
void ClientConnection::Save_Latest_Connection() { vnclog.Print(2, _T("Saving connection info\n")); // don't save in case of .vnc file if (config_specified) return; char fname[_MAX_PATH]; // char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); int disp = PORT_TO_DISPLAY(m_port); char optionfile[MAX_PATH]; VNCOptions::GetDefaultOptionsFileName(optionfile); sprintf(fname, optionfile); vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); ret = WritePrivateProfileString("connection", "proxyhost", m_proxyhost, fname); sprintf(buf, "%d", m_proxyport); WritePrivateProfileString("connection", "proxyport", buf, fname); buf[0] = '\0'; WritePrivateProfileString("connection", "password", buf, fname); m_opts.Save(fname); m_opts.Register(); }
void ClientConnection::Save_auto_Connection() { char fname[_MAX_PATH]; // char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); int disp = PORT_TO_DISPLAY(m_port); char optionfile[MAX_PATH]; char szFileName[MAX_PATH]; if (GetModuleFileName(NULL, szFileName, MAX_PATH)) { char* p = strrchr(szFileName, '\\'); if (p == NULL) return; *p = '\0'; strcat (szFileName,"\\viewers\\"); } CreateDirectory(szFileName,NULL); strcpy(optionfile,""); strcat(optionfile,szFileName); sprintf(szFileName, "%.14s-%d.vnc", m_host, (disp > 0 && disp < 100) ? disp : m_port); strcat(optionfile,szFileName); sprintf(fname, optionfile); vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); ret = WritePrivateProfileString("connection", "proxyhost", m_proxyhost, fname); sprintf(buf, "%d", m_proxyport); WritePrivateProfileString("connection", "proxyport", buf, fname); if (MessageBox(m_hwnd, sz_K3, sz_K4, MB_YESNO | MB_ICONWARNING) == IDYES) { for (int i = 0; i < MAXPWLEN; i++) { sprintf(buf+i*2, "%02x", (unsigned int) m_encPasswd[i]); } } else buf[0] = '\0'; WritePrivateProfileString("connection", "password", buf, fname); m_opts.Save(fname); m_opts.Register(); }
void ClientConnection::Save_auto_Connection_all() { char fname[_MAX_PATH]; // char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); int disp = PORT_TO_DISPLAY(m_port); char optionfile[MAX_PATH]; char temp[MAX_PATH]; char szFileName[MAX_PATH]; if (GetModuleFileName(NULL, szFileName, MAX_PATH)) { char* p = strrchr(szFileName, '\\'); if (p == NULL) return; *p = '\0'; strcat (szFileName,"\\temp\\"); } CreateDirectory(szFileName,NULL); strcpy(optionfile,""); strcpy(temp,""); strcat(optionfile,szFileName); strcat(optionfile,_itoa(GetTickCount(),temp,10)); sprintf(szFileName, "%.14s-%d.vnc", m_host, (disp > 0 && disp < 100) ? disp : rand()); strcat(optionfile,szFileName); sprintf(fname, optionfile); vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); ret = WritePrivateProfileString("connection", "proxyhost", m_proxyhost, fname); sprintf(buf, "%d", m_proxyport); if (!m_ms_logon) { WritePrivateProfileString("connection", "proxyport", buf, fname); for (int i = 0; i < MAXPWLEN; i++) { sprintf(buf+i*2, "%02x", (unsigned int) m_encPasswd[i]); } WritePrivateProfileString("connection", "password", buf, fname); } m_opts.Save(fname); vnclog.Print(0, _T("%s\n"), fname); m_opts.Register(); }
void IncomingConnectionsControls::InitPortSettings(BOOL CheckedButton) { BOOL bAutoPort = m_server->AutoPortSelect(); UINT port_rfb = m_server->GetPort(); UINT port_http = m_server->GetHttpPort(); int d1 = PORT_TO_DISPLAY(port_rfb); int d2 = HPORT_TO_DISPLAY(port_http); BOOL bValidDisplay = (d1 == d2 && d1 >= 0 && d1 <= 99); if (bValidDisplay) { SetDlgItemInt(m_hwnd, IDC_DISPLAYNO, d1, FALSE); } else { SetDlgItemText(m_hwnd, IDC_DISPLAYNO, ""); } SetDlgItemInt(m_hwnd, IDC_PORTRFB, port_rfb, FALSE); SetDlgItemInt(m_hwnd, IDC_PORTHTTP, port_http, FALSE); if (CheckedButton) { SetChecked(IDC_PORTNO_AUTO, bAutoPort); SetChecked(IDC_SPECDISPLAY, (!bAutoPort && bValidDisplay)); SetChecked(IDC_SPECPORT, (!bAutoPort && !bValidDisplay)); } }
void ClientConnection::SaveConnection() { vnclog.Print(2, _T("Saving connection info\n")); char tname[_MAX_FNAME + _MAX_EXT]; ofnInit(); // Let's choose a reasonable file name based on hostname and port char fname[_MAX_PATH]; // If the first character of the hostname is a letter, try to use // only the part of the hostname before the first dot char *ptr = NULL; if (isalpha(m_host[0])) { ptr = strchr(m_host, '.'); if (ptr - m_host > 24) ptr = NULL; } if (ptr) { memcpy(fname, m_host, ptr - m_host); fname[ptr - m_host] = '\0'; } else { sprintf(fname, "%.24s", m_host); } // Append the port number if it's not the default port if (PORT_TO_DISPLAY(m_port) != 0) { sprintf(&fname[strlen(fname)], "-%d", m_port); } // Finally, append the .vnc suffix (note there will be no buffer overrun) strcat(fname, ".vnc"); ofn.hwndOwner = m_hwnd; ofn.lpstrFile = fname; ofn.lpstrFileTitle = tname; ofn.Flags = OFN_HIDEREADONLY; if (!GetSaveFileName(&ofn)) { DWORD err = CommDlgExtendedError(); char msg[1024]; switch(err) { case 0: // user cancelled break; case FNERR_INVALIDFILENAME: strcpy(msg, "Invalid filename"); MessageBox(m_hwnd, msg, "Error saving file", MB_ICONERROR | MB_OK); break; default: vnclog.Print(0, "Error %d from GetSaveFileName\n", err); break; } return; } vnclog.Print(1, "Saving to %s\n", fname); int ret = WritePrivateProfileString("connection", "host", m_host, fname); char buf[32]; sprintf(buf, "%d", m_port); WritePrivateProfileString("connection", "port", buf, fname); buf[0] = '\0'; if (m_authScheme == rfbAuthVNC) { if (MessageBox(m_hwnd, "Do you want to save the password in this file?\n\r" "If you say Yes, anyone with access to this file could access your session\n\r" "and (potentially) discover your VNC password.", "Security warning", MB_YESNO | MB_ICONWARNING) == IDYES) { for (int i = 0; i < MAXPWLEN; i++) { sprintf(buf+i*2, "%02x", (unsigned int) m_encPasswd[i]); } WritePrivateProfileString("connection", "password", buf, fname); } } m_opts.Save(fname); m_opts.Register(); }
BOOL CALLBACK vncProperties::DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { // We use the dialog-box's USERDATA to store a _this pointer // This is set only once WM_INITDIALOG has been recieved, though! vncProperties *_this = (vncProperties *) GetWindowLong(hwnd, GWL_USERDATA); switch (uMsg) { case WM_INITDIALOG: { // Retrieve the Dialog box parameter and use it as a pointer // to the calling vncProperties object SetWindowLong(hwnd, GWL_USERDATA, lParam); _this = (vncProperties *) lParam; _this->m_dlgvisible = TRUE; // Set the dialog box's title to indicate which Properties we're editting if (_this->m_usersettings) { SetWindowText(hwnd, "WinVNC: Current User Properties"); } else { SetWindowText(hwnd, "WinVNC: Default Local System Properties"); } // Initialise the properties controls HWND hConnectSock = GetDlgItem(hwnd, IDC_CONNECT_SOCK); SendMessage(hConnectSock, BM_SETCHECK, _this->m_server->SockConnected(), 0); HWND hConnectHTTP = GetDlgItem(hwnd, IDC_CONNECT_HTTP); SendMessage(hConnectHTTP, BM_SETCHECK, _this->m_server->HTTPConnectEnabled(), 0); HWND hConnectCorba = GetDlgItem(hwnd, IDC_CONNECT_CORBA); SendMessage(hConnectCorba, BM_SETCHECK, _this->m_server->CORBAConnected(), 0); #if(defined(_CORBA)) ShowWindow(hConnectCorba, SW_SHOW); #else ShowWindow(hConnectCorba, SW_HIDE); #endif HWND hAutoPortNo = GetDlgItem(hwnd, IDC_AUTO_DISPLAY_NO); SendMessage(hAutoPortNo, BM_SETCHECK, _this->m_server->AutoPortSelect(), 0); EnableWindow(hAutoPortNo, _this->m_server->SockConnected()); HWND hPortNo = GetDlgItem(hwnd, IDC_PORTNO); SetDlgItemInt(hwnd, IDC_PORTNO, PORT_TO_DISPLAY(_this->m_server->GetPort()), FALSE); EnableWindow(hPortNo, _this->m_server->SockConnected() && !_this->m_server->AutoPortSelect()); HWND hPassword = GetDlgItem(hwnd, IDC_PASSWORD); EnableWindow(hPassword, _this->m_server->SockConnected()); // Get the password { char plain[MAXPWLEN+1]; _this->m_server->GetPassword(plain); { vncPasswd::ToText plainpwd(plain); int length = strlen(plainpwd); for (int i=0; i<length; i++) { plain[i] = i+1; } plain[length]=0; } SetDlgItemText(hwnd, IDC_PASSWORD, (const char *) plain); } // Remote input settings HWND hEnableRemoteInputs = GetDlgItem(hwnd, IDC_DISABLE_INPUTS); SendMessage(hEnableRemoteInputs, BM_SETCHECK, !(_this->m_server->RemoteInputsEnabled()), 0); // Local input settings HWND hDisableLocalInputs = GetDlgItem(hwnd, IDC_DISABLE_LOCAL_INPUTS); SendMessage(hDisableLocalInputs, BM_SETCHECK, _this->m_server->LocalInputsDisabled(), 0); // Remove the wallpaper HWND hRemoveWallpaper = GetDlgItem(hwnd, IDC_REMOVE_WALLPAPER); SendMessage(hRemoveWallpaper, BM_SETCHECK, _this->m_server->RemoveWallpaperEnabled(), 0); // Lock settings HWND hLockSetting; switch (_this->m_server->LockSettings()) { case 1: hLockSetting = GetDlgItem(hwnd, IDC_LOCKSETTING_LOCK); break; case 2: hLockSetting = GetDlgItem(hwnd, IDC_LOCKSETTING_LOGOFF); break; default: hLockSetting = GetDlgItem(hwnd, IDC_LOCKSETTING_NOTHING); }; SendMessage(hLockSetting, BM_SETCHECK, TRUE, 0); // Set the polling options HWND hPollFullScreen = GetDlgItem(hwnd, IDC_POLL_FULLSCREEN); SendMessage(hPollFullScreen, BM_SETCHECK, _this->m_server->PollFullScreen(), 0); HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); SendMessage(hPollForeground, BM_SETCHECK, _this->m_server->PollForeground(), 0); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); SendMessage(hPollUnderCursor, BM_SETCHECK, _this->m_server->PollUnderCursor(), 0); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); SendMessage(hPollConsoleOnly, BM_SETCHECK, _this->m_server->PollConsoleOnly(), 0); EnableWindow(hPollConsoleOnly, _this->m_server->PollUnderCursor() || _this->m_server->PollForeground() ); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); SendMessage(hPollOnEventOnly, BM_SETCHECK, _this->m_server->PollOnEventOnly(), 0); EnableWindow(hPollOnEventOnly, _this->m_server->PollUnderCursor() || _this->m_server->PollForeground() ); SetForegroundWindow(hwnd); return TRUE; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: case IDC_APPLY: { // Save the password char passwd[MAXPWLEN+1]; if (GetDlgItemText(hwnd, IDC_PASSWORD, (LPSTR) &passwd, MAXPWLEN+1) == 0) { vncPasswd::FromClear crypt; _this->m_server->SetPassword(crypt); } else { char current_pwd[MAXPWLEN+1]; _this->m_server->GetPassword(current_pwd); vncPasswd::ToText current(current_pwd); BOOL password_changed = FALSE; for (int i=0; i<MAXPWLEN; i++) { if (passwd[i] != i+1) password_changed = TRUE; if ((passwd[i] >= 1) && (passwd[i] <= MAXPWLEN)) passwd[i] = current[passwd[i]-1]; } if (password_changed) { vnclog.Print(LL_INTINFO, VNCLOG("password changed\n")); vncPasswd::FromText crypt(passwd); _this->m_server->SetPassword(crypt); } } // Save the new settings to the server HWND hAutoDisplayNo = GetDlgItem(hwnd, IDC_AUTO_DISPLAY_NO); _this->m_server->SetAutoPortSelect( SendMessage(hAutoDisplayNo, BM_GETCHECK, 0, 0) == BST_CHECKED ); // only save the port number if we're not auto selecting! if (!_this->m_server->AutoPortSelect()) { BOOL success; UINT portno = GetDlgItemInt(hwnd, IDC_PORTNO, &success, TRUE); if (success) _this->m_server->SetPort(DISPLAY_TO_PORT(portno)); } HWND hConnectSock = GetDlgItem(hwnd, IDC_CONNECT_SOCK); _this->m_server->SockConnect( SendMessage(hConnectSock, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hConnectHTTP = GetDlgItem(hwnd, IDC_CONNECT_HTTP); _this->m_server->EnableHTTPConnect( SendMessage(hConnectHTTP, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hConnectCorba = GetDlgItem(hwnd, IDC_CONNECT_CORBA); _this->m_server->CORBAConnect( SendMessage(hConnectCorba, BM_GETCHECK, 0, 0) == BST_CHECKED ); // Remote input stuff HWND hEnableRemoteInputs = GetDlgItem(hwnd, IDC_DISABLE_INPUTS); _this->m_server->EnableRemoteInputs( SendMessage(hEnableRemoteInputs, BM_GETCHECK, 0, 0) != BST_CHECKED ); // Local input stuff HWND hDisableLocalInputs = GetDlgItem(hwnd, IDC_DISABLE_LOCAL_INPUTS); _this->m_server->DisableLocalInputs( SendMessage(hDisableLocalInputs, BM_GETCHECK, 0, 0) == BST_CHECKED ); // Wallpaper handling HWND hRemoveWallpaper = GetDlgItem(hwnd, IDC_REMOVE_WALLPAPER); _this->m_server->EnableRemoveWallpaper( SendMessage(hRemoveWallpaper, BM_GETCHECK, 0, 0) == BST_CHECKED ); // Lock settings handling if (SendMessage(GetDlgItem(hwnd, IDC_LOCKSETTING_LOCK), BM_GETCHECK, 0, 0) == BST_CHECKED) { _this->m_server->SetLockSettings(1); } else if (SendMessage(GetDlgItem(hwnd, IDC_LOCKSETTING_LOGOFF), BM_GETCHECK, 0, 0) == BST_CHECKED) { _this->m_server->SetLockSettings(2); } else { _this->m_server->SetLockSettings(0); } // Handle the polling stuff HWND hPollFullScreen = GetDlgItem(hwnd, IDC_POLL_FULLSCREEN); _this->m_server->PollFullScreen( SendMessage(hPollFullScreen, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); _this->m_server->PollForeground( SendMessage(hPollForeground, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); _this->m_server->PollUnderCursor( SendMessage(hPollUnderCursor, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); _this->m_server->PollConsoleOnly( SendMessage(hPollConsoleOnly, BM_GETCHECK, 0, 0) == BST_CHECKED ); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); _this->m_server->PollOnEventOnly( SendMessage(hPollOnEventOnly, BM_GETCHECK, 0, 0) == BST_CHECKED ); // And to the registry _this->Save(); // Was ok pressed? if (LOWORD(wParam) == IDOK) { // Yes, so close the dialog vnclog.Print(LL_INTINFO, VNCLOG("enddialog (OK)\n")); _this->m_returncode_valid = TRUE; EndDialog(hwnd, IDOK); _this->m_dlgvisible = FALSE; } return TRUE; } case IDCANCEL: vnclog.Print(LL_INTINFO, VNCLOG("enddialog (CANCEL)\n")); _this->m_returncode_valid = TRUE; EndDialog(hwnd, IDCANCEL); _this->m_dlgvisible = FALSE; return TRUE; case IDC_CONNECT_SOCK: // The user has clicked on the socket connect tickbox { HWND hConnectSock = GetDlgItem(hwnd, IDC_CONNECT_SOCK); BOOL connectsockon = (SendMessage(hConnectSock, BM_GETCHECK, 0, 0) == BST_CHECKED); HWND hAutoDisplayNo = GetDlgItem(hwnd, IDC_AUTO_DISPLAY_NO); EnableWindow(hAutoDisplayNo, connectsockon); HWND hPortNo = GetDlgItem(hwnd, IDC_PORTNO); EnableWindow(hPortNo, connectsockon && (SendMessage(hAutoDisplayNo, BM_GETCHECK, 0, 0) != BST_CHECKED)); HWND hPassword = GetDlgItem(hwnd, IDC_PASSWORD); EnableWindow(hPassword, connectsockon); } return TRUE; case IDC_POLL_FOREGROUND: case IDC_POLL_UNDER_CURSOR: // User has clicked on one of the polling mode buttons // affected by the pollconsole and pollonevent options { // Get the poll-mode buttons HWND hPollForeground = GetDlgItem(hwnd, IDC_POLL_FOREGROUND); HWND hPollUnderCursor = GetDlgItem(hwnd, IDC_POLL_UNDER_CURSOR); // Determine whether to enable the modifier options BOOL enabled = (SendMessage(hPollForeground, BM_GETCHECK, 0, 0) == BST_CHECKED) || (SendMessage(hPollUnderCursor, BM_GETCHECK, 0, 0) == BST_CHECKED); HWND hPollConsoleOnly = GetDlgItem(hwnd, IDC_CONSOLE_ONLY); EnableWindow(hPollConsoleOnly, enabled); HWND hPollOnEventOnly = GetDlgItem(hwnd, IDC_ONEVENT_ONLY); EnableWindow(hPollOnEventOnly, enabled); } return TRUE; case IDC_AUTO_DISPLAY_NO: // User has toggled the Auto Port Select feature. // If this is in use, then we don't allow the Display number field // to be modified! { // Get the auto select button HWND hPortNoAuto = GetDlgItem(hwnd, IDC_AUTO_DISPLAY_NO); // Should the portno field be modifiable? BOOL enable = SendMessage(hPortNoAuto, BM_GETCHECK, 0, 0) != BST_CHECKED; // Set the state HWND hPortNo = GetDlgItem(hwnd, IDC_PORTNO); EnableWindow(hPortNo, enable); } return TRUE; } break; } return 0; }