From d9ead02cfa1124f875991b59b44b1a60925a432c Mon Sep 17 00:00:00 2001 From: Stone Li Date: Mon, 2 Dec 2024 18:21:57 +0800 Subject: [PATCH] NEW: install cert for printer JIRA: STUDIO-7808 Change-Id: Ieba4db18a2735c6f301ac13ac5b89a4937f379f2 Signed-off-by: Stone Li --- src/slic3r/GUI/DeviceManager.cpp | 18 ++++++++-------- src/slic3r/GUI/DeviceManager.hpp | 6 +++--- src/slic3r/GUI/GUI_App.cpp | 11 ++++++++++ src/slic3r/GUI/GUI_App.hpp | 3 ++- src/slic3r/GUI/Monitor.cpp | 2 ++ src/slic3r/GUI/SelectMachine.cpp | 2 ++ src/slic3r/Utils/NetworkAgent.cpp | 31 +++++++++++++++++++++++---- src/slic3r/Utils/NetworkAgent.hpp | 15 +++++++++---- src/slic3r/Utils/bambu_networking.hpp | 7 ++++++ 9 files changed, 74 insertions(+), 21 deletions(-) diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 737d918c9..9b40ff95b 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -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); } } diff --git a/src/slic3r/GUI/DeviceManager.hpp b/src/slic3r/GUI/DeviceManager.hpp index a127ca68d..ed36e1c00 100644 --- a/src/slic3r/GUI/DeviceManager.hpp +++ b/src/slic3r/GUI/DeviceManager.hpp @@ -957,9 +957,9 @@ public: /* Msg for display MsgFn */ typedef std::function 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); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index aabc773fd..e276c2900 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -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) diff --git a/src/slic3r/GUI/GUI_App.hpp b/src/slic3r/GUI/GUI_App.hpp index ec01e5230..589e94f62 100644 --- a/src/slic3r/GUI/GUI_App.hpp +++ b/src/slic3r/GUI/GUI_App.hpp @@ -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); diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 83d77b166..47323670c 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -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(); diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index fb9e25c18..4ba39afab 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -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()) { diff --git a/src/slic3r/Utils/NetworkAgent.cpp b/src/slic3r/Utils/NetworkAgent.cpp index 05fb0e474..bf943d7ae 100644 --- a/src/slic3r/Utils/NetworkAgent.cpp +++ b/src/slic3r/Utils/NetworkAgent.cpp @@ -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(get_network_function("bambu_network_connect_printer")); disconnect_printer_ptr = reinterpret_cast(get_network_function("bambu_network_disconnect_printer")); send_message_to_printer_ptr = reinterpret_cast(get_network_function("bambu_network_send_message_to_printer")); + check_cert_ptr = reinterpret_cast(get_network_function("bambu_network_update_cert")); + install_device_cert_ptr = reinterpret_cast(get_network_function("bambu_network_install_device_cert")); start_discovery_ptr = reinterpret_cast(get_network_function("bambu_network_start_discovery")); change_user_ptr = reinterpret_cast(get_network_function("bambu_network_change_user")); is_user_login_ptr = reinterpret_cast(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; diff --git a/src/slic3r/Utils/NetworkAgent.hpp b/src/slic3r/Utils/NetworkAgent.hpp index fc006c8e0..6c7978e81 100644 --- a/src/slic3r/Utils/NetworkAgent.hpp +++ b/src/slic3r/Utils/NetworkAgent.hpp @@ -38,10 +38,12 @@ typedef int (*func_del_subscribe)(void *agent, std::vector 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 callback); typedef int (*func_get_mw_user_4ulist)(void *agent, int seed, int limit, std::function 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; diff --git a/src/slic3r/Utils/bambu_networking.hpp b/src/slic3r/Utils/bambu_networking.hpp index 0c7b4fddb..b96be0d98 100644 --- a/src/slic3r/Utils/bambu_networking.hpp +++ b/src/slic3r/Utils/bambu_networking.hpp @@ -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