sdp_parser: replace sdp_query_complete_event_t with regular hci event

This commit is contained in:
Matthias Ringwald 2016-01-29 18:30:07 +01:00
parent 7bd8e93b3a
commit fd2eb611c5
15 changed files with 88 additions and 99 deletions

View File

@ -81,17 +81,17 @@
#include <linux/if_tun.h> #include <linux/if_tun.h>
#endif #endif
#include "hci_cmd.h"
#include "btstack_run_loop.h"
#include "classic/sdp_util.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_event.h"
#include "btstack_run_loop.h"
#include "classic/sdp_client.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_query_util.h"
#include "classic/sdp_util.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_client.h"
#include "classic/sdp_query_util.h"
#include "pan.h" #include "pan.h"
static int record_id = -1; static int record_id = -1;
@ -319,8 +319,8 @@ static char * get_string_from_data_element(uint8_t * element){
*/ */
static void handle_sdp_client_query_result(sdp_query_event_t *event) static void handle_sdp_client_query_result(sdp_query_event_t *event)
{ {
const uint8_t * complete_event;
sdp_query_attribute_value_event_t *value_event; sdp_query_attribute_value_event_t *value_event;
sdp_query_complete_event_t *complete_event;
des_iterator_t des_list_it; des_iterator_t des_list_it;
des_iterator_t prot_it; des_iterator_t prot_it;
char *str; char *str;
@ -414,7 +414,7 @@ static void handle_sdp_client_query_result(sdp_query_event_t *event)
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
complete_event = (sdp_query_complete_event_t*) event; complete_event = (sdp_query_complete_event_t*) event;
fprintf(stderr, "General query done with status %d.\n", complete_event->status); fprintf(stderr, "General query done with status %d.\n", sdp_query_complete_event_get_status(complete_event));
break; break;
} }

View File

@ -51,17 +51,17 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "hci_cmd.h" #include "btstack_event.h"
#include "btstack_run_loop.h"
#include "classic/sdp_util.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_run_loop.h"
#include "classic/sdp_client.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_query_util.h"
#include "classic/sdp_util.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_client.h"
#include "classic/sdp_query_util.h"
#include "pan.h" #include "pan.h"
int record_id = -1; int record_id = -1;
@ -165,7 +165,7 @@ static char * get_string_from_data_element(uint8_t * element){
static void handle_sdp_client_query_result(sdp_query_event_t * event){ static void handle_sdp_client_query_result(sdp_query_event_t * event){
/* LISTING_PAUSE */ /* LISTING_PAUSE */
sdp_query_attribute_value_event_t * ve; sdp_query_attribute_value_event_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
des_iterator_t des_list_it; des_iterator_t des_list_it;
des_iterator_t prot_it; des_iterator_t prot_it;
char *str; char *str;
@ -263,8 +263,8 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
} }
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t *) event;
printf("General query done with status %d.\n\n", ce->status); printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(ce));
break; break;
} }
/* LISTING_RESUME */ /* LISTING_RESUME */

View File

@ -50,18 +50,17 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "classic/sdp_parser.h" #include "btstack_event.h"
#include "classic/sdp_client.h"
#include "classic/sdp_query_util.h"
#include "hci_cmd.h"
#include "btstack_run_loop.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_run_loop.h"
#include "classic/sdp_client.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_parser.h"
#include "classic/sdp_query_util.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
int record_id = -1; int record_id = -1;
int attribute_id = -1; int attribute_id = -1;
@ -147,7 +146,7 @@ static void assertBuffer(int size){
/* LISTING_START(HandleSDPQUeryResult): Handling query result chunks. */ /* LISTING_START(HandleSDPQUeryResult): Handling query result chunks. */
static void handle_sdp_client_query_result(sdp_query_event_t * event){ static void handle_sdp_client_query_result(sdp_query_event_t * event){
sdp_query_attribute_value_event_t * ve; sdp_query_attribute_value_event_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_ATTRIBUTE_VALUE: case SDP_QUERY_ATTRIBUTE_VALUE:
@ -168,8 +167,8 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
} }
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t *) event;
printf("General query done with status %d.\n\n", ce->status); printf("General query done with status %d.\n\n", sdp_query_complete_event_get_status(ce));
exit(0); exit(0);
break; break;
} }

View File

