PPP, CORE, cleaned ppp_close() function

Calling new_phase() instead of assigning pcb->phase directly.
Removed redundant call to link status callback.
This commit is contained in:
Sylvain Rochet 2015-02-24 22:13:04 +01:00
parent 00bb70a62d
commit 4bcddd72e6
2 changed files with 14 additions and 9 deletions

View File

@ -469,12 +469,13 @@ err_t ppp_open(ppp_pcb *pcb, u16_t holdoff);
/* /*
* Initiate the end of a PPP connection. * Initiate the end of a PPP connection.
* Any outstanding packets in the queues are dropped. * Any outstanding packets in the queues are dropped.
* Return 0 on success, an error code on failure.
* *
* Setting nocarrier to 1 close the PPP connection without initiating the * Setting nocarrier to 1 close the PPP connection without initiating the
* shutdown procedure. Always using nocarrier = 0 is still recommended, * shutdown procedure. Always using nocarrier = 0 is still recommended,
* this is going to take a little longer time if your link is down, but * this is going to take a little longer time if your link is down, but
* is a safer choice for the PPP state machine. * is a safer choice for the PPP state machine.
*
* Return 0 on success, an error code on failure.
*/ */
err_t ppp_close(ppp_pcb *pcb, u8_t nocarrier); err_t ppp_close(ppp_pcb *pcb, u8_t nocarrier);

View File

@ -278,6 +278,12 @@ err_t ppp_open(ppp_pcb *pcb, u16_t holdoff) {
/* /*
* Initiate the end of a PPP connection. * Initiate the end of a PPP connection.
* Any outstanding packets in the queues are dropped. * Any outstanding packets in the queues are dropped.
*
* Setting nocarrier to 1 close the PPP connection without initiating the
* shutdown procedure. Always using nocarrier = 0 is still recommended,
* this is going to take a little longer time if your link is down, but
* is a safer choice for the PPP state machine.
*
* Return 0 on success, an error code on failure. * Return 0 on success, an error code on failure.
*/ */
err_t err_t
@ -285,16 +291,14 @@ ppp_close(ppp_pcb *pcb, u8_t nocarrier)
{ {
pcb->err_code = PPPERR_USER; pcb->err_code = PPPERR_USER;
/* dead phase, nothing to do, call the status callback to be consistent */ /* holdoff phase, cancel the reconnection */
if (pcb->phase == PPP_PHASE_DEAD) {
pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
return ERR_OK;
}
/* holdoff phase, cancel the reconnection and call the status callback */
if (pcb->phase == PPP_PHASE_HOLDOFF) { if (pcb->phase == PPP_PHASE_HOLDOFF) {
sys_untimeout(ppp_do_open, pcb); sys_untimeout(ppp_do_open, pcb);
pcb->phase = PPP_PHASE_DEAD; new_phase(pcb, PPP_PHASE_DEAD);
}
/* dead phase, nothing to do, call the status callback to be consistent */
if (pcb->phase == PPP_PHASE_DEAD) {
pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb); pcb->link_status_cb(pcb, pcb->err_code, pcb->ctx_cb);
return ERR_OK; return ERR_OK;
} }