]> git.ozlabs.org Git - ppp.git/blobdiff - pppd/cbcp.c
MD4Update takes bytes not bits! Now the regression test of the README.MSCHAP80
[ppp.git] / pppd / cbcp.c
index 9405f7bfa266a179ceb0860f8a6639c6ce373561..9d56850606edb614138bb8089586779d17e67314 100644 (file)
@@ -19,7 +19,7 @@
  */
 
 #ifndef lint
-static char rcsid[] = "$Id: cbcp.c,v 1.1 1996/10/08 04:35:41 paulus Exp $";
+static char rcsid[] = "$Id: cbcp.c,v 1.3 1998/11/07 06:59:25 paulus Exp $";
 #endif
 
 #include <stdio.h>
@@ -34,6 +34,17 @@ static char rcsid[] = "$Id: cbcp.c,v 1.1 1996/10/08 04:35:41 paulus Exp $";
 #include "lcp.h"
 #include "ipcp.h"
 
+/*
+ * Options.
+ */
+static int setcbcp __P((char **));
+
+static option_t cbcp_option_list[] = {
+    { "callback", o_special, setcbcp,
+      "Ask for callback" },
+    { NULL }
+};
+
 /*
  * Protocol entry points.
  */
@@ -59,6 +70,8 @@ struct protent cbcp_protent = {
     NULL,
     0,
     "CBCP",
+    cbcp_option_list,
+    NULL,
     NULL,
     NULL,
     NULL
@@ -68,11 +81,26 @@ cbcp_state cbcp[NUM_PPP];
 
 /* internal prototypes */
 
-void cbcp_recvreq(cbcp_state *us, char *pckt, int len);
-void cbcp_resp(cbcp_state *us);
-void cbcp_up(cbcp_state *us);
-void cbcp_recvack(cbcp_state *us, char *pckt, int len);
-void cbcp_send(cbcp_state *us, u_char code, u_char *buf, int len);
+static void cbcp_recvreq __P((cbcp_state *us, char *pckt, int len));
+static void cbcp_resp __P((cbcp_state *us));
+static void cbcp_up __P((cbcp_state *us));
+static void cbcp_recvack __P((cbcp_state *us, char *pckt, int len));
+static void cbcp_send __P((cbcp_state *us, u_char code, u_char *buf, int len));
+
+/* option processing */
+static int
+setcbcp(argv)
+    char **argv;
+{
+    lcp_wantoptions[0].neg_cbcp = 1;
+    cbcp_protent.enabled_flag = 1;
+    cbcp[0].us_number = strdup(*argv);
+    if (cbcp[0].us_number == 0)
+       novm("callback number");
+    cbcp[0].us_type |= (1 << CB_CONF_USER);
+    cbcp[0].us_type |= (1 << CB_CONF_ADMIN);
+    return (1);
+}
 
 /* init state */
 static void
@@ -189,9 +217,7 @@ cbcp_printpkt(p, plen, printer, arg)
     void *arg;
 {
     int code, opt, id, len, olen, delay;
-    u_char *pstart, *optend;
-    u_short cishort;
-    u_long cilong;
+    u_char *pstart;
 
     if (plen < HEADERLEN)
        return 0;
@@ -360,7 +386,7 @@ cbcp_resp(us)
        PUTCHAR(len , bufp);
        PUTCHAR(0, bufp);
        cbcp_send(us, CBCP_RESP, buf, len);
-       ipcp_open(us->us_unit);
+       (*ipcp_protent.open)(us->us_unit);
        return;
     }
 }
@@ -428,5 +454,5 @@ cbcp_up(us)
     cbcp_state *us;
 {
     persist = 0;
-    lcp_close(0);
+    lcp_close(0, "Call me back, please");
 }