bool connect(string address, int port, int attempts = 3) { inactiveTime = 0; ClientSocket* clientSocket = new ClientSocket(); socket = clientSocket; return clientSocket->connect(address, port, attempts); }
void connect(const char* serverName, unsigned short portNumber) { // set option. setHostName(serverName); currentConnectionPort = portNumber; // open TCP connection. socket.connect(IP(serverName, portNumber)); }
void connectWithProxy(const char* serverName, unsigned short portNumber, const char* proxyName, unsigned short proxyPort) { setHostName(serverName, portNumber); currentConnectionServer = proxyName; currentConnectionPort = proxyPort; socket.connect(IP(proxyName, proxyPort)); }
void FetchClientPrivate::_fetch(const char *headers, Buffer *postData, bool bRedirect) { stop(); m_bDone = false; m_data.init(0); m_data.packetStart(); m_postData = postData; m_bRedirect = bRedirect; m_postSize = 0; m_sendTime = 0; m_sendSize = 0; #ifdef WIN32 m_thread = NULL; #endif if (headers){ string head = headers; while (!head.empty()){ string header = getToken(head, '\n'); string key = getToken(header, ':'); unsigned n; for (n = 0; n < header.length(); n++) if (header[n] != ' ') break; header = header.substr(n); addHeader(key.c_str(), header.c_str()); } } #ifdef WIN32 m_errCode = 0; if (hInet){ m_state = Data; m_thread = new FetchThread(this); m_thread->start(); return; } #endif m_received = 0; m_socket = new ClientSocket(this); #ifdef USE_OPENSSL m_bHTTPS = false; #endif string proto; string host; string user; string pass; string uri; string extra; unsigned short port; if (!FetchClient::crackUrl(m_uri.c_str(), proto, host, port, user, pass, uri, extra)){ m_socket->error_state("Bad URL"); return; } if (proto != "http"){ #ifdef USE_OPENSSL if (proto == "https"){ m_bHTTPS = true; }else{ #endif log(L_WARN, "Unsupported protocol %s", m_uri.c_str()); return; #ifdef USE_OPENSSL } #endif } log(L_DEBUG, "Start connect %s:%u", host.c_str(), port); m_socket->connect(host.c_str(), port, (TCPClient*)(-1)); }
void FileTransferSocketThread::execute() { if(info.hostType == eServer) { ServerSocket serverSocket; serverSocket.bind(this->info.serverPort); serverSocket.listen(1); Socket *clientSocket = serverSocket.accept(); char data[513]=""; memset(data, 0, 256); clientSocket->receive(data,256, true); if(*data == SEND_FILE) { FileInfo file; memcpy(&file, data+1, sizeof(file)); *data=ACK; clientSocket->send(data,256); Checksum checksum; checksum.addFile(file.fileName); file.filecrc = checksum.getSum(); ifstream infile(file.fileName.c_str(), ios::in | ios::binary | ios::ate); if(infile.is_open() == true) { file.filesize = infile.tellg(); infile.seekg (0, ios::beg); memset(data, 0, 256); *data=SEND_FILE; memcpy(data+1,&file,sizeof(file)); clientSocket->send(data,256); clientSocket->receive(data,256, true); if(*data != ACK) { //transfer error } int remain=file.filesize % 512 ; int packs=(file.filesize-remain)/512; while(packs--) { infile.read(data,512); //if(!ReadFile(file,data,512,&read,NULL)) // ; //read error //if(written!=pack) // ; //read error clientSocket->send(data,512); clientSocket->receive(data,256, true); if(*data!=ACK) { //transfer error } } infile.read(data,remain); //if(!ReadFile(file,data,remain,&read,NULL)) // ; //read error //if(written!=pack) // ; //read error clientSocket->send(data,remain); clientSocket->receive(data,256, true); if(*data!=ACK) { //transfer error } infile.close(); } } delete clientSocket; } else { Ip ip(this->info.serverIP); ClientSocket clientSocket; clientSocket.connect(this->info.serverIP, this->info.serverPort); if(clientSocket.isConnected() == true) { FileInfo file; file.fileName = this->info.fileName; //file.filesize = //file.filecrc = this->info. string path = extractDirectoryPathFromFile(file.fileName); createDirectoryPaths(path); ofstream outFile(file.fileName.c_str(), ios_base::binary | ios_base::out); if(outFile.is_open() == true) { char data[513]=""; memset(data, 0, 256); *data=SEND_FILE; memcpy(data+1,&file,sizeof(file)); clientSocket.send(data,256); clientSocket.receive(data,256, true); if(*data!=ACK) { //transfer error } clientSocket.receive(data,256,true); if(*data == SEND_FILE) { memcpy(&file, data+1, sizeof(file)); *data=ACK; clientSocket.send(data,256); int remain = file.filesize % 512 ; int packs = (file.filesize-remain) / 512; while(packs--) { clientSocket.receive(data,512,true); outFile.write(data, 512); if(outFile.bad()) { //int ii = 0; } //if(!WriteFile(file,data,512,&written,NULL)) // ; //write error //if(written != pack) // ; //write error *data=ACK; clientSocket.send(data,256); } clientSocket.receive(data,remain,true); outFile.write(data, remain); if(outFile.bad()) { //int ii = 0; } //if(!WriteFile(file,data,remain,&written,NULL)) // ; //write error //if(written!=pack) // ; //write error *data=ACK; clientSocket.send(data,256); Checksum checksum; checksum.addFile(file.fileName); uint32 crc = checksum.getSum(); if(file.filecrc != crc) { //int ii = 0; } //if(calc_crc(file)!=info.crc) // ; //transfeer error } outFile.close(); } } } }