void ConnectionManager::Listen() { if (!initialized_) { throw NetworkException("ConnectionManager not initialized"); } if (listen(listen_socket_, 10) == -1) { throw NetworkException("Error listening"); } fd_set read_fd = clients_; if (select(last_client_+1, &read_fd, NULL, NULL, NULL) == -1) { throw NetworkException("Error in select()"); } for (int i = 0; i <= last_client_; i++) { if (FD_ISSET(i, &read_fd)) { if (i == listen_socket_) { // new client struct sockaddr_in client_address; memset(&client_address, 0, sizeof(client_address)); socklen_t address_length = sizeof(client_address); int new_fd = accept(listen_socket_, (struct sockaddr*)&client_address, &address_length); if (new_fd != -1) { HandleNewClient(new_fd); std::cout << ", from " << inet_ntoa(client_address.sin_addr) << std::endl; } } else { // client sending data uint16_t msg_len; int rec_len = recv(i, &msg_len, sizeof(msg_len), 0); if (rec_len <= 0) { DisconnectClient(i); } else { msg_len = ntohs(msg_len); char buffer[msg_len+1]; memset(buffer, 0, sizeof(buffer)); uint16_t rec = 0; // already received length while (msg_len > 0) { // getting the whole message rec_len = recv(i, buffer+rec, msg_len, 0); rec += rec_len; msg_len -= rec_len; } std::string str_buffer(buffer); Message *msg = new Message(str_buffer); inc_msg_->push(msg); } } } } }
// // getCSVString // string SecurityResponse::getCSVString() { char* buffer = new char[getCSVCharLength()+1]; sprintf(buffer, "%d", action_type); string str_buffer(buffer); delete [] buffer; buffer = NULL; return str_buffer; }
// // getCSVString // string Versioning::getCSVString() { char* buffer = new char[getCSVCharLength()+1]; sprintf(buffer, "%d", version); string str_buffer(buffer); delete [] buffer; buffer = NULL; return str_buffer; }
// // getCSVString // string Login::getCSVString() { char* buffer = new char[getCSVCharLength()+1]; sprintf(buffer, "%s%s%s", Algos::escapeString(username, MessageConfig::FIELD_DELIMITER).c_str(), MessageConfig::FIELD_DELIMITER.c_str(), Algos::escapeString(password, MessageConfig::FIELD_DELIMITER).c_str()); string str_buffer(buffer); delete [] buffer; buffer = NULL; return str_buffer; }
bool Filemanager::segmentate(std::string file_path) { char *buffer = new char[this->buffer_size]; int start_read_byte = 0; Metaworker *mworker = new Metaworker(); mworker->load(file_path.c_str()); std::string chang_path; std::ifstream ifile( file_path.c_str(), std::ios::in | std::ios::binary); if(!ifile){ //отсутствие прав постучалось в двери std::cout << "cannot open input files\n"; return false; } while (!ifile.eof()){ ifile.read(buffer, this->buffer_size); if(ifile.gcount()) { const char* enc_buffer = this->scrambler->encode(buffer, ifile.gcount()); std::string str_buffer(buffer, ifile.gcount()); std::string enc_str_buffer(enc_buffer, ifile.gcount()); mworker->set( md5(str_buffer), md5(enc_str_buffer), start_read_byte, start_read_byte + ifile.gcount() - 1); chang_path = this->output_dir + md5(enc_str_buffer); std::ofstream ofile( chang_path.c_str(), std::ios::binary); start_read_byte += ifile.gcount(); if(!ofile){ //ошибку открытия файлов стоит отслеживать, всякое бывает std::cout << "cannot open output files named \"" << md5(enc_str_buffer) << "\" \n"; return false; } ofile.write(enc_buffer, ifile.gcount()); ofile.close(); } } mworker->save(); ifile.close(); delete[] buffer; return true; }
// // getCSVString // string ClientInformationResponse::getCSVString() { char* buffer = new char[getCSVCharLength()+1]; sprintf(buffer, "%s%s%s%s%s", Algos::escapeString(first_name, MessageConfig::FIELD_DELIMITER).c_str(), MessageConfig::FIELD_DELIMITER.c_str(), Algos::escapeString(last_name, MessageConfig::FIELD_DELIMITER).c_str(), MessageConfig::FIELD_DELIMITER.c_str(), Algos::escapeString(email, MessageConfig::FIELD_DELIMITER).c_str()); string str_buffer(buffer); delete [] buffer; buffer = NULL; return str_buffer; }
bool Filemanager::segmentate(std::string file_path, long begin, long end) { char *buffer = new char[this->buffer_size]; int start_read_byte = begin; std::string chang_path; int readed; int ifile = open(file_path.c_str(), 0); if(!ifile){ //отсутствие прав постучалось в двери std::cout << "cannot open input files\n"; return false; } int lost = end-start_read_byte; while ( lost > 0 ){ if(lost >= this->buffer_size) { readed = this->buffer_size; } else { readed = lost + 1; } pread(ifile, buffer, readed, start_read_byte); const char* enc_buffer = this->scrambler->encode(buffer, readed); std::string str_buffer(buffer, readed); std::string enc_str_buffer(enc_buffer, readed); mworker->set( md5(str_buffer), md5(enc_str_buffer), start_read_byte, start_read_byte + readed - 1); chang_path = this->output_dir + md5(enc_str_buffer); std::ofstream ofile( chang_path.c_str(), std::ios::binary); start_read_byte += readed; lost = end - start_read_byte; // std::cout << lost << std::endl; if(!ofile){ //ошибку открытия файлов стоит отслеживать, всякое бывает std::cout << "cannot open output files named \"" << md5(enc_str_buffer) << "\" \n"; return false; } ofile.write(enc_buffer, readed); ofile.close(); } close(ifile); delete[] buffer; return true; }
Message *ConnectionManager::Listen(bool wait) { if (!wait) { // If it's not required to wait fd_set fds; struct timeval tv; FD_ZERO(&fds); FD_SET(socket_, &fds); tv.tv_sec = 1; // 1s tv.tv_sec = 0; int n = select(socket_+1, &fds, NULL, NULL, &tv); if (n == 0) { // Timeout return NULL; } } uint16_t msg_len; int rec_len = recv(socket_, &msg_len, sizeof(msg_len), 0); if (rec_len <= 0) { throw("Error receiving package."); } else { msg_len = ntohs(msg_len); char buffer[msg_len+1]; memset(buffer, 0, sizeof(buffer)); uint16_t rec = 0; // already received length while (msg_len > 0) { // getting the whole message rec_len = recv(socket_, buffer+rec, msg_len, 0); rec += rec_len; msg_len -= rec_len; } std::string str_buffer(buffer); Message *msg = new Message(str_buffer); return msg; } }
JValue* loads(const char* buffer, PError& err) { std::string str_buffer(buffer); return loads(str_buffer, err); }