NEW: install cert for printer

JIRA: STUDIO-7808

Change-Id: Ieba4db18a2735c6f301ac13ac5b89a4937f379f2
Signed-off-by: Stone Li <stone.li@bambulab.com>
This commit is contained in:
Stone Li 2024-12-02 18:21:57 +08:00 committed by Lane.Wei
parent f774fda6e6
commit d9ead02cfa
9 changed files with 74 additions and 21 deletions

View File

@ -2672,29 +2672,29 @@ bool MachineObject::is_camera_busy_off()
return false;
}
int MachineObject::publish_json(std::string json_str, int qos)
int MachineObject::publish_json(std::string json_str, int qos, int flag)
{
if (is_lan_mode_printer()) {
return local_publish_json(json_str, qos);
return local_publish_json(json_str, qos, flag);
} else {
return cloud_publish_json(json_str, qos);
return cloud_publish_json(json_str, qos, flag);
}
}
int MachineObject::cloud_publish_json(std::string json_str, int qos)
int MachineObject::cloud_publish_json(std::string json_str, int qos, int flag)
{
int result = -1;
if (m_agent)
result = m_agent->send_message(dev_id, json_str, qos);
result = m_agent->send_message(dev_id, json_str, qos, flag);
return result;
}
int MachineObject::local_publish_json(std::string json_str, int qos)
int MachineObject::local_publish_json(std::string json_str, int qos, int flag)
{
int result = -1;
if (m_agent) {
result = m_agent->send_message_to_printer(dev_id, json_str, qos);
result = m_agent->send_message_to_printer(dev_id, json_str, qos, flag);
}
return result;
}
@ -4923,7 +4923,7 @@ int MachineObject::publish_gcode(std::string gcode_str)
t["gcode"] = j.dump();
m_agent->track_event("cmd_gcode_line", t.dump());
}
return publish_json(j.dump());
return publish_json(j.dump(), 0);
}
BBLSubTask* MachineObject::get_subtask()
@ -5719,13 +5719,13 @@ bool DeviceManager::set_selected_machine(std::string dev_id, bool need_disconnec
}
} else {
BOOST_LOG_TRIVIAL(info) << "static: set_selected_machine: same dev_id = empty";
m_agent->set_user_selected_machine("");
it->second->reset();
#if !BBL_RELEASE_TO_PUBLIC
it->second->connect(false, Slic3r::GUI::wxGetApp().app_config->get("enable_ssl_for_mqtt") == "true" ? true : false);
#else
it->second->connect(false, it->second->local_use_ssl_for_mqtt);
#endif
m_agent->set_user_selected_machine(dev_id);
it->second->set_lan_mode_connection_state(true);
}
}

View File

@ -957,9 +957,9 @@ public:
/* Msg for display MsgFn */
typedef std::function<void(std::string topic, std::string payload)> MsgFn;
int publish_json(std::string json_str, int qos = 0);
int cloud_publish_json(std::string json_str, int qos = 0);
int local_publish_json(std::string json_str, int qos = 0);
int publish_json(std::string json_str, int qos = 0, int flag = 0);
int cloud_publish_json(std::string json_str, int qos = 0, int flag = 0);
int local_publish_json(std::string json_str, int qos = 0, int flag = 0);
int parse_json(std::string payload, bool key_filed_only = false);
int publish_gcode(std::string gcode_str);

View File

@ -1311,6 +1311,8 @@ void GUI_App::post_init()
this->check_track_enable();
}
this->check_cert();
});
}
@ -4761,6 +4763,15 @@ void GUI_App::check_beta_version()
}).perform();
}
void GUI_App::check_cert()
{
m_check_cert_thread = Slic3r::create_thread(
[this]{
if (m_agent)
m_agent->check_cert();
});
BOOST_LOG_TRIVIAL(info) << "check_cert";
}
//BBS pop up a dialog and download files
void GUI_App::request_new_version(int by_user)

View File

@ -308,7 +308,7 @@ private:
wxString m_info_dialog_content;
HttpServer m_http_server;
boost::thread m_check_network_thread;
boost::thread m_check_cert_thread;
public:
//try again when subscription fails
void on_start_subscribe_again(std::string dev_id);
@ -458,6 +458,7 @@ public:
void check_update(bool show_tips, int by_user);
void check_new_version(bool show_tips = false, int by_user = 0);
void check_beta_version();
void check_cert();
void request_new_version(int by_user);
void enter_force_upgrade();
void set_skip_version(bool skip = true);

