Patch level : 12.00 1402
Files correlati : ve01.exe Commento : Corretta abilitazione CIG CUP
This commit is contained in:
parent
326a4d3401
commit
c83b9320ae
@ -1491,6 +1491,241 @@ void xvt_font_unmap(XVT_FNTID font_id)
|
|||||||
font.SetWin(NULL_WIN);
|
font.SetWin(NULL_WIN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// HTTP
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
static char * protocols[] = { "ftp", "http", "https", nullptr };
|
||||||
|
|
||||||
|
BOOLEAN xvt_is_network_protocol(const char *protocol)
|
||||||
|
{
|
||||||
|
if (protocol != nullptr)
|
||||||
|
for (int i = 0; protocols[i] != nullptr; i++)
|
||||||
|
if (strcmp(protocol, protocols[i]) == 0)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int xvt_sys_timeout(const char* server)
|
||||||
|
{
|
||||||
|
wxString var = _T("Timeout[");
|
||||||
|
|
||||||
|
var += server;
|
||||||
|
var += "]";
|
||||||
|
|
||||||
|
int timeout = xvt_sys_get_profile_int(xvt_fsys_get_campo_ini(), var, "Timeout", -1);
|
||||||
|
|
||||||
|
if (timeout < 0)
|
||||||
|
timeout = xvt_sys_get_profile_int(xvt_fsys_get_campo_ini(), "Server", "Timeout", 120);
|
||||||
|
|
||||||
|
return timeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void xvt_sys_proxy(wxString & proxy)
|
||||||
|
{
|
||||||
|
xvt_sys_get_profile_string(xvt_fsys_get_campo_ini(), "Server", "Proxy", "",
|
||||||
|
proxy.GetWriteBuf(MAX_PATH), MAX_PATH);
|
||||||
|
proxy.UngetWriteBuf();
|
||||||
|
}
|
||||||
|
|
||||||
|
static int decode_result(wxString & resfile, char * &result)
|
||||||
|
{
|
||||||
|
wxString strResult;
|
||||||
|
wxFileInputStream res(resfile);
|
||||||
|
|
||||||
|
while (!res.Eof())
|
||||||
|
strResult += res.GetC();
|
||||||
|
strResult = strResult.AfterFirst(_T(' '));
|
||||||
|
|
||||||
|
int rescode = atoi(strResult.Left(3));
|
||||||
|
int pos = strResult.Find("<html>");
|
||||||
|
|
||||||
|
strResult = strResult.Mid(pos + 7);
|
||||||
|
pos = strResult.Find("</html>");
|
||||||
|
if (pos >= 0)
|
||||||
|
strResult = strResult.Left(pos);
|
||||||
|
result = _strdup(strResult);
|
||||||
|
return rescode;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOLEAN is_ftp(const char* file) // @parm ritorna se file è un direttorio di cui controllare l'esistenza
|
||||||
|
{
|
||||||
|
return file && *file && strncmp(file, "ftp:", 4) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOLEAN is_http(const char* file) // @parm ritorna se file è un direttorio di cui controllare l'esistenza
|
||||||
|
{
|
||||||
|
return file && *file && (strncmp(file, "http:", 5) == 0 || strncmp(file, "https:", 6) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOLEAN is_https(const char* file) // @parm ritorna se file è un direttorio di cui controllare l'esistenza
|
||||||
|
{
|
||||||
|
return file && *file && strncmp(file, "https:", 6) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOLEAN is_remote(const char* file)
|
||||||
|
{
|
||||||
|
return is_ftp(file) || is_http(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BOOLEAN is_local(const char* file)
|
||||||
|
{
|
||||||
|
return !is_remote(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
int xvt_http_get(const char *remote, const char * local, const char * user, const char * password)
|
||||||
|
{
|
||||||
|
wxString tempresult = wxFileName::CreateTempFileName("res");
|
||||||
|
wxString command = _T("./curl -i ");
|
||||||
|
wxString proxy;
|
||||||
|
|
||||||
|
if (user != nullptr)
|
||||||
|
{
|
||||||
|
command += _T("-u ");
|
||||||
|
command += user;
|
||||||
|
command += _T(":");
|
||||||
|
if (password != nullptr)
|
||||||
|
command += password;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
xvt_sys_proxy(proxy);
|
||||||
|
if (!proxy.IsEmpty())
|
||||||
|
{
|
||||||
|
command += _T("-x ");
|
||||||
|
command += proxy;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
command += _T("-o ");
|
||||||
|
command += tempresult;
|
||||||
|
command += _T(" ");
|
||||||
|
command += remote;
|
||||||
|
|
||||||
|
wxArrayString r;
|
||||||
|
long retcode = wxExecute(command, r, wxEXEC_SYNC);
|
||||||
|
int rescode = -1;
|
||||||
|
|
||||||
|
if (retcode == 0)
|
||||||
|
{
|
||||||
|
char *result;
|
||||||
|
|
||||||
|
rescode = decode_result(tempresult, result);
|
||||||
|
|
||||||
|
wxFileOutputStream out(local);
|
||||||
|
|
||||||
|
out.Write(result, strlen(result));
|
||||||
|
delete result;
|
||||||
|
}
|
||||||
|
wxRemoveFile(tempresult);
|
||||||
|
return rescode;
|
||||||
|
}
|
||||||
|
|
||||||
|
int xvt_http_post(const char *remote, const char * result, const char * content_type,
|
||||||
|
const char * request, const char * user, const char * password)
|
||||||
|
{
|
||||||
|
wxString command = _T("./curl -i ");
|
||||||
|
wxString tempresult = wxFileName::CreateTempFileName("res");
|
||||||
|
wxArrayString res;
|
||||||
|
wxString proxy;
|
||||||
|
|
||||||
|
command += _T("-X POST ");
|
||||||
|
command += remote;
|
||||||
|
command += _T(" ");
|
||||||
|
if (user != nullptr)
|
||||||
|
{
|
||||||
|
command += _T("-u ");
|
||||||
|
command += user;
|
||||||
|
command += _T(":");
|
||||||
|
if (password != nullptr)
|
||||||
|
command += password;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
xvt_sys_proxy(proxy);
|
||||||
|
if (!proxy.IsEmpty())
|
||||||
|
{
|
||||||
|
command += _T("-x ");
|
||||||
|
command += proxy;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
command += _T("-H \"Content-Type: ");
|
||||||
|
command += content_type != nullptr ? content_type : "text/html ";
|
||||||
|
command += _T("\" ");
|
||||||
|
if (request != nullptr)
|
||||||
|
{
|
||||||
|
command += _T("--data \"");
|
||||||
|
command += request;
|
||||||
|
command += _T("\" ");
|
||||||
|
}
|
||||||
|
command += _T(" -o ");
|
||||||
|
command += tempresult;
|
||||||
|
|
||||||
|
wxArrayString r;
|
||||||
|
long retcode = wxExecute(command, r, wxEXEC_SYNC);
|
||||||
|
int rescode = -1;
|
||||||
|
|
||||||
|
if (retcode == 0)
|
||||||
|
{
|
||||||
|
char * strResult;
|
||||||
|
|
||||||
|
rescode = decode_result(tempresult, strResult);
|
||||||
|
|
||||||
|
wxFileOutputStream out(result);
|
||||||
|
|
||||||
|
out.Write(strResult, strlen(strResult));
|
||||||
|
delete strResult;
|
||||||
|
}
|
||||||
|
wxRemoveFile(tempresult);
|
||||||
|
return rescode;
|
||||||
|
}
|
||||||
|
|
||||||
|
int xvt_http_put(const char * local, const char *remote, const char * user, const char * password)
|
||||||
|
{
|
||||||
|
wxString command = _T("./curl -i ");
|
||||||
|
wxString tempresult = wxFileName::CreateTempFileName("res");
|
||||||
|
wxArrayString res;
|
||||||
|
int rescode = 0;
|
||||||
|
wxString proxy;
|
||||||
|
|
||||||
|
if (user != nullptr)
|
||||||
|
{
|
||||||
|
command += _T("-u ");
|
||||||
|
command += user;
|
||||||
|
command += _T(":");
|
||||||
|
if (password != nullptr)
|
||||||
|
command += password;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
xvt_sys_proxy(proxy);
|
||||||
|
if (!proxy.IsEmpty())
|
||||||
|
{
|
||||||
|
command += _T("-x ");
|
||||||
|
command += proxy;
|
||||||
|
command += _T(" ");
|
||||||
|
}
|
||||||
|
command += _T("-T ");
|
||||||
|
command += local;
|
||||||
|
command += _T(" ");
|
||||||
|
command += remote;
|
||||||
|
command += _T(" -o ");
|
||||||
|
command += tempresult;
|
||||||
|
|
||||||
|
long retcode = wxExecute(command, res);
|
||||||
|
|
||||||
|
if (retcode == 0)
|
||||||
|
{
|
||||||
|
wxFileInputStream res(tempresult);
|
||||||
|
long long size = wxFileName::GetSize(tempresult).GetValue();
|
||||||
|
wxString buffer;
|
||||||
|
|
||||||
|
res.Read(buffer.GetWriteBuf(size), size);
|
||||||
|
buffer.UngetWriteBuf();
|
||||||
|
buffer = buffer.SubString(0, size);
|
||||||
|
buffer = buffer.Mid(9);
|
||||||
|
rescode = atoi(buffer.Left(3));
|
||||||
|
}
|
||||||
|
wxRemoveFile(tempresult);
|
||||||
|
return rescode;
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// File system
|
// File system
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1498,7 +1733,21 @@ void xvt_font_unmap(XVT_FNTID font_id)
|
|||||||
BOOLEAN xvt_fsys_build_pathname(char* mbs, const char* volname, const char* dirname, const char* leafroot, const char* leafext, const char* /* leafvers */)
|
BOOLEAN xvt_fsys_build_pathname(char* mbs, const char* volname, const char* dirname, const char* leafroot, const char* leafext, const char* /* leafvers */)
|
||||||
{
|
{
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
_makepath(mbs, volname, dirname, leafroot, leafext);
|
if (xvt_is_network_protocol(volname))
|
||||||
|
{
|
||||||
|
char path[MAX_PATH];
|
||||||
|
|
||||||
|
_makepath(path, nullptr, dirname, leafroot, leafext);
|
||||||
|
sprintf(mbs, "%s:%s", volname, path);
|
||||||
|
|
||||||
|
const int len = strlen(mbs);
|
||||||
|
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
if (mbs[i] == '\\')
|
||||||
|
mbs[i] = '/';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
_makepath(mbs, volname, dirname, leafroot, leafext);
|
||||||
#else
|
#else
|
||||||
*mbs = '\0';
|
*mbs = '\0';
|
||||||
if (dirname && *dirname)
|
if (dirname && *dirname)
|
||||||
@ -1886,20 +2135,20 @@ void xvt_fsys_set_file_time(const char * file, struct tm * ctime, struct tm * at
|
|||||||
|
|
||||||
static bool xvt_sys_ftp_passive_mode(const char* server)
|
static bool xvt_sys_ftp_passive_mode(const char* server)
|
||||||
{
|
{
|
||||||
static char pasv = ' ';
|
static char pasv = ' ';
|
||||||
if (pasv <= ' ')
|
if (pasv <= ' ')
|
||||||
{
|
{
|
||||||
char str[16] = "";
|
char str[16] = "";
|
||||||
xvt_sys_get_profile_string(xvt_fsys_get_campo_ini(), "Server", "ftp", "Passive", str, sizeof(str));
|
xvt_sys_get_profile_string(xvt_fsys_get_campo_ini(), "Server", "ftp", "Passive", str, sizeof(str));
|
||||||
pasv = toupper(str[0]);
|
pasv = toupper(str[0]);
|
||||||
}
|
}
|
||||||
return pasv != 'A';
|
return pasv != 'A';
|
||||||
}
|
}
|
||||||
|
|
||||||
SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
||||||
{
|
{
|
||||||
wxBusyCursor hourglass;
|
wxBusyCursor hourglass;
|
||||||
|
wxString ext;
|
||||||
SLIST list = xvt_slist_create();
|
SLIST list = xvt_slist_create();
|
||||||
|
|
||||||
int flags = wxFILE | wxDIR;
|
int flags = wxFILE | wxDIR;
|
||||||
@ -1910,9 +2159,12 @@ SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
flags = wxFILE;
|
flags = wxFILE;
|
||||||
|
if (flags == wxFILE)
|
||||||
|
wxSplitPath(pat, NULL, NULL, &ext);
|
||||||
|
|
||||||
const wxURL url(pat);
|
const wxURL url(pat);
|
||||||
if (url.GetScheme() == "ftp")
|
|
||||||
|
if (is_ftp(pat))
|
||||||
{
|
{
|
||||||
const wxString strHost = url.GetServer();
|
const wxString strHost = url.GetServer();
|
||||||
const wxString strUser = url.GetUser();
|
const wxString strUser = url.GetUser();
|
||||||
@ -1929,7 +2181,10 @@ SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
|||||||
ftp.SetPassword(strPwd);
|
ftp.SetPassword(strPwd);
|
||||||
}
|
}
|
||||||
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
||||||
|
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
|
||||||
|
ftp.SetTimeout(timeout);
|
||||||
const bool bConnected = ftp.Connect(strHost);
|
const bool bConnected = ftp.Connect(strHost);
|
||||||
if (bConnected && ftp.ChDir(fnDir))
|
if (bConnected && ftp.ChDir(fnDir))
|
||||||
{
|
{
|
||||||
@ -1937,8 +2192,8 @@ SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
|||||||
RemotePath = RemotePath.BeforeLast('/');
|
RemotePath = RemotePath.BeforeLast('/');
|
||||||
|
|
||||||
wxArrayString files;
|
wxArrayString files;
|
||||||
|
|
||||||
ftp.GetList(files, fnName, true);
|
ftp.GetList(files, fnName, true);
|
||||||
|
|
||||||
for (size_t i = 0; i < files.GetCount(); i++)
|
for (size_t i = 0; i < files.GetCount(); i++)
|
||||||
{
|
{
|
||||||
const int type = files[i][0] == 'd' ? wxDIR : wxFILE;
|
const int type = files[i][0] == 'd' ? wxDIR : wxFILE;
|
||||||
@ -1946,32 +2201,99 @@ SLIST xvt_fsys_list_files(const char *type, const char *pat, BOOLEAN dirs)
|
|||||||
{
|
{
|
||||||
wxString f = RemotePath; f << '/' << files[i].AfterLast(' ');
|
wxString f = RemotePath; f << '/' << files[i].AfterLast(' ');
|
||||||
wxString size = files[i].Mid(30);
|
wxString size = files[i].Mid(30);
|
||||||
xvt_slist_add_at_elt(list, NULL, f, type == wxFILE ? wxAtol(size) : -1L);
|
bool bGood = true;
|
||||||
|
|
||||||
|
if (flags == wxFILE && ext.Len() >= 3)
|
||||||
|
bGood = wxStricmp(ext, size.AfterLast('.')) == 0;
|
||||||
|
if (bGood)
|
||||||
|
xvt_slist_add_at_elt(list, NULL, f, type == wxFILE ? wxAtol(size) : -1L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else //normale list_files
|
else
|
||||||
{
|
if (is_http(pat))
|
||||||
wxString ext;
|
{
|
||||||
if (flags == wxFILE)
|
const wxString strHost = url.GetServer();
|
||||||
wxSplitPath(pat, NULL, NULL, &ext);
|
const wxString strUser = url.GetUser();
|
||||||
|
const wxString strPwd = url.GetPassword();
|
||||||
|
const wxFileName fnPath = url.GetPath();
|
||||||
|
const wxString fnDir = fnPath.GetPath(wxPATH_GET_VOLUME, wxPATH_UNIX);
|
||||||
|
const wxString fnName = fnPath.GetFullName();
|
||||||
|
wxHTTP http;
|
||||||
|
|
||||||
wxString f = ::wxFindFirstFile(pat, flags);
|
if (!strUser.IsEmpty())
|
||||||
while (!f.IsEmpty())
|
{
|
||||||
{
|
http.SetUser(strUser);
|
||||||
if (f.StartsWith(".\\") || f.StartsWith("./"))
|
http.SetPassword(strPwd);
|
||||||
f = f.Mid(2);
|
}
|
||||||
|
|
||||||
bool bGood = true;
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
if (flags == wxFILE && ext.Len() >= 3)
|
|
||||||
bGood = wxStricmp(ext, f.AfterLast('.')) == 0;
|
|
||||||
if (bGood)
|
|
||||||
xvt_slist_add_at_elt(list, NULL, f, 0L);
|
|
||||||
f = ::wxFindNextFile();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
http.SetTimeout(timeout);
|
||||||
|
if (http.Connect(strHost))
|
||||||
|
{
|
||||||
|
wxString RemotePath = pat;
|
||||||
|
RemotePath = RemotePath.BeforeLast('/');
|
||||||
|
RemotePath += _T("/");
|
||||||
|
|
||||||
|
wxArrayString files;
|
||||||
|
wxString dir = wxFileName::CreateTempFileName("dir");
|
||||||
|
char * result = nullptr;
|
||||||
|
|
||||||
|
int rescode = xvt_http_get(RemotePath, dir, strUser.IsEmpty() ? nullptr : strUser.c_str(),
|
||||||
|
strPwd.IsEmpty() ? nullptr : strPwd.c_str());
|
||||||
|
|
||||||
|
wxTextFile fdir(dir);
|
||||||
|
wxString line;
|
||||||
|
|
||||||
|
fdir.Open();
|
||||||
|
for (line = fdir.GetFirstLine(); !fdir.Eof(); line = fdir.GetNextLine())
|
||||||
|
{
|
||||||
|
const int type = line[line.Len() - 1] == '/' ? wxDIR : wxFILE;
|
||||||
|
|
||||||
|
if (type & flags) // Entry type matches desired mask?
|
||||||
|
{
|
||||||
|
if (line.Find("<li><a href=\"") == 0)
|
||||||
|
{
|
||||||
|
line = line.Mid(13);
|
||||||
|
line = line.BeforeFirst('\"');
|
||||||
|
|
||||||
|
bool bGood = true;
|
||||||
|
|
||||||
|
if (flags == wxFILE && ext.Len() >= 3)
|
||||||
|
bGood = wxStricmp(ext, line.AfterLast('.')) == 0;
|
||||||
|
if (bGood)
|
||||||
|
{
|
||||||
|
wxString file = RemotePath;
|
||||||
|
|
||||||
|
file += line;
|
||||||
|
xvt_slist_add_at_elt(list, nullptr, file, type == wxFILE ? wxAtol(file) : -1L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fdir.Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else //normale list_files
|
||||||
|
{
|
||||||
|
wxString f = ::wxFindFirstFile(pat, flags);
|
||||||
|
|
||||||
|
while (!f.IsEmpty())
|
||||||
|
{
|
||||||
|
if (f.StartsWith(".\\") || f.StartsWith("./"))
|
||||||
|
f = f.Mid(2);
|
||||||
|
|
||||||
|
bool bGood = true;
|
||||||
|
|
||||||
|
if (flags == wxFILE && ext.Len() >= 3)
|
||||||
|
bGood = wxStricmp(ext, f.AfterLast('.')) == 0;
|
||||||
|
if (bGood)
|
||||||
|
xvt_slist_add_at_elt(list, NULL, f, 0L);
|
||||||
|
f = ::wxFindNextFile();
|
||||||
|
}
|
||||||
|
}
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1996,140 +2318,272 @@ BOOLEAN xvt_fsys_set_dir(const DIRECTORY *dirp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
BOOLEAN xvt_fsys_fcopy(const char* orig, const char* dest)
|
BOOLEAN xvt_fsys_fcopy(const char* orig, const char* dest)
|
||||||
{
|
{
|
||||||
wxURL orig_url(orig);
|
wxURL orig_url(orig);
|
||||||
|
|
||||||
wxInputStream* input = nullptr;
|
|
||||||
const wxString ischeme = orig_url.GetScheme();
|
const wxString ischeme = orig_url.GetScheme();
|
||||||
|
wxFTP iftp;
|
||||||
|
wxInputStream* input = nullptr;
|
||||||
|
wxURL dest_url(dest);
|
||||||
|
const wxString oscheme = dest_url.GetScheme();
|
||||||
|
wxFTP oftp;
|
||||||
|
wxOutputStream* output = nullptr;
|
||||||
|
wxHTTP ihttp;
|
||||||
|
|
||||||
if (ischeme == "ftp")
|
if (is_ftp(orig))
|
||||||
{
|
{
|
||||||
wxFTP& ftp = *wxStaticCast(&orig_url.GetProtocol(), wxFTP);
|
|
||||||
const wxString strHost = orig_url.GetServer();
|
const wxString strHost = orig_url.GetServer();
|
||||||
const wxString strUser = orig_url.GetUser();
|
const wxString strUser = orig_url.GetUser();
|
||||||
const wxString strPwd = orig_url.GetPassword();
|
const wxString strPwd = orig_url.GetPassword();
|
||||||
const wxFileName fnPath = orig_url.GetPath();
|
const wxFileName fnPath = orig_url.GetPath();
|
||||||
const wxString fnDir = fnPath.GetPath(wxPATH_GET_VOLUME, wxPATH_UNIX);
|
const wxString fnDir = fnPath.GetPath(wxPATH_GET_VOLUME, wxPATH_UNIX);
|
||||||
const wxString fnName = fnPath.GetFullName();
|
const wxString fnName = fnPath.GetFullName();
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
|
||||||
if (!strUser.IsEmpty())
|
if (!strUser.IsEmpty())
|
||||||
{
|
{
|
||||||
ftp.SetUser(strUser);
|
iftp.SetUser(strUser);
|
||||||
ftp.SetPassword(strPwd);
|
iftp.SetPassword(strPwd);
|
||||||
}
|
}
|
||||||
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
iftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
||||||
|
iftp.SetTimeout(timeout);
|
||||||
if (ftp.Connect(strHost) && ftp.SetBinary() && ftp.ChDir(fnDir))
|
if (iftp.Connect(strHost) && iftp.SetBinary() && iftp.ChDir(fnDir))
|
||||||
input = ftp.GetInputStream(fnName);
|
input = iftp.GetInputStream(fnName);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (ischeme == "http")
|
if (is_http(orig))
|
||||||
return false;
|
{
|
||||||
/*{
|
|
||||||
|
|
||||||
const wxString strHost = orig_url.GetServer();
|
const wxString strHost = orig_url.GetServer();
|
||||||
|
const short intPort = atoi(dest_url.GetPort());
|
||||||
const wxString strUser = orig_url.GetUser();
|
const wxString strUser = orig_url.GetUser();
|
||||||
const wxString strPwd = orig_url.GetPassword();
|
const wxString strPwd = orig_url.GetPassword();
|
||||||
const wxFileName fnPath = orig_url.GetPath();
|
const wxFileName fnPath = orig_url.GetPath();
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
wxHTTP http;
|
|
||||||
|
|
||||||
if (!strUser.IsEmpty())
|
if (!strUser.IsEmpty())
|
||||||
{
|
{
|
||||||
http.SetUser(strUser);
|
ihttp.SetUser(strUser);
|
||||||
http.SetPassword(strPwd);
|
ihttp.SetPassword(strPwd);
|
||||||
}
|
}
|
||||||
http.SetHeader(_T("Content-type"), _T("application/x-www-form-urlencoded")); //remember to define “Content-type: application/x-www-form-urlencoded”, or remote server can’t get your posted data.
|
|
||||||
wxString PostData("postdata=");
|
|
||||||
|
|
||||||
PostData << fnPath.GetFullPath();
|
wxString ContentType = _T("application");
|
||||||
http.SetPostBuffer(PostData); //it’s the data to be posted
|
wxString oext;
|
||||||
if (http.Connect(strHost))
|
|
||||||
{
|
wxSplitPath(dest, nullptr, nullptr, &oext);
|
||||||
input = http.GetInputStream(_T("/getfile.php"));
|
if (oext == "xml")
|
||||||
if (input != nullptr && http.GetError() != wxPROTO_NOERR)
|
ContentType += _T("xml");
|
||||||
{
|
else
|
||||||
delete input;
|
ContentType += _T("octet - stream");
|
||||||
input = nullptr;
|
ihttp.SetHeader(_T("Content-type"), ContentType); //remember to define “Content-type: application/x-www-form-urlencoded”, or remote server can’t get your posted data.
|
||||||
}
|
ihttp.SetTimeout(timeout);
|
||||||
}
|
wxApp::IsMainLoopRunning();
|
||||||
}*/
|
if (ihttp.Connect(strHost, intPort))
|
||||||
|
input = ihttp.GetInputStream(fnPath.GetFullPath(wxPATH_UNIX));
|
||||||
|
}
|
||||||
else
|
else
|
||||||
input = new wxFileInputStream(orig);
|
input = new wxFileInputStream(orig);
|
||||||
if (input == nullptr)
|
if (input == nullptr)
|
||||||
return false;
|
return false;
|
||||||
|
if (is_ftp(dest))
|
||||||
wxURL dest_url(dest);
|
|
||||||
wxOutputStream* output = NULL;
|
|
||||||
const wxString scheme = dest_url.GetScheme();
|
|
||||||
|
|
||||||
if (scheme == "ftp")
|
|
||||||
{
|
{
|
||||||
wxFTP ftp;
|
|
||||||
const wxString strHost = dest_url.GetServer();
|
const wxString strHost = dest_url.GetServer();
|
||||||
const wxString strUser = dest_url.GetUser();
|
const wxString strUser = dest_url.GetUser();
|
||||||
const wxString strPwd = dest_url.GetPassword();
|
const wxString strPwd = dest_url.GetPassword();
|
||||||
const wxFileName fnPath = dest_url.GetPath();
|
const wxFileName fnPath = dest_url.GetPath();
|
||||||
const wxString fnDir = fnPath.GetPath(wxPATH_GET_VOLUME, wxPATH_UNIX);
|
const wxString fnDir = fnPath.GetPath(wxPATH_GET_VOLUME, wxPATH_UNIX);
|
||||||
const wxString fnName = fnPath.GetFullName();
|
const wxString fnName = fnPath.GetFullName();
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
|
||||||
if (!strUser.IsEmpty())
|
if (!strUser.IsEmpty())
|
||||||
{
|
{
|
||||||
ftp.SetUser(strUser);
|
oftp.SetUser(strUser);
|
||||||
ftp.SetPassword(strPwd);
|
oftp.SetPassword(strPwd);
|
||||||
|
}
|
||||||
|
oftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
||||||
|
oftp.SetTimeout(timeout);
|
||||||
|
if (oftp.Connect(strHost) && oftp.SetBinary() && oftp.ChDir(fnDir))
|
||||||
|
{
|
||||||
|
xvt_fsys_remove_file(dest);
|
||||||
|
output = oftp.GetOutputStream(fnName);
|
||||||
}
|
}
|
||||||
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
|
||||||
|
|
||||||
if (ftp.Connect(strHost) && ftp.SetBinary() && ftp.ChDir(fnDir))
|
|
||||||
output = ftp.GetOutputStream(fnName);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (scheme == "http")
|
if (is_http(dest))
|
||||||
return false;
|
{
|
||||||
/*{
|
|
||||||
const wxString strHost = dest_url.GetServer();
|
const wxString strHost = dest_url.GetServer();
|
||||||
|
const short intPort = atoi(dest_url.GetPort());
|
||||||
const wxString strUser = dest_url.GetUser();
|
const wxString strUser = dest_url.GetUser();
|
||||||
const wxString strPwd = dest_url.GetPassword();
|
const wxString strPwd = dest_url.GetPassword();
|
||||||
const wxFileName fnPath = dest_url.GetPath();
|
const wxFileName fnPath = dest_url.GetPath();
|
||||||
wxHTTP http;
|
bool ok = false;
|
||||||
|
wxArrayString res;
|
||||||
|
wxString tempname = wxFileName::CreateTempFileName("htt");
|
||||||
|
wxString tempresult = wxFileName::CreateTempFileName("res");
|
||||||
|
wxFileOutputStream temp(tempname);
|
||||||
|
int size = input->GetSize();
|
||||||
|
|
||||||
|
input->Read(temp);
|
||||||
|
temp.Close();
|
||||||
|
|
||||||
|
int rescode = xvt_http_put(tempname, dest, strUser.IsEmpty() ? nullptr: strUser.c_str(),
|
||||||
|
strPwd.IsEmpty() ? nullptr : strPwd.c_str());
|
||||||
|
|
||||||
|
ok = (rescode > 199) && (rescode < 300);
|
||||||
|
if (is_local(orig) && input != nullptr)
|
||||||
|
delete input;
|
||||||
|
return ok;
|
||||||
|
/* provare sulla 3.3
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
int size = input->GetSize();
|
||||||
|
wxSocketClient * socket = new wxSocketClient();
|
||||||
|
wxString header;
|
||||||
|
wxString buffer;
|
||||||
|
wxString data;
|
||||||
|
wxString oext;
|
||||||
|
|
||||||
|
wxSplitPath(dest, nullptr, nullptr, &oext);
|
||||||
|
input->Read(buffer, size);
|
||||||
|
buffer[size] = '\0';
|
||||||
|
data << buffer;
|
||||||
|
delete[]buffer;
|
||||||
|
|
||||||
|
//Set up header
|
||||||
|
//PUT
|
||||||
|
header += "PUT ";
|
||||||
|
header += dest;
|
||||||
|
header += " HTTP/1.1\n";
|
||||||
|
//Write user agent
|
||||||
|
header += "User-Agent: wxWidget 2.x\n";
|
||||||
|
//Write host website name
|
||||||
|
header += "Host: ";
|
||||||
|
header += strHost;
|
||||||
|
header += ":";
|
||||||
|
header += wxString::Format("%d", intPort);
|
||||||
|
header += "\n";
|
||||||
|
//Write content type
|
||||||
|
header += "Content-Type: application";
|
||||||
|
if (oext == "xml")
|
||||||
|
header += "/xml";
|
||||||
|
else
|
||||||
|
header += "/octet - stream";
|
||||||
|
header += "\n";
|
||||||
|
//Write POST content length
|
||||||
|
header += "Content-Length: ";
|
||||||
|
int dlen = data.Len();
|
||||||
|
int hlen = header.Len();
|
||||||
|
header += wxString::Format("%d", dlen);
|
||||||
|
header += "\n\n";
|
||||||
|
//Print on screen to make sure it looks right
|
||||||
|
wxMessageBox(header);
|
||||||
|
header += data;
|
||||||
|
wxMessageBox(header);
|
||||||
|
int alllen = header.Len();
|
||||||
|
//Connect to host
|
||||||
|
|
||||||
|
wxIPV4address * address = new wxIPV4address();
|
||||||
|
|
||||||
|
address->Hostname(strHost);
|
||||||
|
address->Service(intPort);
|
||||||
|
if (socket->Connect(*address))
|
||||||
|
{
|
||||||
|
//Write header
|
||||||
|
socket->Write(header.c_str(), header.Len());
|
||||||
|
wxMessageBox(wxString::Format("Wrote %d out of %d bytes", socket->LastCount(), header.Len()));
|
||||||
|
if (socket->Error())
|
||||||
|
wxMessageBox(wxString::Format("Errore %d", socket->LastError()));
|
||||||
|
//Write data
|
||||||
|
// socket->Write(data.c_str(), data.Len());
|
||||||
|
// wxMessageBox(wxString::Format("Wrote %d out of %d bytes", socket->LastCount(), data.Len()));
|
||||||
|
|
||||||
|
//Get Response
|
||||||
|
wxString buf;
|
||||||
|
|
||||||
|
socket->Read(buf.GetWriteBuf(1000), 1000);
|
||||||
|
buf.UngetWriteBuf();
|
||||||
|
//Trim response to what was read from stream
|
||||||
|
buf = buf.SubString(0, socket->LastCount() - 1);
|
||||||
|
buf = buf.Mid(9);
|
||||||
|
int rescode = atoi(buf.Left(3));
|
||||||
|
wxMessageBox(wxString::Format("Read %d bytes: %s", socket->LastCount(), buf));
|
||||||
|
ok = (rescode > 199) && (rescode < 300);
|
||||||
|
}
|
||||||
|
delete socket;
|
||||||
|
delete address;
|
||||||
|
*/
|
||||||
|
/* provare nella 3.3
|
||||||
|
wxHTTP ohttp;
|
||||||
|
|
||||||
if (!strUser.IsEmpty())
|
if (!strUser.IsEmpty())
|
||||||
{
|
{
|
||||||
http.SetUser(strUser);
|
ohttp.SetUser(strUser);
|
||||||
http.SetPassword(strPwd);
|
ohttp.SetPassword(strPwd);
|
||||||
}
|
}
|
||||||
http.SetHeader(_T("Content-type"), _T("application/x-www-form-urlencoded")); //remember to define “Content-type: application/x-www-form-urlencoded”, or remote server can’t get your posted data.
|
if (ohttp.Connect(strHost, intPort))
|
||||||
|
|
||||||
wxString PostData("postdata=");
|
|
||||||
|
|
||||||
PostData << fnPath.GetFullPath();
|
|
||||||
http.SetPostBuffer(PostData); //it’s the data to be posted
|
|
||||||
if (http.Connect(strHost))
|
|
||||||
{
|
{
|
||||||
output = http.GetResponse();
|
wxString PostData; // ("postdata=");
|
||||||
if (output != nullptr) && http.GetError() == wxPROTO_NOERR;
|
int size = input->GetSize();
|
||||||
|
char * buffer = new char[size + 1];
|
||||||
|
wxString ofile = fnPath.GetFullPath(wxPATH_UNIX);
|
||||||
|
|
||||||
|
ohttp.SetHeader(_T("POST "), ofile + _T(" HTTP/1.0"));
|
||||||
|
ohttp.SetHeader(_T("Host:"), strHost);
|
||||||
|
ohttp.SetHeader(_T("User - Agent:"), _T("HTTPTool / 1.0"));
|
||||||
|
ohttp.SetHeader(_T("Content-Length:"), wxString::Format("%d", size));
|
||||||
|
ohttp.SetHeader(_T("Content-type:"), _T("application/octet-stream"));
|
||||||
|
input->Read(buffer, size);
|
||||||
|
buffer[size] = '\0';
|
||||||
|
PostData << buffer;
|
||||||
|
delete[]buffer;
|
||||||
|
#if wxCHECK_VERSION(3,3,0)
|
||||||
|
ohttp.SetPostText("text/html;", PostData); //it’s the data to be posted
|
||||||
|
#else
|
||||||
|
ohttp.SetPostBuffer(PostData); //it’s the data to be posted
|
||||||
|
#endif
|
||||||
|
input = ohttp.GetInputStream(ofile);
|
||||||
|
|
||||||
|
wxProtocolError err = ohttp.GetError();
|
||||||
|
|
||||||
|
if (input != nullptr)
|
||||||
{
|
{
|
||||||
wxDELETE(output);
|
wxDELETE(input);
|
||||||
output = nullptr;
|
input = nullptr;
|
||||||
}
|
}
|
||||||
}
|
if (ohttp.IsConnected())
|
||||||
} */
|
ohttp.Close();*/
|
||||||
else
|
if (is_local(orig) && input != nullptr)
|
||||||
|
delete input;
|
||||||
|
return ok;
|
||||||
|
// return err == wxPROTO_NOERR;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
else
|
||||||
output = new wxFileOutputStream(dest);
|
output = new wxFileOutputStream(dest);
|
||||||
// }
|
|
||||||
|
|
||||||
BOOLEAN ok = false;
|
BOOLEAN ok = false;
|
||||||
|
|
||||||
if (input != nullptr && output != nullptr)
|
if (input != nullptr && output != nullptr)
|
||||||
{
|
{
|
||||||
input->Read(*output);
|
if (is_ftp(dest))
|
||||||
|
{
|
||||||
|
int size = input->GetSize();
|
||||||
|
char * buffer = new char[size];
|
||||||
|
|
||||||
|
input->Read(buffer, size);
|
||||||
|
output->Write(buffer, size);
|
||||||
|
delete[]buffer;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
input->Read(*output);
|
||||||
wxStreamError err = output->GetLastError();
|
wxStreamError err = output->GetLastError();
|
||||||
ok = (err == wxSTREAM_NO_ERROR);
|
ok = output->IsOk();
|
||||||
output->Close();
|
output->Close();
|
||||||
|
if (iftp.IsConnected())
|
||||||
|
iftp.Close();
|
||||||
|
if (oftp.IsConnected())
|
||||||
|
oftp.Close();
|
||||||
}
|
}
|
||||||
if (input != nullptr)
|
if (is_local(orig) && input != nullptr)
|
||||||
delete input;
|
delete input;
|
||||||
if (output != nullptr && scheme != "ftp")
|
if (is_local(dest) && output != nullptr)
|
||||||
delete output;
|
delete output;
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
@ -3245,15 +3699,16 @@ void xvt_scr_set_focus_vobj(WINDOW win)
|
|||||||
|
|
||||||
BOOLEAN xvt_slist_add_at_elt(SLIST list, SLIST_ELT e, const char *sx, long data)
|
BOOLEAN xvt_slist_add_at_elt(SLIST list, SLIST_ELT e, const char *sx, long data)
|
||||||
{
|
{
|
||||||
const BOOLEAN ok = list != NULL;
|
const BOOLEAN ok = list != nullptr;
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
SLIST_ELT item = new SLIST_ITEM;
|
SLIST_ELT item = new SLIST_ITEM;
|
||||||
item->str = xvt_str_duplicate(sx);
|
item->str = xvt_str_duplicate(sx);
|
||||||
item->data = data;
|
item->data = data;
|
||||||
item->next = NULL;
|
item->next = nullptr;
|
||||||
|
|
||||||
SLIST_ELT last = NULL;
|
SLIST_ELT last = nullptr;
|
||||||
// if (e != NULL) // Add at head by default (else at tail)
|
// if (e != NULL) // Add at head by default (else at tail)
|
||||||
// {
|
// {
|
||||||
for (SLIST_ELT i = list->head; i; i = (SLIST_ELT)i->next)
|
for (SLIST_ELT i = list->head; i; i = (SLIST_ELT)i->next)
|
||||||
@ -3263,7 +3718,7 @@ BOOLEAN xvt_slist_add_at_elt(SLIST list, SLIST_ELT e, const char *sx, long data)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
// }
|
// }
|
||||||
if (last == NULL)
|
if (last == nullptr)
|
||||||
{
|
{
|
||||||
item->next = list->head;
|
item->next = list->head;
|
||||||
list->head = item;
|
list->head = item;
|
||||||
@ -4087,7 +4542,11 @@ int xvt_fsys_access(const char *pathname, int mode)
|
|||||||
ftp.SetPassword(strPwd);
|
ftp.SetPassword(strPwd);
|
||||||
}
|
}
|
||||||
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
||||||
return ftp.Connect(strHost) && ftp.ChDir(fnDir) ? 0 : EACCES;
|
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
|
||||||
|
ftp.SetTimeout(timeout);
|
||||||
|
return ftp.Connect(strHost) && ftp.ChDir(fnDir) ? 0 : EACCES;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
SLIST files = xvt_fsys_list_files("", pathname, true);
|
SLIST files = xvt_fsys_list_files("", pathname, true);
|
||||||
@ -4146,8 +4605,12 @@ BOOLEAN xvt_fsys_remove_file(const char *pathname)
|
|||||||
}
|
}
|
||||||
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
ftp.SetPassive(xvt_sys_ftp_passive_mode(strHost));
|
||||||
|
|
||||||
|
int timeout = xvt_sys_timeout(strHost);
|
||||||
|
|
||||||
|
ftp.SetTimeout(timeout);
|
||||||
if (ftp.Connect(strHost))
|
if (ftp.Connect(strHost))
|
||||||
if (ftp.ChDir(fnDir))
|
if (ftp.ChDir(fnDir))
|
||||||
|
if (ftp.FileExists(fnName))
|
||||||
return ftp.RmFile(fnName);
|
return ftp.RmFile(fnName);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -5038,4 +5501,4 @@ int xvt_dongle_crypt(unsigned short* data)
|
|||||||
data[2] ^= 0xDEAD;
|
data[2] ^= 0xDEAD;
|
||||||
data[3] ^= 0xBEEF;
|
data[3] ^= 0xBEEF;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,7 +47,6 @@ extern "C" {
|
|||||||
#define XVT_INSTALL_DIR 3
|
#define XVT_INSTALL_DIR 3
|
||||||
#define XVT_TEMP_DIR 4
|
#define XVT_TEMP_DIR 4
|
||||||
|
|
||||||
|
|
||||||
#define MAX_TASKS 1024
|
#define MAX_TASKS 1024
|
||||||
|
|
||||||
XVTDLL void xvt_app_allow_quit(void);
|
XVTDLL void xvt_app_allow_quit(void);
|
||||||
@ -192,6 +191,11 @@ XVTDLL void xvt_font_set_style(XVT_FNTID font_id, XVT_FONT_STYLE
|
|||||||
XVTDLL long xvt_font_serialize(XVT_FNTID font_id, char *buf, long max_buf);
|
XVTDLL long xvt_font_serialize(XVT_FNTID font_id, char *buf, long max_buf);
|
||||||
XVTDLL void xvt_font_unmap(XVT_FNTID font_id);
|
XVTDLL void xvt_font_unmap(XVT_FNTID font_id);
|
||||||
|
|
||||||
|
XVTDLL BOOLEAN xvt_is_network_protocol(const char *protocol);
|
||||||
|
XVTDLL int xvt_http_get(const char *remote, const char * local, const char * user, const char * password);
|
||||||
|
XVTDLL int xvt_http_post(const char *remote, const char * result, const char * content_type, const char * request, const char * user, const char * password);
|
||||||
|
XVTDLL int xvt_http_put(const char * local, const char *remote, const char * user, const char * password);
|
||||||
|
|
||||||
XVTDLL BOOLEAN xvt_fsys_build_pathname(char *mbs, const char *volname, const char *dirname, const char *leafroot, const char *leafext, const char *leafvers);
|
XVTDLL BOOLEAN xvt_fsys_build_pathname(char *mbs, const char *volname, const char *dirname, const char *leafroot, const char *leafext, const char *leafvers);
|
||||||
XVTDLL BOOLEAN xvt_fsys_convert_dir_to_str(DIRECTORY *dirp, char *path, int sz_path);
|
XVTDLL BOOLEAN xvt_fsys_convert_dir_to_str(DIRECTORY *dirp, char *path, int sz_path);
|
||||||
XVTDLL BOOLEAN xvt_fsys_convert_str_to_dir(const char *path, DIRECTORY *dirp);
|
XVTDLL BOOLEAN xvt_fsys_convert_str_to_dir(const char *path, DIRECTORY *dirp);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user