From 26064c2ef465821de6e2866bdcedd2774e6993e5 Mon Sep 17 00:00:00 2001 From: Guillaume Nault Date: Fri, 15 Mar 2013 21:47:39 +0100 Subject: l2tp: Dedicated function for replying to incomming calls Define l2tp_session_incall_reply() which can be used as parameter for l2tp_tunnel_start_session(). This removes the need for updating session's state in l2tp_send_ICRP() and normalises the way incomming and outgoing sessions are handled. Signed-off-by: Guillaume Nault --- accel-pppd/ctrl/l2tp/l2tp.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/accel-pppd/ctrl/l2tp/l2tp.c b/accel-pppd/ctrl/l2tp/l2tp.c index 1eeb7532..586a252d 100644 --- a/accel-pppd/ctrl/l2tp/l2tp.c +++ b/accel-pppd/ctrl/l2tp/l2tp.c @@ -1693,8 +1693,6 @@ static int l2tp_send_ICRP(struct l2tp_sess_t *sess) else triton_timer_mod(&sess->timeout_timer, 0); - sess->state1 = STATE_WAIT_ICCN; - return 0; out_err: @@ -2311,6 +2309,23 @@ static int l2tp_recv_HELLO(struct l2tp_conn_t *conn, return 0; } +static void l2tp_session_incall_reply(void *data) +{ + struct l2tp_sess_t *sess = data; + + if (l2tp_send_ICRP(sess) < 0) { + log_session(log_error, sess, + "impossible to reply to incoming call:" + " sending ICRP failed, disconnecting session\n"); + if (l2tp_session_disconnect(sess, 2, 6) < 0) + log_session(log_error, sess, + "session disconnection failed\n"); + return; + } + + sess->state1 = STATE_WAIT_ICCN; +} + static int l2tp_recv_ICRQ(struct l2tp_conn_t *conn, const struct l2tp_packet_t *pack) { @@ -2387,7 +2402,8 @@ static int l2tp_recv_ICRQ(struct l2tp_conn_t *conn, goto out_reject; } - if (l2tp_tunnel_start_session(sess, l2tp_send_ICRP, sess) < 0) { + if (l2tp_tunnel_start_session(sess, l2tp_session_incall_reply, + sess) < 0) { log_tunnel(log_error, conn, "impossible to handle ICRQ:" " starting session failed," " disconnecting session\n"); -- cgit v1.2.3