Home | History | Annotate | Download | only in android

Lines Matching defs:dispatcher

295 /* Enumerates SDKCtlSocket I/O dispatcher states. */
297 /* I/O dispatcher expects a packet header. */
299 /* I/O dispatcher expects packet data. */
301 /* I/O dispatcher expects query response header. */
303 /* I/O dispatcher expects query response data. */
307 /* SDKCtlSocket I/O dispatcher descriptor. */
309 /* SDKCtlSocket instance for this dispatcher. */
311 /* Dispatcher state. */
336 /* I/O dispatcher for the socket. */
486 /* Quick check: the query could be currently handled by the dispatcher. */
488 /* Release the query from dispatcher. */
546 /* Quick check: the query could be currently handled by dispatcher. */
549 /* Release the query from dispatcher. */
978 * For the simplicity of implementation, the dispatcher will cancel query timer
996 /* Callback that is invoked by the I/O dispatcher when query is successfuly
1067 * through the dispatcher loop. */
1361 /* Starts I/O dispatcher for SDK controller socket. */
1364 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1366 dispatcher->state = SDKCTL_IODISP_EXPECT_HEADER;
1367 dispatcher->sdkctl = sdkctl;
1368 dispatcher->packet = NULL;
1369 dispatcher->current_query = NULL;
1372 async_socket_read_rel(dispatcher->sdkctl->as, &dispatcher->packet_header,
1374 dispatcher, -1);
1377 /* Resets I/O dispatcher for SDK controller socket. */
1380 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1383 if (dispatcher->current_query != NULL) {
1384 SDKCtlQuery* const query = dispatcher->current_query;
1385 dispatcher->current_query = NULL;
1391 if (dispatcher->packet != NULL) {
1392 _sdkctl_packet_release(dispatcher->packet);
1393 dispatcher->packet = NULL;
1396 /* Reset dispatcher state. */
1397 dispatcher->state = SDKCTL_IODISP_EXPECT_HEADER;
1399 T("SDKCtl %s: I/O Dispatcher is reset", sdkctl->service_name);
1403 * I/O dispatcher callbacks.
1406 /* A callback that is invoked when a failure occurred while dispatcher was
1410 _on_io_dispatcher_io_failure(SDKCtlIODispatcher* dispatcher,
1413 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1415 D("SDKCtl %s: Dispatcher I/O failure: %d -> %s",
1427 /* A callback that is invoked when dispatcher's reader has been cancelled. */
1429 _on_io_dispatcher_io_cancelled(SDKCtlIODispatcher* dispatcher,
1432 T("SDKCtl %s: Dispatcher I/O cancelled.", dispatcher->sdkctl->service_name);
1436 if (dispatcher->current_query != NULL) {
1437 SDKCtlQuery* const query = dispatcher->current_query;
1438 dispatcher->current_query = NULL;
1444 if (dispatcher->packet != NULL) {
1445 _sdkctl_packet_release(dispatcher->packet);
1446 dispatcher->packet = NULL;
1450 /* A generic packet header has been received by I/O dispatcher. */
1452 _on_io_dispatcher_packet_header(SDKCtlIODispatcher* dispatcher,
1455 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1458 dispatcher->sdkctl->service_name, dispatcher->packet_header.type,
1459 dispatcher->packet_header.size);
1462 if (dispatcher->packet_header.signature != _sdkctl_packet_sig) {
1464 sdkctl->service_name, dispatcher->packet_header.signature,
1465 dispatcher->packet_header.type, dispatcher->packet_header.size);
1469 _on_io_dispatcher_io_failure(dispatcher, asio);
1481 if (dispatcher->packet_header.type == SDKCTL_PACKET_QUERY_RESPONSE) {
1486 dispatcher->state = SDKCTL_IODISP_EXPECT_QUERY_REPLY_HEADER;
1487 async_socket_read_rel(sdkctl->as, &dispatcher->query_reply_header.query_id,
1489 _on_sdkctl_io_dispatcher_io, dispatcher, -1);
1494 dispatcher->state = SDKCTL_IODISP_EXPECT_DATA;
1495 dispatcher->packet =
1496 _sdkctl_packet_new(sdkctl, dispatcher->packet_header.size,
1497 dispatcher->packet_header.type);
1499 async_socket_read_rel(sdkctl->as, dispatcher->packet + 1,
1500 dispatcher->packet_header.size - sizeof(SDKCtlPacketHeader),
1501 _on_sdkctl_io_dispatcher_io, dispatcher, -1);
1507 /* A generic packet has been received by I/O dispatcher. */
1509 _on_io_dispatcher_packet(SDKCtlIODispatcher* dispatcher, AsyncSocketIO* asio)
1511 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1512 SDKCtlPacket* const packet = dispatcher->packet;
1513 dispatcher->packet = NULL;
1516 dispatcher->sdkctl->service_name, dispatcher->packet_header.type,
1517 dispatcher->packet_header.size);
1523 dispatcher->state = SDKCTL_IODISP_EXPECT_HEADER;
1524 async_socket_read_rel(sdkctl->as, &dispatcher->packet_header, sizeof(SDKCtlPacketHeader),
1525 _on_sdkctl_io_dispatcher_io, dispatcher, -1);
1529 /* A query reply header has been received by I/O dispatcher. */
1531 _on_io_dispatcher_query_reply_header(SDKCtlIODispatcher* dispatcher,
1534 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1538 dispatcher->sdkctl->service_name, dispatcher->query_reply_header.query_id);
1540 /* Pull the query out of the list of active queries. It's the dispatcher that
1542 dispatcher->current_query =
1543 _sdkctl_socket_remove_query_id(sdkctl, dispatcher->query_reply_header.query_id);
1544 query = dispatcher->current_query;
1546 dispatcher->packet_header.size - sizeof(SDKCtlQueryReplyHeader);
1547 dispatcher->state = SDKCTL_IODISP_EXPECT_QUERY_REPLY_DATA;
1550 D("%s: Query #%d is not found by dispatcher",
1551 dispatcher->sdkctl->service_name, dispatcher->query_reply_header.query_id);
1555 dispatcher->state = SDKCTL_IODISP_EXPECT_QUERY_REPLY_DATA;
1556 dispatcher->packet =
1557 _sdkctl_packet_new(sdkctl, dispatcher->packet_header.size,
1558 dispatcher->packet_header.type);
1560 memcpy(&dispatcher->packet->header, &dispatcher->query_reply_header,
1562 async_socket_read_rel(sdkctl->as, dispatcher->packet + 1, query_data_size,
1563 _on_sdkctl_io_dispatcher_io, dispatcher, -1);
1583 dispatcher, -1);
1589 /* A query reply header has been received by I/O dispatcher. */
1591 _on_io_dispatcher_query_reply(SDKCtlIODispatcher* dispatcher, AsyncSocketIO* asio)
1593 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1594 SDKCtlQuery* const query = dispatcher->current_query;
1595 dispatcher->current_query = NULL;
1598 _ANDROID_ASSERT(query->header.query_id == dispatcher->query_reply_header.query_id,
1599 "SDKCtl %s: Query ID mismatch in I/O dispatcher",
1602 dispatcher->sdkctl->service_name, query, query->header.query_id,
1605 /* Complete the query, and release it from the dispatcher. */
1611 if (dispatcher->packet != NULL) {
1612 _sdkctl_packet_release(dispatcher->packet);
1613 dispatcher->packet = NULL;
1618 dispatcher->state = SDKCTL_IODISP_EXPECT_HEADER;
1619 async_socket_read_rel(sdkctl->as, &dispatcher->packet_header, sizeof(SDKCtlPacketHeader),
1620 _on_sdkctl_io_dispatcher_io, dispatcher, -1);
1625 * This is main I/O dispatcher loop.
1637 SDKCtlIODispatcher* const dispatcher = (SDKCtlIODispatcher*)io_opaque;
1638 SDKCtlSocket* const sdkctl = dispatcher->sdkctl;
1649 * dispatcher without interruptions other than I/O failures. */
1655 _on_io_dispatcher_io_failure(dispatcher, asio);
1659 /* The way I/O dispatcher is implemented, this should never
1660 * happen, because dispatcher doesn't set I/O expiration time
1663 "SDKCtl %s: We should never receive ASIO_STATE_TIMED_OUT in SDKCtl I/O dispatcher.",
1669 * disconnection. Sooner or later, this dispatcher will be reset,
1672 _on_io_dispatcher_io_cancelled(dispatcher, asio);
1679 _ANDROID_ASSERT(0, "SDKCtl %s: Unexpected I/O status %d in the dispatcher",
1683 _on_io_dispatcher_io_failure(dispatcher, asio);
1693 /* Requested data has been read. Handle the chunk depending on dispatcher's
1695 switch (dispatcher->state) {
1698 action = _on_io_dispatcher_packet_header(dispatcher, asio);
1703 action = _on_io_dispatcher_query_reply_header(dispatcher, asio);
1708 action = _on_io_dispatcher_query_reply(dispatcher, asio);
1713 action = _on_io_dispatcher_packet(dispatcher, asio);
1718 sdkctl->service_name, dispatcher->state);
1735 SDKCtlIODispatcher* const dispatcher = &sdkctl->io_dispatcher;
1738 /* Cancel query that is being completed in dispatcher. */
1739 if (dispatcher->current_query != NULL) {
1740 SDKCtlQuery* const query = dispatcher->current_query;
1741 dispatcher->current_query = NULL;
1782 /* Reset I/O dispatcher. */
1824 * Here we will start I/O dispatcher, and will initiate a handshake with
1836 /* Initialize, and start main I/O dispatcher. */