*** empty log message ***

This commit is contained in:
Mike Goslin 2000-12-19 01:34:45 +00:00
parent 147a42a6e3
commit 636a13e186
4 changed files with 101 additions and 48 deletions

View File

@ -102,7 +102,7 @@ get_bytes_written(void) const {
////////////////////////////////////////////////////////////////////
INLINE float Downloader::
get_bytes_per_second(void) const {
if (_initiated == false) {
if (_ever_initiated == false) {
downloader_cat.warning()
<< "Downloader::get_bytes_per_second() - Download has not been "
<< "initiated" << endl;

View File

@ -66,6 +66,7 @@ Downloader(void) {
_tlast = 0.0;
_got_any_data = false;
_initiated = false;
_ever_initiated = false;
#if defined(WIN32)
WSAData mydata;
@ -101,7 +102,7 @@ bool Downloader::
connect_to_server(const string &name, uint port) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Download connecting to server: " << name << " on port: "
<< "Downloader connecting to server: " << name << " on port: "
<< port << endl;
_server_name = name;
@ -118,8 +119,7 @@ connect_to_server(const string &name, uint port) {
else {
downloader_cat.error()
<< "Downloader::connect_to_server() - gethostbyname() failed: "
//<< strerror(errno) << endl;
<< errno << endl;
<< handle_socket_error() << endl;
return false;
}
} else
@ -143,8 +143,7 @@ connect_to_server(void) {
if (_socket == (int)0xffffffff) {
downloader_cat.error()
<< "Downloader::connect_to_server() - socket failed: "
//<< strerror(errno) << endl;
<< errno << endl;
<< handle_socket_error() << endl;
return false;
}
@ -153,8 +152,7 @@ connect_to_server(void) {
if (connect(_socket, (struct sockaddr *)&_sin, sizeof(_sin)) < 0) {
downloader_cat.error()
<< "Downloader::connect_to_server() - connect() failed: "
//<< strerror(errno) << endl;
<< errno << endl;
<< handle_socket_error() << endl;
disconnect_from_server();
_connected = false;
}
@ -171,7 +169,7 @@ void Downloader::
disconnect_from_server(void) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Download disconnecting from server..." << endl;
<< "Downloader disconnecting from server..." << endl;
#if defined(WIN32)
(void)closesocket(_socket);
#else
@ -208,8 +206,8 @@ safe_send(int socket, const char *data, int length, long timeout) {
return SS_timeout;
} else if (sret == -1) {
downloader_cat.error()
//<< "Downloader::safe_send() - error: " << strerror(errno) << endl;
<< "Downloader::safe_send() - error: " << errno << endl;
<< "Downloader::safe_send() - error: " << handle_socket_error()
<< endl;
return SS_error;
}
int ret = send(socket, data, length, 0);
@ -217,8 +215,8 @@ safe_send(int socket, const char *data, int length, long timeout) {
bytes += ret;
else {
downloader_cat.error()
//<< "Downloader::safe_send() - error: " << strerror(errno) << endl;
<< "Downloader::safe_send() - error: " << errno << endl;
<< "Downloader::safe_send() - error: " << handle_socket_error()
<< endl;
return SS_error;
}
}
@ -253,38 +251,22 @@ fast_receive(int socket, DownloadStatus *status, int rec_size) {
} else if (sret == -1) {
downloader_cat.error()
<< "Downloader::fast_receive() - select() error: "
//<< strerror(errno) << endl;
<< errno << endl;
<< handle_socket_error() << endl;
return FR_error;
}
int ret = recv(socket, status->_next_in, rec_size, 0);
if (ret == 0) {
return FR_eof;
} else if (ret == -1) {
#if defined(WIN32_VC)
int err = WSAGetLastError();
if (err == 0) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::fast_receive() - recv() error = 0" << endl;
return FR_no_data;
} else {
downloader_cat.error()
<< "Downloader::fast_receive() - recv() error: "
<< err << endl;
return FR_error;
}
#else
downloader_cat.error()
<< "Downloader::fast_receive() - recv() error: "
<< errno << endl;
<< handle_socket_error() << endl;
return FR_error;
#endif
}
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::fast_receive() - recv() got: " << ret << " bytes"
<< endl;
<< "Downloader::fast_receive() - recv() requested: " << rec_size
<< " got: " << ret << " bytes" << endl;
status->_next_in += ret;
status->_bytes_in_buffer += ret;
status->_total_bytes += ret;
@ -332,7 +314,7 @@ initiate(const string &file_name, Filename file_dest,
result = file_dest.open_write(_dest_stream);
if (result == false) {
downloader_cat.error()
<< "Downloader::download() - Error opening file: " << file_dest
<< "Downloader::initiate() - Error opening file: " << file_dest
<< " for writing" << endl;
return DS_error_write;
}
@ -346,7 +328,7 @@ initiate(const string &file_name, Filename file_dest,
if (partial_content == true) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::download() - Requesting byte range: " << first_byte
<< "Downloader::initiate() - Requesting byte range: " << first_byte
<< "-" << last_byte << endl;
request += "\012Range: bytes=";
stringstream start_stream;
@ -357,7 +339,7 @@ initiate(const string &file_name, Filename file_dest,
int outlen = request.size();
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::download() - Sending request:\n" << request << endl;
<< "Downloader::initiate() - Sending request:\n" << request << endl;
int send_ret = safe_send(_socket, request.c_str(), outlen,
(long)downloader_timeout);
@ -380,6 +362,7 @@ initiate(const string &file_name, Filename file_dest,
_tlast = 0.0;
_got_any_data = false;
_initiated = true;
_ever_initiated = true;
return DS_success;
}
@ -472,17 +455,33 @@ run(void) {
}
// Attempt to receive the bytes from the socket
int repeat = 1;
if (_receive_size > MAX_RECEIVE_BYTES) {
repeat += (int)(_receive_size / MAX_RECEIVE_BYTES);
}
int fret;
for (int i = 0; i < repeat; i++) {
// Handle the case of a fast connection
if (_receive_size > MAX_RECEIVE_BYTES) {
int repeat = (int)(_receive_size / MAX_RECEIVE_BYTES);
int remain = (int)fmod((double)_receive_size, (double)MAX_RECEIVE_BYTES);
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::run() - fast connection - repeat: " << repeat
<< " remain: " << remain << endl;
// Make multiple requests at once but do not exceed MAX_RECEIVE_BYTES
// for any single request
for (int i = 0; i <= repeat; i++) {
if (i < repeat)
fret = fast_receive(_socket, _current_status, MAX_RECEIVE_BYTES);
else if (remain > 0)
fret = fast_receive(_socket, _current_status, remain);
if (fret == FR_eof || fret < 0) {
break;
} else if (fret == FR_success) {
_got_any_data = true;
}
}
} else { // Handle the normal speed connection case
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::run() - normal connection" << endl;
fret = fast_receive(_socket, _current_status, _receive_size);
if (fret == FR_eof || fret < 0)
break;
else if (fret == FR_success)
_got_any_data = true;
}
_tlast = _clock.get_real_time();
@ -502,13 +501,13 @@ run(void) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::run() - Got 0 bytes" << endl;
return DS_ok;
return ret;
}
} else if (fret == FR_no_data) {
if (downloader_cat.is_debug())
downloader_cat.debug()
<< "Downloader::run() - No data" << endl;
return DS_ok;
return ret;
} else if (fret < 0) {
return DS_error;
}
@ -741,3 +740,52 @@ reset(void) {
_next_in = _start;
_bytes_in_buffer = 0;
}
////////////////////////////////////////////////////////////////////
// Function: Downloader::handle_socket_error
// Access: Private
// Description:
////////////////////////////////////////////////////////////////////
char *Downloader::
handle_socket_error(void) const {
#ifndef WIN32_VC
return strerror(errno);
#else
switch (WSAGetLastError()) {
case 10022:
return "An invalid argument was supplied";
case 10036:
return "A blocking operation is currently executing";
case 10040:
return "Message was larger than internal buffer or network limit";
case 10050:
return "Network dead";
case 10051:
return "Network unreachable";
case 10052:
return "Connection broken because keep-alive detected a failure";
case 10053:
return "Connection aborted by local host software";
case 10054:
return "Connection closed by remote host";
case 10055:
return "Out of buffer space or queue overflowed";
case 10057:
return "Socket was not connected";
case 10058:
return "Socket was previously shut down";
case 10060:
return "Connection timed out";
case 10061:
return "Connection refused by remote host";
case 10064:
return "Remote host is down";
case 10065:
return "Remote host is unreachable";
case 10093:
return "WSAStartup() was not called";
default:
return "Unknown WSA error";
}
#endif
}

View File

@ -93,6 +93,7 @@ private:
bool write_to_disk(DownloadStatus *status);
void cleanup(void);
char *handle_socket_error(void) const;
private:
bool _connected;
@ -101,6 +102,7 @@ private:
struct sockaddr_in _sin;
bool _initiated;
bool _ever_initiated;
PT(Buffer) _buffer;
int _disk_write_frequency;
float _frequency;

View File

@ -25,11 +25,14 @@ main(int argc, char *argv[]) {
for (;;) {
ret = dl.run();
if (ret == Downloader::DS_success) {
cerr << "bytes per second: " << dl.get_bytes_per_second() << endl;
return 1;
} else if (ret == Downloader::DS_write) {
cerr << "bytes per second: " << dl.get_bytes_per_second() << endl;
} else if (ret < 0)
} else if (ret < 0) {
cerr << "error!" << endl;
return 0;
}
}
return 0;
}