in flood_profile.c [291:361]
static apr_status_t assign_profile_event_handler(profile_events_t *events,
const char *handler_name,
const char *impl_name)
{
profile_event_handler_t *p;
for (p = &profile_event_handlers[0]; p && (*p).handler_name; p++) {
/* these are case insensitive (both key and value) for the sake of simplicity */
if (strncasecmp(impl_name, (*p).impl_name, FLOOD_STRLEN_MAX) == 0) {
if (strncasecmp(handler_name, (*p).handler_name, FLOOD_STRLEN_MAX) == 0) {
/* we got a match, assign it */
/* stupid cascading if, no big deal since it only happens at startup */
if (strncasecmp(handler_name, "profile_init", FLOOD_STRLEN_MAX) == 0) {
events->profile_init = (*p).handler;
} else if (strncasecmp(handler_name, "report_init", FLOOD_STRLEN_MAX) == 0){
events->report_init = (*p).handler;
} else if (strncasecmp(handler_name, "socket_init", FLOOD_STRLEN_MAX) == 0){
events->socket_init = (*p).handler;
} else if (strncasecmp(handler_name, "get_next_url", FLOOD_STRLEN_MAX) == 0){
events->get_next_url = (*p).handler;
} else if (strncasecmp(handler_name, "begin_conn", FLOOD_STRLEN_MAX) == 0) {
events->begin_conn = (*p).handler;
} else if (strncasecmp(handler_name, "create_req", FLOOD_STRLEN_MAX) == 0) {
events->create_req = (*p).handler;
} else if (strncasecmp(handler_name, "send_req", FLOOD_STRLEN_MAX) == 0) {
events->send_req = (*p).handler;
} else if (strncasecmp(handler_name, "recv_resp", FLOOD_STRLEN_MAX) == 0) {
events->recv_resp = (*p).handler;
} else if (strncasecmp(handler_name, "postprocess", FLOOD_STRLEN_MAX) == 0) {
events->postprocess = (*p).handler;
} else if (strncasecmp(handler_name, "verify_resp", FLOOD_STRLEN_MAX) == 0) {
events->verify_resp = (*p).handler;
} else if (strncasecmp(handler_name, "process_stats", FLOOD_STRLEN_MAX) == 0) {
events->process_stats = (*p).handler;
} else if (strncasecmp(handler_name, "loop_condition", FLOOD_STRLEN_MAX) == 0) {
events->loop_condition = (*p).handler;
} else if (strncasecmp(handler_name, "end_conn", FLOOD_STRLEN_MAX) == 0) {
events->end_conn = (*p).handler;
} else if (strncasecmp(handler_name, "request_destroy", FLOOD_STRLEN_MAX) == 0) {
events->request_destroy = (*p).handler;
} else if (strncasecmp(handler_name, "response_destroy", FLOOD_STRLEN_MAX) == 0) {
events->response_destroy = (*p).handler;
} else if (strncasecmp(handler_name, "socket_destroy", FLOOD_STRLEN_MAX) == 0) {
events->socket_destroy = (*p).handler;
} else if (strncasecmp(handler_name, "report_stats", FLOOD_STRLEN_MAX) == 0) {
events->report_stats = (*p).handler;
} else if (strncasecmp(handler_name, "destroy_report", FLOOD_STRLEN_MAX) == 0) {
events->destroy_report = (*p).handler;
} else if (strncasecmp(handler_name, "profile_destroy", FLOOD_STRLEN_MAX) == 0) {
events->profile_destroy = (*p).handler;
} else {
/* some internal error, our static structs don't match up */
return APR_EGENERAL;
}
return APR_SUCCESS;
} else {
/* invalid implementation for this handler */
apr_file_printf(local_stderr, "Invalid handler (%s) "
"specified.\n",
handler_name ? handler_name : "NULL");
return APR_ENOTIMPL; /* XXX: There's probably a better return val than this? */
}
}
}
apr_file_printf(local_stderr, "Invalid implementation (%s) for "
"this handler (%s)\n",
impl_name ? impl_name : "NULL",
handler_name ? handler_name : "NULL");
return APR_ENOTIMPL; /* no implementation found */
}