2 * $Logfile: /Freespace2/code/Inetfile/inetgetfile.cpp $
7 * InternetGetFile Class
10 * Revision 1.1 2002/05/03 03:28:09 root
14 * 4 8/22/99 1:19p Dave
15 * Fixed up http proxy code. Cleaned up scoring code. Reverse the order in
16 * which d3d cards are detected.
18 * 3 6/16/99 10:27a Andsager
19 * Make directory if it does not already exist.
21 * 2 4/20/99 6:39p Dave
22 * Almost done with artillery targeting. Added support for downloading
23 * images on the PXO screen.
25 * 1 4/20/99 4:37p Dave
38 #include "inetgetfile.h"
40 #define INET_STATE_CONNECTING 1
41 #define INET_STATE_ERROR 2
42 #define INET_STATE_RECEIVING 3
43 #define INET_STATE_GOT_FILE 4
45 void InetGetFile::AbortGet()
57 InetGetFile::InetGetFile(char *URL,char *localfile)
62 if ((URL==NULL)||(localfile==NULL)) {
63 m_HardError = INET_ERROR_BADPARMS;
66 // create directory if not already there.
67 char dir_name[256], *end;
69 // make sure localfile has \ in it or we'll be here a long time.
70 if (strstr(localfile, "\\")) {
71 strcpy(dir_name, localfile);
72 int len = strlen(localfile);
75 // start from end of localfile and go to first \ to get dirname
76 while ( *end != '\\' ) {
81 if ( _mkdir(dir_name)==0 ) {
82 mprintf(( "CFILE: Created new directory '%s'\n", dir_name ));
86 if (strstr(URL,"http:")) {
90 extern char Multi_options_proxy[512];
91 extern ushort Multi_options_proxy_port;
92 if(strlen(Multi_options_proxy) > 0){
93 http = new ChttpGet(URL, localfile, Multi_options_proxy, Multi_options_proxy_port);
95 http = new ChttpGet(URL, localfile);
99 m_HardError = INET_ERROR_NO_MEMORY;
101 } else if (strstr(URL,"ftp:")) {
103 ftp = new CFtpGet(URL,localfile);
105 m_HardError = INET_ERROR_NO_MEMORY;
108 m_HardError = INET_ERROR_CANT_PARSE_URL;
113 InetGetFile::~InetGetFile()
115 if(http!=NULL) delete http;
116 if(ftp!=NULL) delete ftp;
119 BOOL InetGetFile::IsConnecting()
124 state = http->GetStatus();
128 state = ftp->GetStatus();
130 if(state == FTP_STATE_CONNECTING)
141 BOOL InetGetFile::IsReceiving()
146 state = http->GetStatus();
150 state = ftp->GetStatus();
152 if(state == FTP_STATE_RECEIVING)
162 BOOL InetGetFile::IsFileReceived()
167 state = http->GetStatus();
171 state = ftp->GetStatus();
173 if(state == FTP_STATE_FILE_RECEIVED)
183 BOOL InetGetFile::IsFileError()
186 if(m_HardError) return TRUE;
189 state = http->GetStatus();
193 state = ftp->GetStatus();
198 case FTP_STATE_URL_PARSING_ERROR:
199 case FTP_STATE_HOST_NOT_FOUND:
200 case FTP_STATE_DIRECTORY_INVALID:
201 case FTP_STATE_FILE_NOT_FOUND:
202 case FTP_STATE_CANT_CONNECT:
203 case FTP_STATE_LOGIN_ERROR:
204 case FTP_STATE_INTERNAL_ERROR:
205 case FTP_STATE_SOCKET_ERROR:
206 case FTP_STATE_UNKNOWN_ERROR:
207 case FTP_STATE_RECV_FAILED:
208 case FTP_STATE_CANT_WRITE_FILE:
210 case FTP_STATE_CONNECTING:
217 int InetGetFile::GetErrorCode()
220 if(m_HardError) return m_HardError;
223 state = http->GetStatus();
227 state = ftp->GetStatus();
232 case FTP_STATE_URL_PARSING_ERROR:
233 return INET_ERROR_CANT_PARSE_URL;
235 case FTP_STATE_HOST_NOT_FOUND:
236 return INET_ERROR_HOST_NOT_FOUND;
239 case FTP_STATE_DIRECTORY_INVALID:
240 case FTP_STATE_FILE_NOT_FOUND:
241 return INET_ERROR_BAD_FILE_OR_DIR;
243 case FTP_STATE_CANT_CONNECT:
244 case FTP_STATE_LOGIN_ERROR:
245 case FTP_STATE_INTERNAL_ERROR:
246 case FTP_STATE_SOCKET_ERROR:
247 case FTP_STATE_UNKNOWN_ERROR:
248 case FTP_STATE_RECV_FAILED:
250 return INET_ERROR_UNKNOWN_ERROR;
252 case FTP_STATE_CANT_WRITE_FILE:
253 return INET_ERROR_CANT_WRITE_FILE;
255 return INET_ERROR_NO_ERROR;
259 int InetGetFile::GetTotalBytes()
263 return http->GetTotalBytes();
267 return ftp->GetTotalBytes();
271 int InetGetFile::GetBytesIn()
275 return http->GetBytesIn();
279 return ftp->GetBytesIn();