#include #include #include #include #define DEFAULT_CHUNK_SIZE 1024000 #define RAPIDSHARE_SERVER_NAME "rapidshare.com" #define RAPIDSHARE_GETNEXTFREESERVER "/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1" using boost::asio::ip::tcp; bool upload_file( boost::filesystem::path& file_path ) { // Get Free UploadServer boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query(RAPIDSHARE_SERVER_NAME, "http"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); tcp::resolver::iterator end; tcp::socket socket(io_service); boost::system::error_code error = boost::asio::error::host_not_found; while (error && endpoint_iterator != end) { socket.close(); socket.connect(*endpoint_iterator++, error); } if (error) { throw boost::system::system_error(error); } boost::asio::streambuf request; std::ostream request_stream(&request); request_stream << "GET " << RAPIDSHARE_GETNEXTFREESERVER << " HTTP/1.0\r\n"; request_stream << "Host: " << RAPIDSHARE_SERVER_NAME << "\r\n"; request_stream << "Accept: */*\r\n"; request_stream << "Connection: close\r\n\r\n"; boost::asio::write(socket, request); boost::asio::streambuf response; boost::asio::read_until(socket, response, "\r\n"); std::istream response_stream(&response); std::string http_version; response_stream >> http_version; unsigned int status_code; response_stream >> status_code; std::string status_message; std::getline(response_stream, status_message); boost::asio::read_until(socket, response, "\r\n\r\n"); std::string header; while (std::getline(response_stream, header) && header != "\r") std::cout << header << "\n"; std::cout << "\n"; std::stringstream server_number; boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error ); socket.close(); server_number << &response; std::string full_upload_server = "rs"; full_upload_server += server_number.str() + "13.rapidshare.com"; std::cout << "FULLUPLOADSERVER: " << full_upload_server << "\r\n\r\n" ; int curr_size = 0; bool chunks = false; int file_size = boost::filesystem::file_size( file_path ); // for a while lets upload only files with size less than 1024000 bytes if (file_size > DEFAULT_CHUNK_SIZE) { return false; } int chunk_size = file_size; std::string boundary = "---------------------632865735RS4EVER5675865"; std::string content_header = boundary + "\r\nContent-Disposition: form-data; name=\"rsapi_v1\"\r\n\r\n1\r\n"; content_header += boundary + "\r\nContent-Disposition: form-data; name=\"filecontent\"; filename=\"" + file_path.leaf() + "\"\r\n\r\n"; std::cout << content_header; std::string content_tail = "\r\n" + boundary + "--\r\n"; int content_length = content_header.length() + chunk_size + content_tail.length(); // HERE THE ERROR OCCURS BECAUSE THE CODE CANNOT RESOLVE HOST'S IP, I SUPPOSE boost::asio::io_service io_service1; tcp::resolver resolver1(io_service1); tcp::resolver::query query1(full_upload_server, "http"); tcp::resolver::iterator endpoint_iterator1 = resolver1.resolve(query1); tcp::resolver::iterator end1; return true; } int main( int argc, char* argv[] ) { boost::filesystem::path file_path = "c:\\windows\\system32\\notepad.exe"; upload_file( file_path ); return 0; }