コード例 #1
0
// Called from lua to stop listening to a particular event
static int addon_output_event_listen_stop(lua_State *L) {
	// Args should be :
	// 1) self
	// 2) event name

	// Find the event
	const char *evt_name = luaL_checkstring(L, 2);

	struct event_reg *evt = event_find(evt_name);
	if (!evt)
		luaL_error(L, "Event %s does not exists", evt_name);

	// Get the output
	struct addon_instance_priv *p = addon_output_get_priv(L, 1);
	
	if (event_listener_unregister(evt, p) != POM_OK)
		luaL_error(L, "Error while unregistering event listener");

	// Forget about listening to the event
	lua_pushlightuserdata(L, evt);
	lua_pushnil(L);
	lua_settable(L, 1);

	return 0;
}
コード例 #2
0
ファイル: analyzer_smtp.c プロジェクト: elfixit/pom-ng
static int analyzer_smtp_event_listeners_notify(void *obj, struct event_reg *evt_reg, int has_listeners) {

	struct analyzer *analyzer = obj;
	struct analyzer_smtp_priv *priv = analyzer->priv;

	if (evt_reg == priv->evt_msg) {
		if (has_listeners) {
			priv->pkt_listener = proto_packet_listener_register(proto_get("smtp"), PROTO_PACKET_LISTENER_PLOAD_ONLY, obj, analyzer_smtp_pkt_process, NULL);
			if (!priv->pkt_listener)
				return POM_ERR;
		} else {
			if (proto_packet_listener_unregister(priv->pkt_listener) != POM_OK)
				return POM_ERR;
			priv->pkt_listener = NULL;
		}
	}

	if (!priv->listening && (event_has_listener(priv->evt_msg) || event_has_listener(priv->evt_auth))) {
		

		if (event_listener_register(priv->evt_cmd, analyzer, analyzer_smtp_event_process_begin, analyzer_smtp_event_process_end) != POM_OK) {
			return POM_ERR;
		} else if (event_listener_register(priv->evt_reply, analyzer, analyzer_smtp_event_process_begin, analyzer_smtp_event_process_end) != POM_OK) {
			event_listener_unregister(priv->evt_cmd, analyzer);
			return POM_ERR;
		}

		priv->listening = 1;

	} else if (priv->listening && !event_has_listener(priv->evt_msg) && !event_has_listener(priv->evt_auth)) {

		event_listener_unregister(priv->evt_cmd, analyzer);
		event_listener_unregister(priv->evt_reply, analyzer);

		priv->listening = 0;

	}



	return POM_OK;
}
コード例 #3
0
int analyzer_ppp_pap_event_listeners_notify(void *obj, struct event_reg *evt_reg, int has_listeners) {

    struct analyzer *analyzer = obj;
    struct analyzer_ppp_pap_priv *priv = analyzer->priv;

    if (has_listeners) {
        if (event_listener_register(priv->evt_request, analyzer, analyzer_ppp_pap_event_process_begin, NULL, NULL) != POM_OK) {
            return POM_ERR;
        } else if (event_listener_register(priv->evt_ack_nack, analyzer, analyzer_ppp_pap_event_process_begin, NULL, NULL) != POM_OK) {
            event_listener_unregister(priv->evt_request, analyzer);
            return POM_ERR;
        }

    } else {
        if (event_listener_unregister(priv->evt_request, analyzer) != POM_OK || event_listener_unregister(priv->evt_ack_nack, analyzer) != POM_OK)
            return POM_ERR;
    }

    return POM_OK;

}
コード例 #4
0
ファイル: analyzer_eap.c プロジェクト: k0a1a/pom-ng
int analyzer_eap_event_listeners_notify(void *obj, struct event_reg *evt_reg, int has_listeners) {

	struct analyzer *analyzer = obj;
	struct analyzer_eap_priv *priv = analyzer->priv;

	if (event_has_listener(priv->evt_md5_auth)) {
		if (event_listener_register(priv->evt_md5_challenge, analyzer, analyzer_eap_event_process_begin, NULL) != POM_OK) {
			return POM_ERR;
		} else if (event_listener_register(priv->evt_success_failure, analyzer, analyzer_eap_event_process_begin, NULL) != POM_OK) {
			event_listener_unregister(priv->evt_md5_challenge, analyzer);
			return POM_ERR;
		}

	} else {
		if (event_listener_unregister(priv->evt_md5_challenge, analyzer) != POM_OK || event_listener_unregister(priv->evt_success_failure, analyzer) != POM_OK)
			return POM_ERR;
	}

	return POM_OK;

}
コード例 #5
0
ファイル: analyzer_smtp.c プロジェクト: elfixit/pom-ng
static int analyzer_smtp_cleanup(struct analyzer *analyzer) {

	struct analyzer_smtp_priv *priv = analyzer->priv;

	if (priv->pkt_listener) {
		proto_packet_listener_unregister(priv->pkt_listener);
	}

	if (priv->listening) {
		event_listener_unregister(priv->evt_cmd, analyzer);
		event_listener_unregister(priv->evt_reply, analyzer);
	}

	if (priv->evt_msg)
		event_unregister(priv->evt_msg);

	if (priv->evt_auth)
		event_unregister(priv->evt_auth);

	free(priv);

	return POM_OK;
}
コード例 #6
0
int output_log_xml_close(void *output_priv) {

    struct output_log_xml_priv *priv = output_priv;

    if (addon_log_xml_close(priv) != POM_OK)
        return POM_ERR;

    while (priv->evt_lst) {
        struct output_log_xml_evt *tmp = priv->evt_lst;
        priv->evt_lst = tmp->next;
        event_listener_unregister(tmp->evt, priv);
        free(tmp);
    }

    return POM_OK;
}
コード例 #7
0
ファイル: event.c プロジェクト: k0a1a/pom-ng
int event_payload_listen_stop() {

	if (!event_pload_listener_ref) {
		pomlog(POMLOG_ERR, "Payload listener not started yet !");
		return POM_ERR;
	}

	event_pload_listener_ref--;

	if (event_pload_listener_ref)
		return POM_OK;

	struct event_reg *tmp;
	for (tmp = event_reg_head; tmp; tmp = tmp->next) {
		if (!(tmp->info->flags & EVENT_REG_FLAG_PAYLOAD))
			continue;
		event_listener_unregister(tmp, &event_pload_listener_ref);
	}
	
	return POM_OK;
}