summaryrefslogtreecommitdiffstats
path: root/usr.sbin/ppp/deflate.c
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>1997-12-03 23:28:02 +0000
committerbrian <brian@FreeBSD.org>1997-12-03 23:28:02 +0000
commit0d728a957362d7c1f83d15ab6af61c7851c5ca36 (patch)
treecc9f8897259fb11a5c2086f2005379c4d4aca7f8 /usr.sbin/ppp/deflate.c
parent4060d586346e71874cc8ce0771450b84d88cea41 (diff)
downloadFreeBSD-src-0d728a957362d7c1f83d15ab6af61c7851c5ca36.zip
FreeBSD-src-0d728a957362d7c1f83d15ab6af61c7851c5ca36.tar.gz
Fix the CCP Type field value for DEFLATE.
(I *really* meant to do this *before* committing the deflate changes in the first place - oops). Pppd is horribly broken in this respect - refer to the ppp man page for details. Ppp *WON'T* negotiate deflate with pppd by default - you must ``enable'' and ``accept'' ``pppd-deflate'' in your config. While I'm in there, update the cftypes in ccp.c so that we recognise some more protocols (we don't actually do anything with them - just send a REJ).
Diffstat (limited to 'usr.sbin/ppp/deflate.c')
-rw-r--r--usr.sbin/ppp/deflate.c90
1 files changed, 77 insertions, 13 deletions
diff --git a/usr.sbin/ppp/deflate.c b/usr.sbin/ppp/deflate.c
index a759288..46fe138 100644
--- a/usr.sbin/ppp/deflate.c
+++ b/usr.sbin/ppp/deflate.c
@@ -1,5 +1,5 @@
/*
- * $Id$
+ * $Id: deflate.c,v 1.1 1997/12/03 10:23:45 brian Exp $
*/
#include <sys/param.h>
@@ -343,6 +343,8 @@ DeflateDictSetup(u_short proto, struct mbuf *mi)
break; /* Done */
LogPrintf(LogERROR, "DeflateDictSetup: inflate returned %d (%s)\n",
res, InputState.cx.msg ? InputState.cx.msg : "");
+ LogPrintf(LogERROR, "DeflateDictSetup: avail_in %d, avail_out %d\n",
+ InputState.cx.avail_in, InputState.cx.avail_out);
CcpSendResetReq(&CcpFsm);
mbfree(mi_head); /* lose our allocated ``head'' buf */
return;
@@ -383,39 +385,50 @@ DeflateDispOpts(struct lcp_opt *o)
}
static void
-DeflateGetOpts(struct lcp_opt *o)
+DeflateGetInputOpts(struct lcp_opt *o)
{
o->id = TY_DEFLATE;
o->len = 4;
+ o->data[0] = ((iWindowSize-8)<<4)+8;
o->data[1] = '\0';
}
static void
-DeflateGetInputOpts(struct lcp_opt *o)
+DeflateGetOutputOpts(struct lcp_opt *o)
{
- DeflateGetOpts(o);
+ o->id = TY_DEFLATE;
+ o->len = 4;
+ o->data[0] = ((oWindowSize-8)<<4)+8;
+ o->data[1] = '\0';
+}
+
+static void
+PppdDeflateGetInputOpts(struct lcp_opt *o)
+{
+ o->id = TY_PPPD_DEFLATE;
+ o->len = 4;
o->data[0] = ((iWindowSize-8)<<4)+8;
+ o->data[1] = '\0';
}
static void
-DeflateGetOutputOpts(struct lcp_opt *o)
+PppdDeflateGetOutputOpts(struct lcp_opt *o)
{
- DeflateGetOpts(o);
+ o->id = TY_PPPD_DEFLATE;
+ o->len = 4;
o->data[0] = ((oWindowSize-8)<<4)+8;
+ o->data[1] = '\0';
}
static int
DeflateSetOpts(struct lcp_opt *o, int *sz)
{
- if (o->id != TY_DEFLATE || o->len != 4 ||
- (o->data[0]&15) != 8 || o->data[1] != '\0') {
- DeflateGetOpts(o);
+ if (o->len != 4 || (o->data[0]&15) != 8 || o->data[1] != '\0') {
return MODE_REJ;
}
*sz = (o->data[0] >> 4) + 8;
if (*sz > 15) {
*sz = 15;
- DeflateGetOpts(o);
return MODE_NAK;
}
@@ -425,13 +438,41 @@ DeflateSetOpts(struct lcp_opt *o, int *sz)
static int
DeflateSetInputOpts(struct lcp_opt *o)
{
- return DeflateSetOpts(o, &iWindowSize);
+ int res;
+ res = DeflateSetOpts(o, &iWindowSize);
+ if (res != MODE_ACK)
+ DeflateGetInputOpts(o);
+ return res;
}
static int
DeflateSetOutputOpts(struct lcp_opt *o)
{
- return DeflateSetOpts(o, &oWindowSize);
+ int res;
+ res = DeflateSetOpts(o, &oWindowSize);
+ if (res != MODE_ACK)
+ DeflateGetOutputOpts(o);
+ return res;
+}
+
+static int
+PppdDeflateSetInputOpts(struct lcp_opt *o)
+{
+ int res;
+ res = DeflateSetOpts(o, &iWindowSize);
+ if (res != MODE_ACK)
+ PppdDeflateGetInputOpts(o);
+ return res;
+}
+
+static int
+PppdDeflateSetOutputOpts(struct lcp_opt *o)
+{
+ int res;
+ res = DeflateSetOpts(o, &oWindowSize);
+ if (res != MODE_ACK)
+ PppdDeflateGetOutputOpts(o);
+ return res;
}
static int
@@ -475,8 +516,31 @@ DeflateTermOutput(void)
deflateEnd(&OutputState.cx);
}
+const struct ccp_algorithm PppdDeflateAlgorithm = {
+ TY_PPPD_DEFLATE, /* pppd (wrongly) expects this ``type'' field */
+ ConfPppdDeflate,
+ DeflateDispOpts,
+ {
+ PppdDeflateGetInputOpts,
+ PppdDeflateSetInputOpts,
+ DeflateInitInput,
+ DeflateTermInput,
+ DeflateResetInput,
+ DeflateInput,
+ DeflateDictSetup
+ },
+ {
+ PppdDeflateGetOutputOpts,
+ PppdDeflateSetOutputOpts,
+ DeflateInitOutput,
+ DeflateTermOutput,
+ DeflateResetOutput,
+ DeflateOutput
+ },
+};
+
const struct ccp_algorithm DeflateAlgorithm = {
- TY_DEFLATE,
+ TY_DEFLATE, /* rfc 1979 */
ConfDeflate,
DeflateDispOpts,
{
OpenPOWER on IntegriCloud