18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * minconn.c - pppd plugin to implement a `minconnect' option. 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (c) 1999 Paul Mackerras. All rights reserved. 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Redistribution and use in source and binary forms, with or without 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * modification, are permitted provided that the following conditions 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * are met: 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * notice, this list of conditions and the following disclaimer. 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * notice, this list of conditions and the following disclaimer in 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * the documentation and/or other materials provided with the 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * distribution. 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 3. The name(s) of the authors of this software must not be used to 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * endorse or promote products derived from this software without 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * prior written permission. 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 4. Redistributions of any form whatsoever must retain the following 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * acknowledgment: 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * "This product includes software developed by Paul Mackerras 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * <paulus@samba.org>". 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THE AUTHORS OF THIS SOFTWARE DISCLAIM ALL WARRANTIES WITH REGARD TO 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AND FITNESS, IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <stddef.h> 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <time.h> 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include "pppd.h" 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectchar pppd_version[] = VERSION; 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic int minconnect = 0; 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic option_t my_options[] = { 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { "minconnect", o_int, &minconnect, 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project "Set minimum connect time before idle timeout applies" }, 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { NULL } 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}; 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic int my_get_idle(struct ppp_idle *idle) 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project time_t t; 528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (idle == NULL) 548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return minconnect? minconnect: idle_time_limit; 558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project t = idle->xmit_idle; 568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (idle->recv_idle < t) 578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project t = idle->recv_idle; 588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return idle_time_limit - t; 598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectvoid plugin_init(void) 628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project info("plugin_init"); 648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project add_options(my_options); 658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project idle_time_hook = my_get_idle; 668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 67