mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Merge branch 'integration' into memory_api
This commit is contained in:
		
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -16,7 +16,7 @@ void APIServerConnectionBase::log_send_message_(const char *name, const std::str | ||||
|  | ||||
| void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) { | ||||
|   switch (msg_type) { | ||||
|     case 1: { | ||||
|     case HelloRequest::MESSAGE_TYPE: { | ||||
|       HelloRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -25,7 +25,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_hello_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 3: { | ||||
|     case ConnectRequest::MESSAGE_TYPE: { | ||||
|       ConnectRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -34,7 +34,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_connect_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 5: { | ||||
|     case DisconnectRequest::MESSAGE_TYPE: { | ||||
|       DisconnectRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -43,7 +43,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_disconnect_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 6: { | ||||
|     case DisconnectResponse::MESSAGE_TYPE: { | ||||
|       DisconnectResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -52,7 +52,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_disconnect_response(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 7: { | ||||
|     case PingRequest::MESSAGE_TYPE: { | ||||
|       PingRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -61,7 +61,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_ping_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 8: { | ||||
|     case PingResponse::MESSAGE_TYPE: { | ||||
|       PingResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -70,7 +70,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_ping_response(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 9: { | ||||
|     case DeviceInfoRequest::MESSAGE_TYPE: { | ||||
|       DeviceInfoRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -79,7 +79,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_device_info_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 11: { | ||||
|     case ListEntitiesRequest::MESSAGE_TYPE: { | ||||
|       ListEntitiesRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -88,7 +88,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_list_entities_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 20: { | ||||
|     case SubscribeStatesRequest::MESSAGE_TYPE: { | ||||
|       SubscribeStatesRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -97,7 +97,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_subscribe_states_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 28: { | ||||
|     case SubscribeLogsRequest::MESSAGE_TYPE: { | ||||
|       SubscribeLogsRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -107,7 +107,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       break; | ||||
|     } | ||||
| #ifdef USE_COVER | ||||
|     case 30: { | ||||
|     case CoverCommandRequest::MESSAGE_TYPE: { | ||||
|       CoverCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -118,7 +118,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_FAN | ||||
|     case 31: { | ||||
|     case FanCommandRequest::MESSAGE_TYPE: { | ||||
|       FanCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -129,7 +129,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_LIGHT | ||||
|     case 32: { | ||||
|     case LightCommandRequest::MESSAGE_TYPE: { | ||||
|       LightCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -140,7 +140,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_SWITCH | ||||
|     case 33: { | ||||
|     case SwitchCommandRequest::MESSAGE_TYPE: { | ||||
|       SwitchCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -150,7 +150,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       break; | ||||
|     } | ||||
| #endif | ||||
|     case 34: { | ||||
|     case SubscribeHomeassistantServicesRequest::MESSAGE_TYPE: { | ||||
|       SubscribeHomeassistantServicesRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -159,7 +159,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_subscribe_homeassistant_services_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 36: { | ||||
|     case GetTimeRequest::MESSAGE_TYPE: { | ||||
|       GetTimeRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -168,7 +168,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_get_time_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 37: { | ||||
|     case GetTimeResponse::MESSAGE_TYPE: { | ||||
|       GetTimeResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -177,7 +177,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_get_time_response(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 38: { | ||||
|     case SubscribeHomeAssistantStatesRequest::MESSAGE_TYPE: { | ||||
|       SubscribeHomeAssistantStatesRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -186,7 +186,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       this->on_subscribe_home_assistant_states_request(msg); | ||||
|       break; | ||||
|     } | ||||
|     case 40: { | ||||
|     case HomeAssistantStateResponse::MESSAGE_TYPE: { | ||||
|       HomeAssistantStateResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -196,7 +196,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|       break; | ||||
|     } | ||||
| #ifdef USE_API_SERVICES | ||||
|     case 42: { | ||||
|     case ExecuteServiceRequest::MESSAGE_TYPE: { | ||||
|       ExecuteServiceRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -207,7 +207,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_CAMERA | ||||
|     case 45: { | ||||
|     case CameraImageRequest::MESSAGE_TYPE: { | ||||
|       CameraImageRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -218,7 +218,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_CLIMATE | ||||
|     case 48: { | ||||
|     case ClimateCommandRequest::MESSAGE_TYPE: { | ||||
|       ClimateCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -229,7 +229,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_NUMBER | ||||
|     case 51: { | ||||
|     case NumberCommandRequest::MESSAGE_TYPE: { | ||||
|       NumberCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -240,7 +240,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_SELECT | ||||
|     case 54: { | ||||
|     case SelectCommandRequest::MESSAGE_TYPE: { | ||||
|       SelectCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -251,7 +251,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_SIREN | ||||
|     case 57: { | ||||
|     case SirenCommandRequest::MESSAGE_TYPE: { | ||||
|       SirenCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -262,7 +262,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_LOCK | ||||
|     case 60: { | ||||
|     case LockCommandRequest::MESSAGE_TYPE: { | ||||
|       LockCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -273,7 +273,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BUTTON | ||||
|     case 62: { | ||||
|     case ButtonCommandRequest::MESSAGE_TYPE: { | ||||
|       ButtonCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -284,7 +284,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_MEDIA_PLAYER | ||||
|     case 65: { | ||||
|     case MediaPlayerCommandRequest::MESSAGE_TYPE: { | ||||
|       MediaPlayerCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -295,7 +295,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 66: { | ||||
|     case SubscribeBluetoothLEAdvertisementsRequest::MESSAGE_TYPE: { | ||||
|       SubscribeBluetoothLEAdvertisementsRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -306,7 +306,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 68: { | ||||
|     case BluetoothDeviceRequest::MESSAGE_TYPE: { | ||||
|       BluetoothDeviceRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -317,7 +317,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 70: { | ||||
|     case BluetoothGATTGetServicesRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTGetServicesRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -328,7 +328,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 73: { | ||||
|     case BluetoothGATTReadRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTReadRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -339,7 +339,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 75: { | ||||
|     case BluetoothGATTWriteRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTWriteRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -350,7 +350,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 76: { | ||||
|     case BluetoothGATTReadDescriptorRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTReadDescriptorRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -361,7 +361,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 77: { | ||||
|     case BluetoothGATTWriteDescriptorRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTWriteDescriptorRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -372,7 +372,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 78: { | ||||
|     case BluetoothGATTNotifyRequest::MESSAGE_TYPE: { | ||||
|       BluetoothGATTNotifyRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -383,7 +383,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 80: { | ||||
|     case SubscribeBluetoothConnectionsFreeRequest::MESSAGE_TYPE: { | ||||
|       SubscribeBluetoothConnectionsFreeRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -394,7 +394,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 87: { | ||||
|     case UnsubscribeBluetoothLEAdvertisementsRequest::MESSAGE_TYPE: { | ||||
|       UnsubscribeBluetoothLEAdvertisementsRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -405,7 +405,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 89: { | ||||
|     case SubscribeVoiceAssistantRequest::MESSAGE_TYPE: { | ||||
|       SubscribeVoiceAssistantRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -416,7 +416,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 91: { | ||||
|     case VoiceAssistantResponse::MESSAGE_TYPE: { | ||||
|       VoiceAssistantResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -427,7 +427,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 92: { | ||||
|     case VoiceAssistantEventResponse::MESSAGE_TYPE: { | ||||
|       VoiceAssistantEventResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -438,7 +438,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_ALARM_CONTROL_PANEL | ||||
|     case 96: { | ||||
|     case AlarmControlPanelCommandRequest::MESSAGE_TYPE: { | ||||
|       AlarmControlPanelCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -449,7 +449,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_TEXT | ||||
|     case 99: { | ||||
|     case TextCommandRequest::MESSAGE_TYPE: { | ||||
|       TextCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -460,7 +460,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_DATETIME_DATE | ||||
|     case 102: { | ||||
|     case DateCommandRequest::MESSAGE_TYPE: { | ||||
|       DateCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -471,7 +471,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_DATETIME_TIME | ||||
|     case 105: { | ||||
|     case TimeCommandRequest::MESSAGE_TYPE: { | ||||
|       TimeCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -482,7 +482,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 106: { | ||||
|     case VoiceAssistantAudio::MESSAGE_TYPE: { | ||||
|       VoiceAssistantAudio msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -493,7 +493,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VALVE | ||||
|     case 111: { | ||||
|     case ValveCommandRequest::MESSAGE_TYPE: { | ||||
|       ValveCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -504,7 +504,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_DATETIME_DATETIME | ||||
|     case 114: { | ||||
|     case DateTimeCommandRequest::MESSAGE_TYPE: { | ||||
|       DateTimeCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -515,7 +515,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 115: { | ||||
|     case VoiceAssistantTimerEventResponse::MESSAGE_TYPE: { | ||||
|       VoiceAssistantTimerEventResponse msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -526,7 +526,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_UPDATE | ||||
|     case 118: { | ||||
|     case UpdateCommandRequest::MESSAGE_TYPE: { | ||||
|       UpdateCommandRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -537,7 +537,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 119: { | ||||
|     case VoiceAssistantAnnounceRequest::MESSAGE_TYPE: { | ||||
|       VoiceAssistantAnnounceRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -548,7 +548,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 121: { | ||||
|     case VoiceAssistantConfigurationRequest::MESSAGE_TYPE: { | ||||
|       VoiceAssistantConfigurationRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -559,7 +559,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
|     case 123: { | ||||
|     case VoiceAssistantSetConfiguration::MESSAGE_TYPE: { | ||||
|       VoiceAssistantSetConfiguration msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -570,7 +570,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_API_NOISE | ||||
|     case 124: { | ||||
|     case NoiseEncryptionSetKeyRequest::MESSAGE_TYPE: { | ||||
|       NoiseEncryptionSetKeyRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -581,7 +581,7 @@ void APIServerConnectionBase::read_message(uint32_t msg_size, uint32_t msg_type, | ||||
|     } | ||||
| #endif | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
|     case 127: { | ||||
|     case BluetoothScannerSetModeRequest::MESSAGE_TYPE: { | ||||
|       BluetoothScannerSetModeRequest msg; | ||||
|       msg.decode(msg_data, msg_size); | ||||
| #ifdef HAS_PROTO_MESSAGE_DUMP | ||||
| @@ -617,10 +617,8 @@ void APIServerConnection::on_ping_request(const PingRequest &msg) { | ||||
|   } | ||||
| } | ||||
| void APIServerConnection::on_device_info_request(const DeviceInfoRequest &msg) { | ||||
|   if (this->check_connection_setup_()) { | ||||
|     if (!this->send_device_info_response(msg)) { | ||||
|       this->on_fatal_error(); | ||||
|     } | ||||
|   if (this->check_connection_setup_() && !this->send_device_info_response(msg)) { | ||||
|     this->on_fatal_error(); | ||||
|   } | ||||
| } | ||||
| void APIServerConnection::on_list_entities_request(const ListEntitiesRequest &msg) { | ||||
| @@ -650,10 +648,8 @@ void APIServerConnection::on_subscribe_home_assistant_states_request(const Subsc | ||||
|   } | ||||
| } | ||||
| void APIServerConnection::on_get_time_request(const GetTimeRequest &msg) { | ||||
|   if (this->check_connection_setup_()) { | ||||
|     if (!this->send_get_time_response(msg)) { | ||||
|       this->on_fatal_error(); | ||||
|     } | ||||
|   if (this->check_connection_setup_() && !this->send_get_time_response(msg)) { | ||||
|     this->on_fatal_error(); | ||||
|   } | ||||
| } | ||||
| #ifdef USE_API_SERVICES | ||||
| @@ -665,10 +661,8 @@ void APIServerConnection::on_execute_service_request(const ExecuteServiceRequest | ||||
| #endif | ||||
| #ifdef USE_API_NOISE | ||||
| void APIServerConnection::on_noise_encryption_set_key_request(const NoiseEncryptionSetKeyRequest &msg) { | ||||
|   if (this->check_authenticated_()) { | ||||
|     if (!this->send_noise_encryption_set_key_response(msg)) { | ||||
|       this->on_fatal_error(); | ||||
|     } | ||||
|   if (this->check_authenticated_() && !this->send_noise_encryption_set_key_response(msg)) { | ||||
|     this->on_fatal_error(); | ||||
|   } | ||||
| } | ||||
| #endif | ||||
| @@ -858,10 +852,8 @@ void APIServerConnection::on_bluetooth_gatt_notify_request(const BluetoothGATTNo | ||||
| #ifdef USE_BLUETOOTH_PROXY | ||||
| void APIServerConnection::on_subscribe_bluetooth_connections_free_request( | ||||
|     const SubscribeBluetoothConnectionsFreeRequest &msg) { | ||||
|   if (this->check_authenticated_()) { | ||||
|     if (!this->send_subscribe_bluetooth_connections_free_response(msg)) { | ||||
|       this->on_fatal_error(); | ||||
|     } | ||||
|   if (this->check_authenticated_() && !this->send_subscribe_bluetooth_connections_free_response(msg)) { | ||||
|     this->on_fatal_error(); | ||||
|   } | ||||
| } | ||||
| #endif | ||||
| @@ -889,10 +881,8 @@ void APIServerConnection::on_subscribe_voice_assistant_request(const SubscribeVo | ||||
| #endif | ||||
| #ifdef USE_VOICE_ASSISTANT | ||||
| void APIServerConnection::on_voice_assistant_configuration_request(const VoiceAssistantConfigurationRequest &msg) { | ||||
|   if (this->check_authenticated_()) { | ||||
|     if (!this->send_voice_assistant_get_configuration_response(msg)) { | ||||
|       this->on_fatal_error(); | ||||
|     } | ||||
|   if (this->check_authenticated_() && !this->send_voice_assistant_get_configuration_response(msg)) { | ||||
|     this->on_fatal_error(); | ||||
|   } | ||||
| } | ||||
| #endif | ||||
|   | ||||
| @@ -224,12 +224,26 @@ class TypeInfo(ABC): | ||||
|  | ||||
|     encode_func = None | ||||
|  | ||||
|     @classmethod | ||||
|     def can_use_dump_field(cls) -> bool: | ||||
|         """Whether this type can use the dump_field helper functions. | ||||
|  | ||||
|         Returns True for simple types that have dump_field overloads. | ||||
|         Complex types like messages and bytes should return False. | ||||
|         """ | ||||
|         return True | ||||
|  | ||||
|     def dump_field_value(self, value: str) -> str: | ||||
|         """Get the value expression to pass to dump_field. | ||||
|  | ||||
|         Most types just pass the value directly, but some (like enums) need a cast. | ||||
|         """ | ||||
|         return value | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f'out.append("  {self.name}: ");\n' | ||||
|         o += self.dump(f"this->{self.field_name}") + "\n" | ||||
|         o += 'out.append("\\n");\n' | ||||
|         return o | ||||
|         # Default implementation - subclasses can override if they need special handling | ||||
|         return f'dump_field(out, "{self.name}", {self.dump_field_value(f"this->{self.field_name}")});' | ||||
|  | ||||
|     @abstractmethod | ||||
|     def dump(self, name: str) -> str: | ||||
| @@ -593,6 +607,22 @@ class StringType(TypeInfo): | ||||
|             f"}}" | ||||
|         ) | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         # For SOURCE_CLIENT only, use std::string | ||||
|         if not self._needs_encode: | ||||
|             return f'dump_field(out, "{self.name}", this->{self.field_name});' | ||||
|  | ||||
|         # For SOURCE_SERVER, use StringRef with _ref_ suffix | ||||
|         if not self._needs_decode: | ||||
|             return f'dump_field(out, "{self.name}", this->{self.field_name}_ref_);' | ||||
|  | ||||
|         # For SOURCE_BOTH, we need custom logic | ||||
|         o = f'out.append("  {self.name}: ");\n' | ||||
|         o += self.dump(f"this->{self.field_name}") + "\n" | ||||
|         o += 'out.append("\\n");' | ||||
|         return o | ||||
|  | ||||
|     def get_size_calculation(self, name: str, force: bool = False) -> str: | ||||
|         # For SOURCE_CLIENT only messages, use the string field directly | ||||
|         if not self._needs_encode: | ||||
| @@ -615,6 +645,10 @@ class StringType(TypeInfo): | ||||
|  | ||||
| @register_type(11) | ||||
| class MessageType(TypeInfo): | ||||
|     @classmethod | ||||
|     def can_use_dump_field(cls) -> bool: | ||||
|         return False | ||||
|  | ||||
|     @property | ||||
|     def cpp_type(self) -> str: | ||||
|         return self._field.type_name[1:] | ||||
| @@ -651,6 +685,13 @@ class MessageType(TypeInfo): | ||||
|         o = f"{name}.dump_to(out);" | ||||
|         return o | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f'out.append("  {self.name}: ");\n' | ||||
|         o += f"this->{self.field_name}.dump_to(out);\n" | ||||
|         o += 'out.append("\\n");' | ||||
|         return o | ||||
|  | ||||
|     def get_size_calculation(self, name: str, force: bool = False) -> str: | ||||
|         return self._get_simple_size_calculation(name, force, "add_message_object") | ||||
|  | ||||
| @@ -664,6 +705,10 @@ class MessageType(TypeInfo): | ||||
|  | ||||
| @register_type(12) | ||||
| class BytesType(TypeInfo): | ||||
|     @classmethod | ||||
|     def can_use_dump_field(cls) -> bool: | ||||
|         return False | ||||
|  | ||||
|     cpp_type = "std::string" | ||||
|     default_value = "" | ||||
|     reference_type = "std::string &" | ||||
| @@ -719,6 +764,13 @@ class BytesType(TypeInfo): | ||||
|             f"  }}" | ||||
|         ) | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f'out.append("  {self.name}: ");\n' | ||||
|         o += self.dump(f"this->{self.field_name}") + "\n" | ||||
|         o += 'out.append("\\n");' | ||||
|         return o | ||||
|  | ||||
|     def get_size_calculation(self, name: str, force: bool = False) -> str: | ||||
|         return f"ProtoSize::add_bytes_field(total_size, {self.calculate_field_id_size()}, this->{self.field_name}_len_);" | ||||
|  | ||||
| @@ -729,6 +781,10 @@ class BytesType(TypeInfo): | ||||
| class FixedArrayBytesType(TypeInfo): | ||||
|     """Special type for fixed-size byte arrays.""" | ||||
|  | ||||
|     @classmethod | ||||
|     def can_use_dump_field(cls) -> bool: | ||||
|         return False | ||||
|  | ||||
|     def __init__(self, field: descriptor.FieldDescriptorProto, size: int) -> None: | ||||
|         super().__init__(field) | ||||
|         self.array_size = size | ||||
| @@ -778,6 +834,13 @@ class FixedArrayBytesType(TypeInfo): | ||||
|         o = f"out.append(format_hex_pretty({name}, {name}_len));" | ||||
|         return o | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f'out.append("  {self.name}: ");\n' | ||||
|         o += f"out.append(format_hex_pretty(this->{self.field_name}, this->{self.field_name}_len));\n" | ||||
|         o += 'out.append("\\n");' | ||||
|         return o | ||||
|  | ||||
|     def get_size_calculation(self, name: str, force: bool = False) -> str: | ||||
|         # Use the actual length stored in the _len field | ||||
|         length_field = f"this->{self.field_name}_len" | ||||
| @@ -850,6 +913,10 @@ class EnumType(TypeInfo): | ||||
|         o = f"out.append(proto_enum_to_string<{self.cpp_type}>({name}));" | ||||
|         return o | ||||
|  | ||||
|     def dump_field_value(self, value: str) -> str: | ||||
|         # Enums need explicit cast for the template | ||||
|         return f"static_cast<{self.cpp_type}>({value})" | ||||
|  | ||||
|     def get_size_calculation(self, name: str, force: bool = False) -> str: | ||||
|         return self._get_simple_size_calculation( | ||||
|             name, force, "add_enum_field", f"static_cast<uint32_t>({name})" | ||||
| @@ -947,6 +1014,27 @@ class SInt64Type(TypeInfo): | ||||
|         return self.calculate_field_id_size() + 3  # field ID + 3 bytes typical varint | ||||
|  | ||||
|  | ||||
| def _generate_array_dump_content( | ||||
|     ti, field_name: str, name: str, is_bool: bool = False | ||||
| ) -> str: | ||||
|     """Generate dump content for array types (repeated or fixed array). | ||||
|  | ||||
|     Shared helper to avoid code duplication between RepeatedTypeInfo and FixedArrayRepeatedType. | ||||
|     """ | ||||
|     o = f"for (const auto {'' if is_bool else '&'}it : {field_name}) {{\n" | ||||
|     # Check if underlying type can use dump_field | ||||
|     if type(ti).can_use_dump_field(): | ||||
|         # For types that have dump_field overloads, use them with extra indent | ||||
|         o += f'  dump_field(out, "{name}", {ti.dump_field_value("it")}, 4);\n' | ||||
|     else: | ||||
|         # For complex types (messages, bytes), use the old pattern | ||||
|         o += f'  out.append("  {name}: ");\n' | ||||
|         o += indent(ti.dump("it")) + "\n" | ||||
|         o += '  out.append("\\n");\n' | ||||
|     o += "}" | ||||
|     return o | ||||
|  | ||||
|  | ||||
| class FixedArrayRepeatedType(TypeInfo): | ||||
|     """Special type for fixed-size repeated fields using std::array. | ||||
|  | ||||
| @@ -1013,12 +1101,9 @@ class FixedArrayRepeatedType(TypeInfo): | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f"for (const auto &it : this->{self.field_name}) {{\n" | ||||
|         o += f'  out.append("  {self.name}: ");\n' | ||||
|         o += indent(self._ti.dump("it")) + "\n" | ||||
|         o += '  out.append("\\n");\n' | ||||
|         o += "}\n" | ||||
|         return o | ||||
|         return _generate_array_dump_content( | ||||
|             self._ti, f"this->{self.field_name}", self.name, is_bool=False | ||||
|         ) | ||||
|  | ||||
|     def dump(self, name: str) -> str: | ||||
|         # This is used when dumping the array itself (not its elements) | ||||
| @@ -1144,12 +1229,9 @@ class RepeatedTypeInfo(TypeInfo): | ||||
|  | ||||
|     @property | ||||
|     def dump_content(self) -> str: | ||||
|         o = f"for (const auto {'' if self._ti_is_bool else '&'}it : this->{self.field_name}) {{\n" | ||||
|         o += f'  out.append("  {self.name}: ");\n' | ||||
|         o += indent(self._ti.dump("it")) + "\n" | ||||
|         o += '  out.append("\\n");\n' | ||||
|         o += "}\n" | ||||
|         return o | ||||
|         return _generate_array_dump_content( | ||||
|             self._ti, f"this->{self.field_name}", self.name, is_bool=self._ti_is_bool | ||||
|         ) | ||||
|  | ||||
|     def dump(self, _: str): | ||||
|         pass | ||||
| @@ -1647,10 +1729,8 @@ def build_message_type( | ||||
|             dump_impl += f" {dump[0]} " | ||||
|         else: | ||||
|             dump_impl += "\n" | ||||
|             dump_impl += "  __attribute__((unused)) char buffer[64];\n" | ||||
|             dump_impl += f'  out.append("{desc.name} {{\\n");\n' | ||||
|             dump_impl += f'  MessageDumpHelper helper(out, "{desc.name}");\n' | ||||
|             dump_impl += indent("\n".join(dump)) + "\n" | ||||
|             dump_impl += '  out.append("}");\n' | ||||
|     else: | ||||
|         o2 = f'out.append("{desc.name} {{}}");' | ||||
|         if len(dump_impl) + len(o2) + 3 < 120: | ||||
| @@ -1937,8 +2017,8 @@ def build_service_message_type( | ||||
|             case += "#endif\n" | ||||
|         case += f"this->{func}(msg);\n" | ||||
|         case += "break;" | ||||
|         # Store the ifdef with the case for later use | ||||
|         RECEIVE_CASES[id_] = (case, ifdef) | ||||
|         # Store the message name and ifdef with the case for later use | ||||
|         RECEIVE_CASES[id_] = (case, ifdef, mt.name) | ||||
|  | ||||
|         # Only close ifdef if we opened it | ||||
|         if ifdef is not None: | ||||
| @@ -2007,6 +2087,90 @@ static inline void append_quoted_string(std::string &out, const StringRef &ref) | ||||
|   out.append("'"); | ||||
| } | ||||
|  | ||||
| // Common helpers for dump_field functions | ||||
| static inline void append_field_prefix(std::string &out, const char *field_name, int indent) { | ||||
|   out.append(indent, ' ').append(field_name).append(": "); | ||||
| } | ||||
|  | ||||
| static inline void append_with_newline(std::string &out, const char *str) { | ||||
|   out.append(str); | ||||
|   out.append("\\n"); | ||||
| } | ||||
|  | ||||
| // RAII helper for message dump formatting | ||||
| class MessageDumpHelper { | ||||
|  public: | ||||
|   MessageDumpHelper(std::string &out, const char *message_name) : out_(out) { | ||||
|     out_.append(message_name); | ||||
|     out_.append(" {\\n"); | ||||
|   } | ||||
|   ~MessageDumpHelper() { out_.append(" }"); } | ||||
|  | ||||
|  private: | ||||
|   std::string &out_; | ||||
| }; | ||||
|  | ||||
| // Helper functions to reduce code duplication in dump methods | ||||
| static void dump_field(std::string &out, const char *field_name, int32_t value, int indent = 2) { | ||||
|   char buffer[64]; | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   snprintf(buffer, 64, "%" PRId32, value); | ||||
|   append_with_newline(out, buffer); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, uint32_t value, int indent = 2) { | ||||
|   char buffer[64]; | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   snprintf(buffer, 64, "%" PRIu32, value); | ||||
|   append_with_newline(out, buffer); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, float value, int indent = 2) { | ||||
|   char buffer[64]; | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   snprintf(buffer, 64, "%g", value); | ||||
|   append_with_newline(out, buffer); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, double value, int indent = 2) { | ||||
|   char buffer[64]; | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   snprintf(buffer, 64, "%g", value); | ||||
|   append_with_newline(out, buffer); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, uint64_t value, int indent = 2) { | ||||
|   char buffer[64]; | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   snprintf(buffer, 64, "%llu", value); | ||||
|   append_with_newline(out, buffer); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, bool value, int indent = 2) { | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   out.append(YESNO(value)); | ||||
|   out.append("\\n"); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, const std::string &value, int indent = 2) { | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   out.append("'").append(value).append("'"); | ||||
|   out.append("\\n"); | ||||
| } | ||||
|  | ||||
| static void dump_field(std::string &out, const char *field_name, StringRef value, int indent = 2) { | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   append_quoted_string(out, value); | ||||
|   out.append("\\n"); | ||||
| } | ||||
|  | ||||
| template<typename T> | ||||
| static void dump_field(std::string &out, const char *field_name, T value, int indent = 2) { | ||||
|   append_field_prefix(out, field_name, indent); | ||||
|   out.append(proto_enum_to_string<T>(value)); | ||||
|   out.append("\\n"); | ||||
| } | ||||
|  | ||||
| """ | ||||
|  | ||||
|     content += "namespace enums {\n\n" | ||||
| @@ -2203,10 +2367,11 @@ static const char *const TAG = "api.service"; | ||||
|     hpp += "  void read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) override;\n" | ||||
|     out = f"void {class_name}::read_message(uint32_t msg_size, uint32_t msg_type, uint8_t *msg_data) {{\n" | ||||
|     out += "  switch (msg_type) {\n" | ||||
|     for i, (case, ifdef) in cases: | ||||
|     for i, (case, ifdef, message_name) in cases: | ||||
|         if ifdef is not None: | ||||
|             out += f"#ifdef {ifdef}\n" | ||||
|         c = f"    case {i}: {{\n" | ||||
|  | ||||
|         c = f"    case {message_name}::MESSAGE_TYPE: {{\n" | ||||
|         c += indent(case, "      ") + "\n" | ||||
|         c += "    }" | ||||
|         out += c + "\n" | ||||
| @@ -2263,19 +2428,16 @@ static const char *const TAG = "api.service"; | ||||
|             else: | ||||
|                 check_func = "this->check_connection_setup_()" | ||||
|  | ||||
|             body = f"if ({check_func}) {{\n" | ||||
|  | ||||
|             # Add the actual handler code, indented | ||||
|             handler_body = "" | ||||
|             if is_void: | ||||
|                 handler_body = f"this->{func}(msg);\n" | ||||
|                 # For void methods, just wrap with auth check | ||||
|                 body = f"if ({check_func}) {{\n" | ||||
|                 body += f"  this->{func}(msg);\n" | ||||
|                 body += "}\n" | ||||
|             else: | ||||
|                 handler_body = f"if (!this->send_{func}_response(msg)) {{\n" | ||||
|                 handler_body += "  this->on_fatal_error();\n" | ||||
|                 handler_body += "}\n" | ||||
|  | ||||
|             body += indent(handler_body) + "\n" | ||||
|             body += "}\n" | ||||
|                 # For non-void methods, combine auth check and send response check | ||||
|                 body = f"if ({check_func} && !this->send_{func}_response(msg)) {{\n" | ||||
|                 body += "  this->on_fatal_error();\n" | ||||
|                 body += "}\n" | ||||
|         else: | ||||
|             # No auth check needed, just call the handler | ||||
|             body = "" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user