summaryrefslogtreecommitdiff
path: root/plugins/FTPFileYM/src/serverlist.cpp
blob: 1d1c67b14516cd8a30ad56ef01670c8ff19b92c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/*
FTP File YM plugin
Copyright (C) 2007-2010 Jan Holub

This program 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 version 2
of the License.

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, see <http://www.gnu.org/licenses/>.
*/

#include "common.h"

ServerList *ServerList::instance = NULL;
ServerList &ftpList = ServerList::getInstance();

extern Options &opt;

void ServerList::init()
{	
	for (int i = 0; i < FTP_COUNT; i++)
	{
		ServerList::FTP *ftp = new ServerList::FTP(i);
		ftpList.add(ftp);
	}
}

void ServerList::deinit()
{	
	for (UINT i = 0; i < ftpList.size(); i++)
		delete ftpList[i];

	delete this;
}

void ServerList::saveToDb() const
{
	ServerList::FTP *ftp = ftpList.getSelected();
	char buff[256];

	mir_snprintf(buff, sizeof(buff), "Password%d", opt.selected);
	DB::setCryptedString(0, MODULE, buff, ftp->szPass);

	DB::setStringF(0, MODULE, "Name%d", opt.selected, ftp->stzName);
	DB::setAStringF(0, MODULE, "Server%d", opt.selected, ftp->szServer);
	DB::setAStringF(0, MODULE, "User%d", opt.selected, ftp->szUser);
	DB::setAStringF(0, MODULE, "Url%d", opt.selected, ftp->szUrl);
	DB::setAStringF(0, MODULE, "Dir%d", opt.selected, ftp->szDir);
	DB::setAStringF(0, MODULE, "Chmod%d", opt.selected, ftp->szChmod);
	DB::setWordF(0, MODULE, "FtpProto%d", opt.selected, ftp->ftpProto);
	DB::setWordF(0, MODULE, "Port%d", opt.selected, ftp->iPort);
	DB::setByteF(0, MODULE, "Passive%d", opt.selected, ftp->bPassive);	
	DB::setByte(0, MODULE, "Selected", opt.selected);
	DB::setByte(0, MODULE, "Enabled", opt.enabled);
	DB::setByte(0, MODULE, "Default", opt.defaultFTP);
}

ServerList::FTP::FTP(int index)
{
	char buff[256];

	this->bEnabled = ((opt.enabled >> index) & 1); 

	if (DB::getStringF(0, MODULE, "Name%d", index, this->stzName))
		mir_sntprintf(this->stzName, SIZEOF(this->stzName), TranslateT("FTP Server %d"), index + 1);

	mir_snprintf(buff, sizeof(buff), "Password%d", index);
	DB::getCryptedString(0, MODULE, buff, this->szPass);

	DB::getAStringF(0, MODULE, "Server%d", index, this->szServer);
	DB::getAStringF(0, MODULE, "User%d", index, this->szUser);
	DB::getAStringF(0, MODULE, "Url%d", index, this->szUrl);
	DB::getAStringF(0, MODULE, "Dir%d", index, this->szDir);
	DB::getAStringF(0, MODULE, "Chmod%d", index, this->szChmod);
	this->ftpProto = (FTP::EProtoType)DB::getWordF(0, MODULE, "FtpProto%d", index, FTP::FT_STANDARD);
	this->iPort = DB::getWordF(0, MODULE, "Port%d", index, 21);
	this->bPassive = DB::getByteF(0, MODULE, "Passive%d", index, 0) ? true : false;
}

ServerList::FTP *ServerList::getSelected() const
{
	return ftpList[opt.selected];
}

bool ServerList::FTP::isValid() const
{
	return (this->bEnabled		&&
			this->szServer[0]	&& 
			this->szUser[0]		&& 
			this->szPass[0]		&& 
			this->szUrl[0]) ? true : false;
}

char *ServerList::FTP::getProtoString() const
{
	switch (this->ftpProto)
	{
		case FT_STANDARD: 
		case FT_SSL_EXPLICIT:	return "ftp://";
		case FT_SSL_IMPLICIT:	return "ftps://";
		case FT_SSH:			return "sftp://";
	}

	return NULL;
}