Пример #1
0
void c_rpc_server::c_session::read_handler_hmac(const boost::system::error_code &error, std::size_t bytes_transferred) {
	_dbg("readed " << bytes_transferred << " bytes of hmac authenticator");
	_dbg("authenticate message");
	if (error) {
		_dbg("asio error " << error.message());
		delete_me();
		return;
	}
	int ret = crypto_auth_hmacsha512_verify(m_hmac_authenticator.data(),
	                                        reinterpret_cast<const unsigned char *>(m_received_data.data()),
	                                        m_received_data.size(),
	                                        m_hmac_key.data()
	);
	if (ret == -1) {
		_warn("hmac authentication error");
		delete_me();
		return;
	}
	assert(ret == 0);
	try {
		execute_rpc_command(m_received_data);
	} catch (const std::exception &e) {
		_erro( "exception read_handler " << e.what());
		_erro( "close connection\n" );
		delete_me();
		return;
	}
}
Пример #2
0
void c_rpc_server::c_session::read_handler_size(const boost::system::error_code &error, std::size_t bytes_transferred) {
	_dbg("read handler size");
	if (error) {
		_dbg("asio error " << error.message());
		delete_me();
		return;
	}
	if (bytes_transferred != 2) {
		_dbg("bytes_transferred != 2");
		delete_me();
		return;
	}
	uint16_t message_size = static_cast<uint16_t>(m_data_size.at(0) << 8);
	message_size += m_data_size.at(1);
	m_received_data.resize(message_size, 0); // prepare buffer for message
	_dbg("message size = " << message_size);
	async_read(m_socket, boost::asio::buffer(&m_received_data.at(0), m_received_data.size()),
		[this](const boost::system::error_code &error, std::size_t bytes_transferred) {
			read_handler_data(error, bytes_transferred);
	});
}
Пример #3
0
void c_rpc_server::c_session::write_handler(const boost::system::error_code &error, std::size_t bytes_transferred) {
	UNUSED(bytes_transferred);
	try {
		if (error) {
			_dbg("asio error " << error.message());
			delete_me();
			return;
		}
		// continue reading
		async_read(m_socket, boost::asio::buffer(&m_data_size.at(0), m_data_size.size()),
			[this](const boost::system::error_code &error, std::size_t bytes_transferred) {
				read_handler_size(error, bytes_transferred);
		});
	}
	catch (const std::exception &e) {
		_erro( "exception in write_handler " << e.what() );
		_erro( "close connection\n" );
		delete_me();
		return;
	}
}
Пример #4
0
void c_rpc_server::c_session::read_handler_data(const boost::system::error_code &error, std::size_t bytes_transferred) {
	_dbg("readed " << bytes_transferred << " bytes of data");
	if (error) {
		_dbg("asio error " << error.message());
		delete_me();
		return;
	}
	// parsing message
	_dbg("received message " << m_received_data);
	async_read(m_socket, boost::asio::buffer(&m_hmac_authenticator.at(0), m_hmac_authenticator.size()),
		[this](const boost::system::error_code &error, std::size_t bytes_transferred) {
			read_handler_hmac(error, bytes_transferred);
	});
}
Пример #5
0
void Device::on_btn_remove_clicked()
{

    qDebug()<<"btn_remove_clicked";
    qDebug()<<"id"<<this->dev_id;

    QMessageBox::StandardButton msgBox= QMessageBox::question(NULL,"Warning !","Do you really want to delete this device?",QMessageBox::Yes|QMessageBox::No);
    if(msgBox==QMessageBox::Yes)
    {
        emit delete_me(this->dev_id);
    }
    else
    {
        qDebug()<<"Did not deleted";
    }
}
Пример #6
0
void c_rpc_server::c_session::execute_rpc_command(const std::string &input_message) {
	try {
		nlohmann::json j = nlohmann::json::parse(input_message);
		const std::string cmd_name = j.begin().value();
		_dbg("cmd name " << cmd_name);
		// calling rpc function
		const std::string response = m_rpc_server_ptr->m_rpc_functions_map.at(cmd_name)(input_message);
		// serialize response
		assert(response.size() <= std::numeric_limits<uint16_t>::max());
		uint16_t size = static_cast<uint16_t>(response.size());
		m_write_data.resize(size + 2); ///< 2 first bytes for size
		m_write_data.at(0) = static_cast<char>(size >> 8);
		m_write_data.at(1) = static_cast<char>(size & 0xFF);
		for (size_t i = 0; i < response.size(); ++i)
			m_write_data.at(i + 2) = response.at(i);
		// send response

		_dbg("send packet");
		_dbg(m_write_data);
		std::array<unsigned char, crypto_auth_hmacsha512_BYTES> hash;
		int ret = crypto_auth_hmacsha512(hash.data(), reinterpret_cast<unsigned char *>(&m_write_data.at(2)), size, m_rpc_server_ptr->m_hmac_key.data());
		if (ret != 0) _throw_error(std::runtime_error("crypto_auth_hmacsha512 error"));
		_dbg("hmac");
		//for (const auto & byte : hash) std::cout << std::hex << "0x" << static_cast<int>(byte) << " ";
		//std::cout << std::dec << std::endl;
		std::array<boost::asio::const_buffer, 2> buffers = {
			{boost::asio::buffer(m_write_data.data(), m_write_data.size()),
			boost::asio::buffer(hash.data(), hash.size())}
		};
		m_socket.async_write_some(buffers,
			[this](const boost::system::error_code& error, std::size_t bytes_transferred) {
				write_handler(error, bytes_transferred);
		});
	}
	catch (const std::exception &e) {
		_erro( "exception in execute_rpc_command " << e.what() );
		_erro( "close connection\n" );
		delete_me();
		return;
	}
}
Пример #7
0
void c_rpc_server::c_session::execute_rpc_command(const std::string &input_message) {
	try {
		nlohmann::json j = nlohmann::json::parse(input_message);
                const std::string cmd_name = j["cmd"];//.begin().value();
                dbg("cmd name " << cmd_name);
		// calling rpc function
		nlohmann::json json_response;
		{
			LockGuard<Mutex> lg(m_rpc_server_ptr->m_rpc_functions_map_mutex);
			json_response = m_rpc_server_ptr->m_rpc_functions_map.at(cmd_name)(input_message);
		}
		json_response["id"] = get_command_id();
		if (j.find("id")!= j.end()) {
			json_response["re"] = j["id"];
		}
		send_response(json_response);
	}
	catch (const std::exception &e) {
		_erro( "exception in execute_rpc_command " << e.what() );
		_erro( "close connection\n" );
		delete_me();
		return;
	}
}
Пример #8
0
void ArchiveWidget::on_tb_delete_clicked()
{
    emit delete_me(this);
}