예제 #1
0
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;
}
예제 #3
0
//
// 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;
}
예제 #4
0
//
// 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;
}
예제 #5
0
파일: filemanager.cpp 프로젝트: Sild/sebs
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;
}
예제 #7
0
파일: filemanager.cpp 프로젝트: Sild/sebs
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;
}
예제 #8
0
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;
  }
}
예제 #9
0
파일: parser.cpp 프로젝트: allenbo/JConer
JValue* loads(const char* buffer, PError& err) {
    std::string str_buffer(buffer);
    return loads(str_buffer, err);
}