1706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh/*- 2706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Copyright (c) 1998 Brian Somers <brian@Awfulhak.org> 3706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * All rights reserved. 4706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 5706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * Redistribution and use in source and binary forms, with or without 6706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * modification, are permitted provided that the following conditions 7706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * are met: 8706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 1. Redistributions of source code must retain the above copyright 9706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer. 10706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 2. Redistributions in binary form must reproduce the above copyright 11706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * notice, this list of conditions and the following disclaimer in the 12706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * documentation and/or other materials provided with the distribution. 13706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 14706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * SUCH DAMAGE. 25706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * 26706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh * $FreeBSD: src/usr.sbin/ppp/prompt.h,v 1.10.40.1 2010/12/21 17:10:29 kensmith Exp $ 27706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh */ 28706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 29706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define LOCAL_AUTH 0x01 30706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define LOCAL_NO_AUTH 0x02 31706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define LOCAL_DENY 0x03 32706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define LOCAL_CX 0x04 /* OR'd value - require a context */ 33706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define LOCAL_CX_OPT 0x08 /* OR'd value - optional context */ 34706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 35706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct server; 36706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct datalink; 37706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct bundle; 38706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct cmdargs; 39706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 40706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehstruct prompt { 41706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct fdescriptor desc; 42706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh int fd_in, fd_out; 43706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct datalink *TermMode; /* The modem we're talking directly to */ 44706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh FILE *Term; /* sits on top of fd_out */ 45706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_char auth; /* Local Authorized status */ 46706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct server *owner; /* who created me */ 47706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct bundle *bundle; /* who I'm controlling */ 48706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned nonewline : 1; /* need a newline before our prompt ? */ 49706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned needprompt : 1; /* Show a prompt at the next UpdateSet() */ 50706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned active : 1; /* Is the prompt active (^Z) */ 51706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh unsigned readtilde : 1; /* We've read a ``~'' from fd_in */ 52706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 53706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct { 54706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh const char *type; /* Type of connection */ 55706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh char from[40]; /* Source of connection */ 56706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh } src; 57706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 58706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct prompt *next; /* Maintained in log.c */ 59706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh u_long logmask; /* Maintained in log.c */ 60706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 61706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct termios oldtio; /* Original tty mode */ 62706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh struct termios comtio; /* Command level tty mode */ 63706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh}; 64706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 65706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define descriptor2prompt(d) \ 66706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh ((d)->type == PROMPT_DESCRIPTOR ? (struct prompt *)(d) : NULL) 67706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh 68706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define PROMPT_STD (-1) 69706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern struct prompt *prompt_Create(struct server *, struct bundle *, int); 70706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Destroy(struct prompt *, int); 71706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Required(struct prompt *); 72706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#ifdef __GNUC__ 73706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Printf(struct prompt *, const char *, ...) 74706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh __attribute__ ((format (printf, 2, 3))); 75706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#else 76706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Printf(struct prompt *, const char *, ...); 77706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#endif 78706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#ifdef __GNUC__ 79706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_vPrintf(struct prompt *, const char *, va_list) 80706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh __attribute__ ((format (printf, 2, 0))); 81706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#else 82706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_vPrintf(struct prompt *, const char *, va_list); 83706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#endif 84706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define PROMPT_DONT_WANT_INT 1 85706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define PROMPT_WANT_INT 0 86706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_TtyInit(struct prompt *); 87706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_TtyCommandMode(struct prompt *); 88706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_TtyTermMode(struct prompt *, struct datalink *); 89706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_TtyOldMode(struct prompt *); 90706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern pid_t prompt_pgrp(struct prompt *); 91706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern int PasswdCommand(struct cmdargs const *); 92706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Suspend(struct prompt *); 93706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yehextern void prompt_Continue(struct prompt *); 94706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define prompt_IsTermMode(p, dl) ((p)->TermMode == (dl) ? 1 : 0) 95706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define prompt_IsController(p) (!(p) || (p)->owner ? 0 : 1) 96706e567fc5ff6b79738a5f470e5aa7b2cae76459Chia-chi Yeh#define prompt_Required(p) ((p)->needprompt = 1) 97