@ -1577,6 +1577,7 @@ static void rfcomm_packet_handler(uint8_t packet_type, uint16_t channel, uint8_t
static void handle_sdp_rfcomm_service_result(sdp_query_event_t * rfcomm_event, void * context){ static void handle_sdp_rfcomm_service_result(sdp_query_event_t * rfcomm_event, void * context){
switch (rfcomm_event->type){ switch (rfcomm_event->type){
case SDP_QUERY_RFCOMM_SERVICE: { case SDP_QUERY_RFCOMM_SERVICE: {
case SDP_QUERY_COMPLETE: {
// already an HCI Event // already an HCI Event
const uint8_t * event = (const uint8_t *) event; const uint8_t * event = (const uint8_t *) event;
int event_len = 2 + event[1]; int event_len = 2 + event[1];
@ -1584,13 +1585,8 @@ static void handle_sdp_rfcomm_service_result(sdp_query_event_t * rfcomm_event, v
socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, event, event_len); socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, event, event_len);
break; break;
} }
case SDP_QUERY_COMPLETE: { default:
sdp_query_complete_event_t * complete_event = (sdp_query_complete_event_t*) rfcomm_event;
uint8_t event[] = { rfcomm_event->type, 1, complete_event->status};
hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event));
socket_connection_send_packet(context, HCI_EVENT_PACKET, 0, event, sizeof(event));
break; break;
}
} }
} }
@ -1603,7 +1599,8 @@ static void sdp_client_assert_buffer(int size){
// define new packet type SDP_CLIENT_PACKET // define new packet type SDP_CLIENT_PACKET
static void handle_sdp_client_query_result(sdp_query_event_t * event){ static void handle_sdp_client_query_result(sdp_query_event_t * event){
sdp_query_attribute_value_event_t * ve; sdp_query_attribute_value_event_t * ve;
sdp_query_complete_event_t * complete_event; const uint8_t * complete_event;
int event_len;
switch (event->type){ switch (event->type){
case SDP_QUERY_ATTRIBUTE_VALUE: case SDP_QUERY_ATTRIBUTE_VALUE:
@ -1629,10 +1626,10 @@ static void handle_sdp_client_query_result(sdp_query_event_t * event){
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
complete_event = (sdp_query_complete_event_t*) event; complete_event = (const uint8_t*) event;
uint8_t event[] = { SDP_QUERY_COMPLETE, 1, complete_event->status}; event_len = complete_event[1] + 2;
hci_dump_packet(HCI_EVENT_PACKET, 0, event, sizeof(event)); hci_dump_packet(HCI_EVENT_PACKET, 0, complete_event, event_len);
socket_connection_send_packet(sdp_client_query_connection, HCI_EVENT_PACKET, 0, event, sizeof(event)); socket_connection_send_packet(sdp_client_query_connection, HCI_EVENT_PACKET, 0, complete_event, event_len);
break; break;
} }
} }

View File

@ -416,7 +416,7 @@ void hfp_create_sdp_record(uint8_t * service, uint32_t service_record_handle, ui
static hfp_connection_t * connection_doing_sdp_query = NULL; static hfp_connection_t * connection_doing_sdp_query = NULL;
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
const uint8_t * ve; const uint8_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
hfp_connection_t * connection = connection_doing_sdp_query; hfp_connection_t * connection = connection_doing_sdp_query;
if ( connection->state != HFP_W4_SDP_QUERY_COMPLETE) return; if ( connection->state != HFP_W4_SDP_QUERY_COMPLETE) return;
@ -432,7 +432,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
connection_doing_sdp_query = NULL; connection_doing_sdp_query = NULL;
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
if (connection->rfcomm_channel_nr > 0){ if (connection->rfcomm_channel_nr > 0){
connection->state = HFP_W4_RFCOMM_CONNECTED; connection->state = HFP_W4_RFCOMM_CONNECTED;
@ -440,7 +440,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
rfcomm_create_channel(connection->remote_addr, connection->rfcomm_channel_nr, NULL); rfcomm_create_channel(connection->remote_addr, connection->rfcomm_channel_nr, NULL);
break; break;
} }
log_info("rfcomm service not found, status %u.", ce->status); log_info("rfcomm service not found, status %u.", sdp_query_complete_event_get_status(ce));
break; break;
default: default:
break; break;

View File

@ -627,7 +627,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
const uint8_t * ve; const uint8_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_RFCOMM_SERVICE: case SDP_QUERY_RFCOMM_SERVICE:
@ -636,7 +636,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr); printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
if (channel_nr > 0){ if (channel_nr > 0){
hsp_state = HSP_W4_RFCOMM_CONNECTED; hsp_state = HSP_W4_RFCOMM_CONNECTED;
@ -645,9 +645,9 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
break; break;
} }
hsp_ag_reset_state(); hsp_ag_reset_state();
printf("Service not found, status %u.\n", ce->status); printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(ce));
if (ce->status){ if (ce->status){
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, ce->status); emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, sdp_query_complete_event_get_status(ce));
} else { } else {
emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, SDP_SERVICE_NOT_FOUND); emit_event(HSP_SUBEVENT_AUDIO_CONNECTION_COMPLETE, SDP_SERVICE_NOT_FOUND);
} }

