mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-21 13:03:10 +01:00
247 lines
7.3 KiB
C++
247 lines
7.3 KiB
C++
// Copyright (C) 1999 AT&T Laboratories Cambridge. All Rights Reserved.
|
|
//
|
|
// This file is part of the VNC system.
|
|
//
|
|
// The VNC system is free software; you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation; either version 2 of the License, or
|
|
// (at your option) any later version.
|
|
//
|
|
// This program is distributed in the hope that it will be useful,
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
// GNU General Public License for more details.
|
|
//
|
|
// You should have received a copy of the GNU General Public License
|
|
// along with this program; if not, write to the Free Software
|
|
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
|
|
// USA.
|
|
//
|
|
// If the source code for the VNC system is not available from the place
|
|
// whence you received this file, check http://www.uk.research.att.com/vnc or
|
|
// contact the authors on vnc@uk.research.att.com for information on obtaining it.
|
|
//
|
|
|
|
#include "stdhdrs.h"
|
|
#include "vncviewer.h"
|
|
#include "ClientConnection.h"
|
|
#include "Exception.h"
|
|
|
|
//AaronP
|
|
#include "SessionDialog.h"
|
|
//EndAaronP
|
|
|
|
#include "vncauth.h"
|
|
|
|
extern char sz_K1[254];
|
|
extern char sz_K2[64];
|
|
extern char sz_K3[256];
|
|
extern char sz_K4[64];
|
|
extern char sz_K5[64];
|
|
extern char sz_K6[64];
|
|
extern char sz_K7[64];
|
|
|
|
// This file contains the code for saving and loading connection info.
|
|
|
|
static OPENFILENAME ofn;
|
|
|
|
void ofnInit()
|
|
{
|
|
static char filter[] = "VNC files (*.vnc)\0*.vnc\0" \
|
|
"All files (*.*)\0*.*\0";
|
|
memset((void *) &ofn, 0, sizeof(OPENFILENAME));
|
|
|
|
// sf@2002 v1.1.1 - OPENFILENAME is Plateforme dependent !
|
|
// Under NT4, the dialog box wouldn't appear if we don't use OPENFILENAME_SIZE_VERSION_400
|
|
// when compiling using BCC55 under Windows 2000.
|
|
#ifdef OPENFILENAME_SIZE_VERSION_400
|
|
ofn.lStructSize = OPENFILENAME_SIZE_VERSION_400;
|
|
#else
|
|
ofn.lStructSize = sizeof(OPENFILENAME);
|
|
#endif
|
|
|
|
ofn.lpstrFilter = filter;
|
|
ofn.nMaxFile = _MAX_PATH;
|
|
ofn.nMaxFileTitle = _MAX_FNAME + _MAX_EXT;
|
|
ofn.lpstrDefExt = "vnc";
|
|
}
|
|
|
|
//
|
|
// SaveConnection
|
|
// Save info about current connection to a file
|
|
//
|
|
|
|
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);
|
|
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"));
|
|
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();
|
|
}
|
|
|
|
// returns zero if successful
|
|
int ClientConnection::LoadConnection(char *fname, bool fFromDialog)
|
|
{
|
|
// The Connection Profile ".vnc" has been required from Connection Session Dialog Box
|
|
if (fFromDialog)
|
|
{
|
|
char tname[_MAX_FNAME + _MAX_EXT];
|
|
ofnInit();
|
|
ofn.hwndOwner = m_hSessionDialog;
|
|
ofn.lpstrFile = fname;
|
|
ofn.lpstrFileTitle = tname;
|
|
ofn.Flags = OFN_HIDEREADONLY;
|
|
|
|
// Open the FileSelection Dialog boxq
|
|
if (GetOpenFileName(&ofn) == 0)
|
|
return -1;
|
|
}
|
|
|
|
if (GetPrivateProfileString("connection", "host", "", m_host, MAX_HOST_NAME_LEN, fname) == 0) {
|
|
//AaronP
|
|
// MessageBox(m_hwnd, sz_K5, sz_K6, MB_ICONERROR | MB_OK | MB_SETFOREGROUND | MB_TOPMOST);
|
|
// return -1;
|
|
//EndAaronP
|
|
}
|
|
if ( (m_port = GetPrivateProfileInt("connection", "port", 0, fname)) == 0)
|
|
{
|
|
//
|
|
//MessageBox(m_hwnd, sz_K7, sz_K6, MB_ICONERROR | MB_OK | MB_SETFOREGROUND | MB_TOPMOST);
|
|
// in case options.vnc does not exist return to normal menu
|
|
return -1;
|
|
}
|
|
|
|
GetPrivateProfileString("connection", "proxyhost", "", m_proxyhost, MAX_HOST_NAME_LEN, fname);
|
|
m_proxyport = GetPrivateProfileInt("connection", "proxyport", 0, fname);
|
|
m_fUseProxy = GetPrivateProfileInt("options", "UseProxy", 0, fname);
|
|
|
|
char buf[32];
|
|
m_encPasswd[0] = '\0';
|
|
if (GetPrivateProfileString("connection", "password", "", buf, 32, fname) > 0) {
|
|
for (int i = 0; i < MAXPWLEN; i++) {
|
|
int x = 0;
|
|
sscanf(buf+i*2, "%2x", &x);
|
|
m_encPasswd[i] = (unsigned char) x;
|
|
}
|
|
}
|
|
|
|
// The Connection Profile ".vnc" has been required from Connection Session Dialog Box
|
|
// Load the rest of params
|
|
char optionfile[MAX_PATH];
|
|
char *tempvar=NULL;
|
|
tempvar = getenv( "TEMP" );
|
|
if (tempvar) strcpy(optionfile,tempvar);
|
|
else strcpy(optionfile,"");
|
|
strcat(optionfile,"\\options.vnc");
|
|
|
|
if (fFromDialog)
|
|
{
|
|
m_opts.Load(fname);
|
|
m_opts.Register();
|
|
}
|
|
//AaronP
|
|
else if (strcmp(m_host, "") == 0 ||
|
|
strcmp(fname,optionfile)==0)
|
|
{
|
|
// Load the rest of params
|
|
strcpy(m_opts.m_proxyhost,m_proxyhost);
|
|
m_opts.m_proxyport=m_proxyport;
|
|
m_opts.m_fUseProxy=m_fUseProxy;
|
|
m_opts.Load(fname);
|
|
m_opts.Register();
|
|
// Then display the session dialog to get missing params again
|
|
SessionDialog sessdlg(&m_opts, this, m_pDSMPlugin); //sf@2002
|
|
if (!sessdlg.DoDialog())
|
|
{
|
|
throw QuietException("");
|
|
}
|
|
_tcsncpy(m_host, sessdlg.m_host_dialog, MAX_HOST_NAME_LEN);
|
|
m_port = sessdlg.m_port;
|
|
|
|
_tcsncpy(m_proxyhost, sessdlg.m_proxyhost, MAX_HOST_NAME_LEN);
|
|
m_proxyport = sessdlg.m_proxyport;
|
|
m_fUseProxy = sessdlg.m_fUseProxy;
|
|
|
|
};
|
|
//EndAaronP
|
|
return 0;
|
|
} |