コード例 #1
0
ファイル: main.c プロジェクト: huiser/pacemaker
static gboolean
pe_msg_callback(IPC_Channel * client, gpointer user_data)
{
    xmlNode *msg = NULL;
    gboolean stay_connected = TRUE;

    while (IPC_ISRCONN(client)) {
        if (client->ops->is_message_pending(client) == 0) {
            break;
        }

        msg = xmlfromIPC(client, MAX_IPC_DELAY);
        if (msg != NULL) {
            xmlNode *data = get_message_xml(msg, F_CRM_DATA);

            process_pe_message(msg, data, client);
            free_xml(msg);
        }
    }

    if (client->ch_status != IPC_CONNECT) {
        stay_connected = FALSE;
    }

    return stay_connected;
}
コード例 #2
0
static int32_t
pe_ipc_dispatch(qb_ipcs_connection_t *c, void *data, size_t size)
{
    xmlNode *msg = crm_ipcs_recv(c, data, size);
    xmlNode *ack = create_xml_node(NULL, "ack");

    crm_ipcs_send(c, ack, FALSE);
    free_xml(ack);

    if (msg != NULL) {
        xmlNode *data = get_message_xml(msg, F_CRM_DATA);
        
        process_pe_message(msg, data, c);
        free_xml(msg);
    }
    return 0;
}
コード例 #3
0
ファイル: main.c プロジェクト: beekhof/pacemaker
static int32_t
pe_ipc_dispatch(qb_ipcs_connection_t * qbc, void *data, size_t size)
{
    uint32_t id = 0;
    uint32_t flags = 0;
    crm_client_t *c = crm_client_get(qbc);
    xmlNode *msg = crm_ipcs_recv(c, data, size, &id, &flags);

    crm_ipcs_send_ack(c, id, flags, "ack", __FUNCTION__, __LINE__);
    if (msg != NULL) {
        xmlNode *data_xml = get_message_xml(msg, F_CRM_DATA);

        process_pe_message(msg, data_xml, c);
        free_xml(msg);
    }
    return 0;
}