2 * $Logfile: /Freespace2/code/Inetfile/inetgetfile.cpp $
7 * InternetGetFile Class
10 * Revision 1.2 2002/05/07 03:16:45 theoddone33
11 * The Great Newline Fix
13 * Revision 1.1.1.1 2002/05/03 03:28:09 root
17 * 4 8/22/99 1:19p Dave
18 * Fixed up http proxy code. Cleaned up scoring code. Reverse the order in
19 * which d3d cards are detected.
21 * 3 6/16/99 10:27a Andsager
22 * Make directory if it does not already exist.
24 * 2 4/20/99 6:39p Dave
25 * Almost done with artillery targeting. Added support for downloading
26 * images on the PXO screen.
28 * 1 4/20/99 4:37p Dave
41 #include "inetgetfile.h"
43 #define INET_STATE_CONNECTING 1
44 #define INET_STATE_ERROR 2
45 #define INET_STATE_RECEIVING 3
46 #define INET_STATE_GOT_FILE 4
48 void InetGetFile::AbortGet()
60 InetGetFile::InetGetFile(char *URL,char *localfile)
65 if ((URL==NULL)||(localfile==NULL)) {
66 m_HardError = INET_ERROR_BADPARMS;
69 // create directory if not already there.
70 char dir_name[256], *end;
72 // make sure localfile has \ in it or we'll be here a long time.
73 if (strstr(localfile, "\\")) {
74 strcpy(dir_name, localfile);
75 int len = strlen(localfile);
78 // start from end of localfile and go to first \ to get dirname
79 while ( *end != '\\' ) {
84 if ( _mkdir(dir_name)==0 ) {
85 mprintf(( "CFILE: Created new directory '%s'\n", dir_name ));
89 if (strstr(URL,"http:")) {
93 extern char Multi_options_proxy[512];
94 extern ushort Multi_options_proxy_port;
95 if(strlen(Multi_options_proxy) > 0){
96 http = new ChttpGet(URL, localfile, Multi_options_proxy, Multi_options_proxy_port);
98 http = new ChttpGet(URL, localfile);
102 m_HardError = INET_ERROR_NO_MEMORY;
104 } else if (strstr(URL,"ftp:")) {
106 ftp = new CFtpGet(URL,localfile);
108 m_HardError = INET_ERROR_NO_MEMORY;
111 m_HardError = INET_ERROR_CANT_PARSE_URL;
116 InetGetFile::~InetGetFile()
118 if(http!=NULL) delete http;
119 if(ftp!=NULL) delete ftp;
122 BOOL InetGetFile::IsConnecting()
127 state = http->GetStatus();
131 state = ftp->GetStatus();
133 if(state == FTP_STATE_CONNECTING)
144 BOOL InetGetFile::IsReceiving()
149 state = http->GetStatus();
153 state = ftp->GetStatus();
155 if(state == FTP_STATE_RECEIVING)
165 BOOL InetGetFile::IsFileReceived()
170 state = http->GetStatus();
174 state = ftp->GetStatus();
176 if(state == FTP_STATE_FILE_RECEIVED)
186 BOOL InetGetFile::IsFileError()
189 if(m_HardError) return TRUE;
192 state = http->GetStatus();
196 state = ftp->GetStatus();
201 case FTP_STATE_URL_PARSING_ERROR:
202 case FTP_STATE_HOST_NOT_FOUND:
203 case FTP_STATE_DIRECTORY_INVALID:
204 case FTP_STATE_FILE_NOT_FOUND:
205 case FTP_STATE_CANT_CONNECT:
206 case FTP_STATE_LOGIN_ERROR:
207 case FTP_STATE_INTERNAL_ERROR:
208 case FTP_STATE_SOCKET_ERROR:
209 case FTP_STATE_UNKNOWN_ERROR:
210 case FTP_STATE_RECV_FAILED:
211 case FTP_STATE_CANT_WRITE_FILE:
213 case FTP_STATE_CONNECTING:
220 int InetGetFile::GetErrorCode()
223 if(m_HardError) return m_HardError;
226 state = http->GetStatus();
230 state = ftp->GetStatus();
235 case FTP_STATE_URL_PARSING_ERROR:
236 return INET_ERROR_CANT_PARSE_URL;
238 case FTP_STATE_HOST_NOT_FOUND:
239 return INET_ERROR_HOST_NOT_FOUND;
242 case FTP_STATE_DIRECTORY_INVALID:
243 case FTP_STATE_FILE_NOT_FOUND:
244 return INET_ERROR_BAD_FILE_OR_DIR;
246 case FTP_STATE_CANT_CONNECT:
247 case FTP_STATE_LOGIN_ERROR:
248 case FTP_STATE_INTERNAL_ERROR:
249 case FTP_STATE_SOCKET_ERROR:
250 case FTP_STATE_UNKNOWN_ERROR:
251 case FTP_STATE_RECV_FAILED:
253 return INET_ERROR_UNKNOWN_ERROR;
255 case FTP_STATE_CANT_WRITE_FILE:
256 return INET_ERROR_CANT_WRITE_FILE;
258 return INET_ERROR_NO_ERROR;
262 int InetGetFile::GetTotalBytes()
266 return http->GetTotalBytes();
270 return ftp->GetTotalBytes();
274 int InetGetFile::GetBytesIn()
278 return http->GetBytesIn();
282 return ftp->GetBytesIn();