View File

@ -575,7 +575,7 @@ static void packet_handler (uint8_t packet_type, uint16_t channel, uint8_t *pack
static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
const uint8_t * ve; const uint8_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_RFCOMM_SERVICE: case SDP_QUERY_RFCOMM_SERVICE:
@ -584,7 +584,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr); printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_name(ve), channel_nr);
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
if (channel_nr > 0){ if (channel_nr > 0){
hsp_state = HSP_W4_RFCOMM_CONNECTED; hsp_state = HSP_W4_RFCOMM_CONNECTED;
@ -593,7 +593,7 @@ static void handle_query_rfcomm_event(sdp_query_event_t * event, void * context)
break; break;
} }
hsp_hs_reset_state(); hsp_hs_reset_state();
printf("Service not found, status %u.\n", ce->status); printf("Service not found, status %u.\n", sdp_query_complete_event_get_status(ce));
exit(0); exit(0);
break; break;
} }

View File

@ -272,9 +272,9 @@ void sdp_parser_handle_service_search(uint8_t * data, uint16_t total_count, uint
#endif #endif
void sdp_parser_handle_done(uint8_t status){ void sdp_parser_handle_done(uint8_t status){
sdp_query_complete_event_t complete_event = { uint8_t event[3];
SDP_QUERY_COMPLETE, event[0] = SDP_QUERY_COMPLETE;
status event[1] = 1;
}; event[2] = status;
(*sdp_query_callback)((sdp_query_event_t*)&complete_event); (*sdp_query_callback)((sdp_query_event_t*)&event);
} }

View File

@ -77,13 +77,6 @@ typedef struct sdp_query_event {
void * dummy; // force sdp_query_event struct to be word aligned -> avoid -Wcast-align warning void * dummy; // force sdp_query_event struct to be word aligned -> avoid -Wcast-align warning
} sdp_query_event_t; } sdp_query_event_t;
// SDP Query event to indicate that query/parser is complete.
typedef struct sdp_query_complete_event {
uint8_t type;
uint8_t status; // 0 == OK
void * dummy; // force sdp_query_complete_event struct to be word aligned -> avoid -Wcast-align warning
} sdp_query_complete_event_t;
// SDP Parser event to deliver an attribute value byte by byte // SDP Parser event to deliver an attribute value byte by byte
typedef struct sdp_query_attribute_value_event { typedef struct sdp_query_attribute_value_event {
uint8_t type; uint8_t type;

View File

@ -207,11 +207,11 @@ void sdp_query_rfcomm_register_callback(void(*sdp_app_callback)(sdp_query_event_
} }
static void sdp_query_complete_response(uint8_t status){ static void sdp_query_complete_response(uint8_t status){
sdp_query_complete_event_t complete_event = { uint8_t event[3];
SDP_QUERY_COMPLETE, event[0] = SDP_QUERY_COMPLETE;
status event[1] = 1;
}; event[2] = status;
(*registered_sdp_app_callback)((sdp_query_event_t*)&complete_event, registered_sdp_app_context); (*registered_sdp_app_callback)((sdp_query_event_t*)&event, registered_sdp_app_context);
} }
static void sdp_query_rfcomm_service_response(uint8_t status){ static void sdp_query_rfcomm_service_response(uint8_t status){

View File

@ -141,7 +141,7 @@ static void packet_handler(void * connection, uint8_t packet_type, uint16_t chan
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){ void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
const uint8_t * ve; const uint8_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_RFCOMM_SERVICE: case SDP_QUERY_RFCOMM_SERVICE:
@ -150,7 +150,7 @@ void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve), channel_nr); printf("** Service name: '%s', RFCOMM port %u\n", sdp_query_rfcomm_service_event_get_rfcomm_channel(ve), channel_nr);
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
if (channel_nr > 0) { if (channel_nr > 0) {
printf("RFCOMM create channel.\n"); printf("RFCOMM create channel.\n");

View File

@ -12,14 +12,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "hci_cmd.h" #include "btstack_event.h"
#include "btstack_run_loop.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_run_loop.h"
#include "classic/sdp_parser.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
#include "CppUTest/TestHarness.h" #include "CppUTest/TestHarness.h"
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
@ -145,7 +145,7 @@ static void test_attribute_value_event(sdp_query_attribute_value_event_t* event)
static void handle_sdp_parser_event(sdp_query_event_t * event){ static void handle_sdp_parser_event(sdp_query_event_t * event){
sdp_query_attribute_value_event_t * ve; sdp_query_attribute_value_event_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_ATTRIBUTE_VALUE: case SDP_QUERY_ATTRIBUTE_VALUE:
@ -163,8 +163,8 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t *) event;
printf("General query done with status %d.\n", ce->status); printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
break; break;
} }
} }

View File

@ -91,7 +91,7 @@ void sdp_query_rfcomm_init();
void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){ void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
sdp_query_complete_event_t * ce; const uint8_t * ce;
uint8_t * ve = (uint8_t *) event; uint8_t * ve = (uint8_t *) event;
printf("handle_query_rfcomm_event\n"); printf("handle_query_rfcomm_event\n");
@ -106,7 +106,7 @@ void handle_query_rfcomm_event(sdp_query_event_t * event, void * context){
service_index++; service_index++;
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
// printf("CALLBACK: Client query response done. \n"); // printf("CALLBACK: Client query response done. \n");
break; break;
} }

View File

@ -12,14 +12,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "hci_cmd.h" #include "btstack_event.h"
#include "btstack_run_loop.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_run_loop.h"
#include "classic/sdp_parser.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
#include "CppUTest/TestHarness.h" #include "CppUTest/TestHarness.h"
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
@ -90,7 +90,7 @@ static void test_attribute_value_event(sdp_query_attribute_value_event_t* event)
static void handle_sdp_parser_event(sdp_query_event_t * event){ static void handle_sdp_parser_event(sdp_query_event_t * event){
sdp_query_attribute_value_event_t * ve; sdp_query_attribute_value_event_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
switch (event->type){ switch (event->type){
case SDP_QUERY_ATTRIBUTE_VALUE: case SDP_QUERY_ATTRIBUTE_VALUE:
@ -108,8 +108,8 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t*) event;
printf("General query done with status %d.\n", ce->status); printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
break; break;
} }
} }

