@@ -122,7 +122,8 @@ void ChatApp::sendMessage(const std::string& text) {
122122void ChatApp::applySettings (const std::string& nickname, const std::string& keyHex) {
123123 bool needRestart = false ;
124124
125- settings.nickname = nickname;
125+ // Trim nickname to protocol limit
126+ settings.nickname = nickname.substr (0 , SENDER_NAME_SIZE - 1 );
126127
127128 // Parse hex key
128129 if (keyHex.size () == ESP_NOW_KEY_LEN * 2 ) {
@@ -133,7 +134,9 @@ void ChatApp::applySettings(const std::string& nickname, const std::string& keyH
133134 char hex[3 ] = { keyHex[i * 2 ], keyHex[i * 2 + 1 ], 0 };
134135 newKey[i] = static_cast <uint8_t >(strtoul (hex, nullptr , 16 ));
135136 }
136- if (!std::equal (newKey, newKey + ESP_NOW_KEY_LEN, settings.encryptionKey .begin ())) {
137+ // Restart if key changed OR if encryption is being enabled
138+ bool wasEnabled = settings.hasEncryptionKey ;
139+ if (!wasEnabled || !std::equal (newKey, newKey + ESP_NOW_KEY_LEN, settings.encryptionKey .begin ())) {
137140 std::copy (newKey, newKey + ESP_NOW_KEY_LEN, settings.encryptionKey .begin ());
138141 needRestart = true ;
139142 }
@@ -151,7 +154,7 @@ void ChatApp::applySettings(const std::string& nickname, const std::string& keyH
151154 LOGGER.warn (" Key must be exactly {} hex characters, got {}" , ESP_NOW_KEY_LEN * 2 , keyHex.size ());
152155 }
153156
154- state.setLocalNickname (nickname);
157+ state.setLocalNickname (settings. nickname );
155158 saveSettings (settings);
156159
157160 if (needRestart) {
@@ -161,8 +164,9 @@ void ChatApp::applySettings(const std::string& nickname, const std::string& keyH
161164}
162165
163166void ChatApp::switchChannel (const std::string& chatChannel) {
164- state.setCurrentChannel (chatChannel);
165- settings.chatChannel = chatChannel;
167+ const auto trimmedChannel = chatChannel.substr (0 , TARGET_SIZE - 1 );
168+ state.setCurrentChannel (trimmedChannel);
169+ settings.chatChannel = trimmedChannel;
166170 saveSettings (settings);
167171
168172 {
0 commit comments