summaryrefslogtreecommitdiff
path: root/accel-pppd
diff options
context:
space:
mode:
Diffstat (limited to 'accel-pppd')
-rw-r--r--accel-pppd/extra/pppd_compat.c2
-rw-r--r--accel-pppd/include/events.h1
-rw-r--r--accel-pppd/ppp/ppp.c8
-rw-r--r--accel-pppd/session.c9
4 files changed, 13 insertions, 7 deletions
diff --git a/accel-pppd/extra/pppd_compat.c b/accel-pppd/extra/pppd_compat.c
index 58376985..5558d837 100644
--- a/accel-pppd/extra/pppd_compat.c
+++ b/accel-pppd/extra/pppd_compat.c
@@ -544,7 +544,7 @@ static void init(void)
triton_event_register_handler(EV_SES_STARTING, (triton_event_func)ev_ses_starting);
triton_event_register_handler(EV_SES_PRE_UP, (triton_event_func)ev_ses_pre_up);
triton_event_register_handler(EV_SES_STARTED, (triton_event_func)ev_ses_started);
- triton_event_register_handler(EV_SES_FINISHING, (triton_event_func)ev_ses_finished);
+ triton_event_register_handler(EV_SES_PRE_FINISHED, (triton_event_func)ev_ses_finished);
#ifdef RADIUS
if (triton_module_loaded("radius")) {
triton_event_register_handler(EV_RADIUS_ACCESS_ACCEPT, (triton_event_func)ev_radius_access_accept);
diff --git a/accel-pppd/include/events.h b/accel-pppd/include/events.h
index 42503a25..37dfa82c 100644
--- a/accel-pppd/include/events.h
+++ b/accel-pppd/include/events.h
@@ -16,6 +16,7 @@
#define EV_SES_ACCT_START 10
#define EV_CONFIG_RELOAD 11
#define EV_SES_AUTH_FAILED 12
+#define EV_SES_PRE_FINISHED 13
#define EV_IP_CHANGED 100
#define EV_SHAPER 101
#define EV_MPPE_KEYS 102
diff --git a/accel-pppd/ppp/ppp.c b/accel-pppd/ppp/ppp.c
index 5f3bbcd9..fee9334d 100644
--- a/accel-pppd/ppp/ppp.c
+++ b/accel-pppd/ppp/ppp.c
@@ -185,7 +185,9 @@ exit_close_chan:
static void destablish_ppp(struct ppp_t *ppp)
{
struct pppunit_cache *uc;
-
+
+ triton_event_fire(EV_SES_PRE_FINISHED, ppp);
+
triton_md_unregister_handler(&ppp->chan_hnd);
triton_md_unregister_handler(&ppp->unit_hnd);
@@ -440,7 +442,7 @@ void __export ppp_terminate(struct ap_session *ses, int hard)
int s = 0;
if (hard) {
- triton_context_call(ses->ctrl->ctx, (triton_event_func)destablish_ppp, ppp);
+ destablish_ppp(ppp);
return;
}
@@ -455,7 +457,7 @@ void __export ppp_terminate(struct ap_session *ses, int hard)
if (s)
return;
- triton_context_call(ses->ctrl->ctx, (triton_event_func)destablish_ppp, ppp);
+ destablish_ppp(ppp);
}
void __export ppp_register_chan_handler(struct ppp_t *ppp,struct ppp_handler_t *h)
diff --git a/accel-pppd/session.c b/accel-pppd/session.c
index 1fd0075c..51264f88 100644
--- a/accel-pppd/session.c
+++ b/accel-pppd/session.c
@@ -125,6 +125,10 @@ void __export ap_session_finished(struct ap_session *ses)
{
ses->terminated = 1;
+ ap_session_read_stats(ses, NULL);
+
+ triton_event_fire(EV_SES_PRE_FINISHED, ses);
+
pthread_rwlock_wrlock(&ses_lock);
list_del(&ses->entry);
pthread_rwlock_unlock(&ses_lock);
@@ -202,11 +206,10 @@ void __export ap_session_terminate(struct ap_session *ses, int cause, int hard)
log_ppp_debug("terminate\n");
ap_session_ifdown(ses);
- ap_session_read_stats(ses, NULL);
+ triton_event_fire(EV_SES_FINISHING, ses);
+
ses->ctrl->terminate(ses, hard);
-
- triton_event_fire(EV_SES_FINISHING, ses);
}
void ap_shutdown_soft(void (*cb)(void))