diff --git a/exec/evt.c b/exec/evt.c index 7c1a8ae6..df454630 100644 --- a/exec/evt.c +++ b/exec/evt.c @@ -66,16 +66,52 @@ static int evt_init(struct conn_info *conn_info, void *msg); static int evt_exit(struct conn_info *conn_info); static int evt_exec_init(void); -static int (*evt_libais_handler_fns[]) (struct conn_info *ci, void *m) = { - message_handler_req_lib_activatepoll, - lib_evt_open_channel, - lib_evt_close_channel, - lib_evt_channel_subscribe, - lib_evt_channel_unsubscribe, - lib_evt_event_publish, - lib_evt_event_clear_retentiontime +static struct libais_handler evt_libais_handlers[] = { + { + .libais_handler_fn = message_handler_req_lib_activatepoll, + .response_size = sizeof(struct res_lib_activatepoll), + .response_id = MESSAGE_RES_LIB_ACTIVATEPOLL, + .gmi_prio = GMI_PRIO_RECOVERY + }, + { + .libais_handler_fn = lib_evt_open_channel, + .response_size = sizeof(struct res_evt_channel_open), + .response_id = MESSAGE_RES_EVT_OPEN_CHANNEL, + .gmi_prio = GMI_PRIO_MED + }, + { + .libais_handler_fn = lib_evt_close_channel, + .response_size = sizeof(struct res_evt_channel_close), + .response_id = MESSAGE_RES_EVT_CLOSE_CHANNEL, + .gmi_prio = GMI_PRIO_RECOVERY + }, + { + .libais_handler_fn = lib_evt_channel_subscribe, + .response_size = sizeof(struct res_evt_channel_subscribe), + .response_id = MESSAGE_RES_EVT_SUBSCRIBE, + .gmi_prio = GMI_PRIO_RECOVERY + }, + { + .libais_handler_fn = lib_evt_channel_unsubscribe, + .response_size = sizeof(struct res_evt_channel_unsubscribe), + .response_id = MESSAGE_RES_EVT_UNSUBSCRIBE, + .gmi_prio = GMI_PRIO_RECOVERY + }, + { + .libais_handler_fn = lib_evt_event_publish, + .response_size = sizeof(struct res_evt_event_publish), + .response_id = MESSAGE_RES_EVT_PUBLISH, + .gmi_prio = GMI_PRIO_LOW + }, + { + .libais_handler_fn = lib_evt_event_clear_retentiontime, + .response_size = sizeof(struct res_evt_event_clear_retentiontime), + .response_id = MESSAGE_REQ_EVT_CLEAR_RETENTIONTIME, + .gmi_prio = GMI_PRIO_RECOVERY + }, }; + static int evt_remote_evt(void *msg, struct in_addr source_addr); static int evt_remote_chan_op(void *msg, struct in_addr source_addr); @@ -85,9 +121,9 @@ static int (*evt_exec_handler_fns[]) (void *m, struct in_addr s) = { }; struct service_handler evt_service_handler = { - .libais_handler_fns = evt_libais_handler_fns, - .libais_handler_fns_count = sizeof(evt_libais_handler_fns) / - sizeof(int (*)), + .libais_handlers = evt_libais_handlers, + .libais_handlers_count = sizeof(evt_libais_handlers) / + sizeof(struct libais_handler), .aisexec_handler_fns = evt_exec_handler_fns, .aisexec_handler_fns_count = sizeof(evt_exec_handler_fns) / sizeof(int (*)), @@ -146,7 +182,7 @@ static int message_handler_req_lib_activatepoll(struct conn_info *conn_info, { struct res_lib_activatepoll res; - res.header.magic = MESSAGE_MAGIC; + res.header.error = SA_OK; res.header.size = sizeof (struct res_lib_activatepoll); res.header.id = MESSAGE_RES_LIB_ACTIVATEPOLL; libais_send_response(conn_info, &res, sizeof(res)); @@ -159,17 +195,16 @@ static int evt_init(struct conn_info *conn_info, void *msg) struct res_lib_init res; - res.header.magic = MESSAGE_MAGIC; res.header.size = sizeof (struct res_lib_init); res.header.id = MESSAGE_RES_INIT; - res.error = SA_OK; + res.header.error = SA_OK; log_printf(LOG_LEVEL_DEBUG, "Got request to initalize cluster event service.\n"); if (!conn_info->authenticated) { log_printf(LOG_LEVEL_DEBUG, "event service: Not authenticated\n"); - res.error = SA_ERR_SECURITY; + res.header.error = SA_ERR_SECURITY; libais_send_response(conn_info, &res, sizeof(res)); return -1; } @@ -191,8 +226,7 @@ static int lib_evt_open_channel(struct conn_info *conn_info, void *message) log_printf(LOG_LEVEL_DEBUG, "Open channel request\n"); log_printf(LOG_LEVEL_DEBUG, - "magic %x, size %d, id %d, handle 0x%x, to 0x%llx\n", - req->ico_head.magic, + "size %d, id %d, handle 0x%x, to 0x%llx\n", req->ico_head.size, req->ico_head.id, req->ico_c_handle, @@ -206,18 +240,10 @@ static int lib_evt_open_channel(struct conn_info *conn_info, void *message) * TODO: Add open code here */ - res.ico_head.magic = MESSAGE_MAGIC; res.ico_head.size = sizeof(res); res.ico_head.id = MESSAGE_RES_EVT_OPEN_CHANNEL; - res.ico_error = SA_OK; + res.ico_head.error = SA_OK; res.ico_channel_handle = req->ico_c_handle; /* TODO: fix this */ - log_printf(LOG_LEVEL_DEBUG, - "magic %x, size %d, id %d, error 0x%x, handle 0x%x\n", - res.ico_head.magic, - res.ico_head.size, - res.ico_head.id, - res.ico_error, - res.ico_channel_handle); libais_send_response (conn_info, &res, sizeof(res)); return 0; @@ -231,8 +257,7 @@ static int lib_evt_close_channel(struct conn_info *conn_info, void *message) req = message; log_printf(LOG_LEVEL_DEBUG, "Close channel request\n"); - log_printf(LOG_LEVEL_DEBUG, "magic %x, size %d, id %d, handle 0x%x\n", - req->icc_head.magic, + log_printf(LOG_LEVEL_DEBUG, "size %d, id %d, handle 0x%x\n", req->icc_head.size, req->icc_head.id, req->icc_channel_handle); @@ -241,10 +266,9 @@ static int lib_evt_close_channel(struct conn_info *conn_info, void *message) * TODO: Add close code here */ - res.icc_head.magic = MESSAGE_MAGIC; res.icc_head.size = sizeof(res); res.icc_head.id = MESSAGE_RES_EVT_CLOSE_CHANNEL; - res.icc_error = SA_OK; + res.icc_head.error = SA_OK; libais_send_response (conn_info, &res, sizeof(res)); return 0; @@ -261,8 +285,7 @@ static int lib_evt_channel_subscribe(struct conn_info *conn_info, void *message) req = message; log_printf(LOG_LEVEL_DEBUG, "Subscribe channel request\n"); - log_printf(LOG_LEVEL_DEBUG, "magic %x, size %d, id %d\n", - req->ics_head.magic, + log_printf(LOG_LEVEL_DEBUG, "size %d, id %d\n", req->ics_head.size, req->ics_head.id); log_printf(LOG_LEVEL_DEBUG, "subscription Id: 0x%x\n", req->ics_sub_id); @@ -289,10 +312,9 @@ static int lib_evt_channel_subscribe(struct conn_info *conn_info, void *message) free(filters->filters); free(filters); - res.ics_head.magic = MESSAGE_MAGIC; res.ics_head.size = sizeof(res); res.ics_head.id = MESSAGE_RES_EVT_SUBSCRIBE; - res.ics_error = error; + res.ics_head.error = error; libais_send_response (conn_info, &res, sizeof(res)); return 0; @@ -307,8 +329,7 @@ static int lib_evt_channel_unsubscribe(struct conn_info *conn_info, req = message; log_printf(LOG_LEVEL_DEBUG, "Unsubscribe channel request\n"); - log_printf(LOG_LEVEL_DEBUG, "magic %x, size %d, id %d\n", - req->icu_head.magic, + log_printf(LOG_LEVEL_DEBUG, "size %d, id %d\n", req->icu_head.size, req->icu_head.id); log_printf(LOG_LEVEL_DEBUG, "subscription Id: 0x%x\n", req->icu_sub_id); @@ -318,10 +339,9 @@ static int lib_evt_channel_unsubscribe(struct conn_info *conn_info, */ - res.icu_head.magic = MESSAGE_MAGIC; res.icu_head.size = sizeof(res); res.icu_head.id = MESSAGE_RES_EVT_UNSUBSCRIBE; - res.icu_error = error; + res.icu_head.error = error; libais_send_response (conn_info, &res, sizeof(res)); return 0; @@ -337,8 +357,7 @@ static int lib_evt_event_publish(struct conn_info *conn_info, void *message) req = message; log_printf(LOG_LEVEL_DEBUG, "Publish event request\n"); - log_printf(LOG_LEVEL_DEBUG, "magic %x, size %d, id %d\n", - req->led_head.magic, + log_printf(LOG_LEVEL_DEBUG, "size %d, id %d\n", req->led_head.size, req->led_head.id); @@ -346,10 +365,9 @@ static int lib_evt_event_publish(struct conn_info *conn_info, void *message) * TODO: Add publish code here */ - res.iep_head.magic = MESSAGE_MAGIC; res.iep_head.size = sizeof(res); res.iep_head.id = MESSAGE_RES_EVT_PUBLISH; - res.iep_error = error; + res.iep_head.error = error; res.iep_event_id = event_id; libais_send_response (conn_info, &res, sizeof(res)); @@ -365,8 +383,7 @@ static int lib_evt_event_clear_retentiontime(struct conn_info *conn_info, void * log_printf(LOG_LEVEL_DEBUG, "Clear event retentiontime request\n"); log_printf(LOG_LEVEL_DEBUG, - "magic %x, size %d, id %d, event ID 0x%llx, chan handle 0x%x\n", - req->iec_head.magic, + "size %d, id %d, event ID 0x%llx, chan handle 0x%x\n", req->iec_head.size, req->iec_head.id, req->iec_event_id, @@ -376,10 +393,9 @@ static int lib_evt_event_clear_retentiontime(struct conn_info *conn_info, void * * TODO: Add clear retention time code here */ - res.iec_head.magic = MESSAGE_MAGIC; res.iec_head.size = sizeof(res); res.iec_head.id = MESSAGE_REQ_EVT_CLEAR_RETENTIONTIME; - res.iec_error = error; + res.iec_head.error = error; libais_send_response (conn_info, &res, sizeof(res)); return 0;