View File

@ -12,14 +12,14 @@
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include "hci_cmd.h" #include "btstack_event.h"
#include "btstack_run_loop.h"
#include "hci.h"
#include "btstack_memory.h" #include "btstack_memory.h"
#include "btstack_run_loop.h"
#include "classic/sdp_parser.h"
#include "hci.h"
#include "hci_cmd.h"
#include "hci_dump.h" #include "hci_dump.h"
#include "l2cap.h" #include "l2cap.h"
#include "classic/sdp_parser.h"
#include "CppUTest/TestHarness.h" #include "CppUTest/TestHarness.h"
#include "CppUTest/CommandLineTestRunner.h" #include "CppUTest/CommandLineTestRunner.h"
@ -42,7 +42,7 @@ static uint8_t sdp_test_record_list[] = {
static void handle_sdp_parser_event(sdp_query_event_t * event){ static void handle_sdp_parser_event(sdp_query_event_t * event){
sdp_query_service_record_handle_event_t * ve; sdp_query_service_record_handle_event_t * ve;
sdp_query_complete_event_t * ce; const uint8_t * ce;
static uint32_t record_handle = sdp_test_record_list[0]; static uint32_t record_handle = sdp_test_record_list[0];
@ -56,8 +56,8 @@ static void handle_sdp_parser_event(sdp_query_event_t * event){
break; break;
case SDP_QUERY_COMPLETE: case SDP_QUERY_COMPLETE:
ce = (sdp_query_complete_event_t*) event; ce = (const uint8_t *) event;
printf("General query done with status %d.\n", ce->status); printf("General query done with status %d.\n", sdp_query_complete_event_get_status(ce));
break; break;
} }
} }