View File

@ -375,6 +375,8 @@ void MonitorPanel::update_all()
;
}
}
if (obj)
m_agent->install_device_cert(obj->dev_id, obj->is_lan_mode_printer());
if (obj) {
wxGetApp().reset_to_active();

View File

@ -3399,6 +3399,7 @@ void SelectMachineDialog::update_show_status()
}
if (!dev) return;
dev->check_pushing();
PartPlate* plate = m_plater->get_partplate_list().get_curr_plate();
// blank plate has no valid gcode file
@ -3421,6 +3422,7 @@ void SelectMachineDialog::update_show_status()
}
return;
}
agent->install_device_cert(obj_->dev_id, obj_->is_lan_mode_printer());
/* check cloud machine connections */
if (!obj_->is_lan_mode_printer()) {

View File

@ -62,6 +62,8 @@ func_send_message NetworkAgent::send_message_ptr = nullptr;
func_connect_printer NetworkAgent::connect_printer_ptr = nullptr;
func_disconnect_printer NetworkAgent::disconnect_printer_ptr = nullptr;
func_send_message_to_printer NetworkAgent::send_message_to_printer_ptr = nullptr;
func_check_cert NetworkAgent::check_cert_ptr = nullptr;
func_install_device_cert NetworkAgent::install_device_cert_ptr = nullptr;
func_start_discovery NetworkAgent::start_discovery_ptr = nullptr;
func_change_user NetworkAgent::change_user_ptr = nullptr;
func_is_user_login NetworkAgent::is_user_login_ptr = nullptr;
@ -274,6 +276,8 @@ int NetworkAgent::initialize_network_module(bool using_backup)
connect_printer_ptr = reinterpret_cast<func_connect_printer>(get_network_function("bambu_network_connect_printer"));
disconnect_printer_ptr = reinterpret_cast<func_disconnect_printer>(get_network_function("bambu_network_disconnect_printer"));
send_message_to_printer_ptr = reinterpret_cast<func_send_message_to_printer>(get_network_function("bambu_network_send_message_to_printer"));
check_cert_ptr = reinterpret_cast<func_check_cert>(get_network_function("bambu_network_update_cert"));
install_device_cert_ptr = reinterpret_cast<func_install_device_cert>(get_network_function("bambu_network_install_device_cert"));
start_discovery_ptr = reinterpret_cast<func_start_discovery>(get_network_function("bambu_network_start_discovery"));
change_user_ptr = reinterpret_cast<func_change_user>(get_network_function("bambu_network_change_user"));
is_user_login_ptr = reinterpret_cast<func_is_user_login>(get_network_function("bambu_network_is_user_login"));
@ -398,6 +402,7 @@ int NetworkAgent::unload_network_module()
connect_printer_ptr = nullptr;
disconnect_printer_ptr = nullptr;
send_message_to_printer_ptr = nullptr;
check_cert_ptr = nullptr;
start_discovery_ptr = nullptr;
change_user_ptr = nullptr;
is_user_login_ptr = nullptr;
@ -853,11 +858,11 @@ int NetworkAgent::stop_device_subscribe()
return ret;
}
int NetworkAgent::send_message(std::string dev_id, std::string json_str, int qos)
int NetworkAgent::send_message(std::string dev_id, std::string json_str, int qos, int flag)
{
int ret = 0;
if (network_agent && send_message_ptr) {
ret = send_message_ptr(network_agent, dev_id, json_str, qos);
ret = send_message_ptr(network_agent, dev_id, json_str, qos, flag);
if (ret)
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, dev_id=%3%, json_str=%4%, qos=%5%")%network_agent %ret %dev_id %json_str %qos;
}
@ -887,11 +892,11 @@ int NetworkAgent::disconnect_printer()
return ret;
}
int NetworkAgent::send_message_to_printer(std::string dev_id, std::string json_str, int qos)
int NetworkAgent::send_message_to_printer(std::string dev_id, std::string json_str, int qos, int flag)
{
int ret = 0;
if (network_agent && send_message_to_printer_ptr) {
ret = send_message_to_printer_ptr(network_agent, dev_id, json_str, qos);
ret = send_message_to_printer_ptr(network_agent, dev_id, json_str, qos, flag);
if (ret)
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%, dev_id=%3%, json_str=%4%, qos=%5%")
%network_agent %ret %dev_id %json_str %qos;
@ -899,6 +904,24 @@ int NetworkAgent::send_message_to_printer(std::string dev_id, std::string json_s
return ret;
}
int NetworkAgent::check_cert()
{
int ret = 0;
if (network_agent && check_cert_ptr) {
ret = check_cert_ptr(network_agent);
if (ret)
BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << boost::format(" error: network_agent=%1%, ret=%2%") % network_agent % ret;
}
return ret;
}
void NetworkAgent::install_device_cert(std::string dev_id, bool lan_only)
{
if (network_agent && install_device_cert_ptr) {
install_device_cert_ptr(network_agent, dev_id, lan_only);
}
}
bool NetworkAgent::start_discovery(bool start, bool sending)
{
bool ret = false;

View File

@ -38,10 +38,12 @@ typedef int (*func_del_subscribe)(void *agent, std::vector<std::string> dev_list
typedef void (*func_enable_multi_machine)(void *agent, bool enable);
typedef int (*func_start_device_subscribe)(void* agent);
typedef int (*func_stop_device_subscribe)(void* agent);
typedef int (*func_send_message)(void *agent, std::string dev_id, std::string json_str, int qos);
typedef int (*func_send_message)(void *agent, std::string dev_id, std::string json_str, int qos, int flag);
typedef int (*func_connect_printer)(void *agent, std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl);
typedef int (*func_disconnect_printer)(void *agent);
typedef int (*func_send_message_to_printer)(void *agent, std::string dev_id, std::string json_str, int qos);
typedef int (*func_send_message_to_printer)(void *agent, std::string dev_id, std::string json_str, int qos, int flag);
typedef int (*func_check_cert)(void* agent);
typedef void (*func_install_device_cert)(void* agent, std::string dev_id, bool lan_only);
typedef bool (*func_start_discovery)(void *agent, bool start, bool sending);
typedef int (*func_change_user)(void *agent, std::string user_info);
typedef bool (*func_is_user_login)(void *agent);
@ -112,6 +114,7 @@ typedef int (*func_get_model_mall_rating_result)(void *agent, int job_id, std::s
typedef int (*func_get_mw_user_preference)(void *agent, std::function<void(std::string)> callback);
typedef int (*func_get_mw_user_4ulist)(void *agent, int seed, int limit, std::function<void(std::string)> callback);
//the NetworkAgent class
class NetworkAgent
{
@ -157,10 +160,12 @@ public:
void enable_multi_machine(bool enable);
int start_device_subscribe();
int stop_device_subscribe();
int send_message(std::string dev_id, std::string json_str, int qos);
int send_message(std::string dev_id, std::string json_str, int qos, int flag);
int connect_printer(std::string dev_id, std::string dev_ip, std::string username, std::string password, bool use_ssl);
int disconnect_printer();
int send_message_to_printer(std::string dev_id, std::string json_str, int qos);
int send_message_to_printer(std::string dev_id, std::string json_str, int qos, int flag);
int check_cert();
void install_device_cert(std::string dev_id, bool lan_only);
bool start_discovery(bool start, bool sending);
int change_user(std::string user_info);
bool is_user_login();
@ -270,6 +275,8 @@ private:
static func_connect_printer connect_printer_ptr;
static func_disconnect_printer disconnect_printer_ptr;
static func_send_message_to_printer send_message_to_printer_ptr;
static func_check_cert check_cert_ptr;
static func_install_device_cert install_device_cert_ptr;
static func_start_discovery start_discovery_ptr;
static func_change_user change_user_ptr;
static func_is_user_login is_user_login_ptr;

View File

@ -253,6 +253,13 @@ struct CertificateInformation {
std::string serial_number;
};
enum class MessageFlag : int
{
MSG_FLAG_NONE = 0,
MSG_SIGN = 1 << 0,
MSG_ENCRYPT = 1 << 1,
};
}
#endif