亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? compress.c

?? PPPoE協(xié)議在Psos中的實(shí)現(xiàn)源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
/* @(#) pSOSystem/PowerPC V2.1.2: drivers/slip/compress.c 1.4 95/07/25 13:53:25 */
/************************************************************************/
/*                                                                      */
/*   MODULE: slcompress.c                                               */
/*   PRODUCT: pNA+                                                      */
/*   PURPOSE: Van Jacobson header compression                           */
/*   DATE: 93/12/01                                                     */
/*                                                                      */
/*----------------------------------------------------------------------*/
/*                                                                      */
/*              Copyright 1993, Integrated Systems Inc.                 */
/*                      ALL RIGHTS RESERVED                             */
/*                                                                      */
/*   This computer program is the property of Integrated Systems Inc.   */
/*   Santa Clara, California, U.S.A. and may not be copied              */
/*   in any form or by any means, whether in part or in whole,          */
/*   except under license expressly granted by Integrated Systems Inc.  */
/*                                                                      */
/*   All copies of this program, whether in part or in whole, and       */
/*   whether modified or not, must display this and all other           */
/*   embedded copyright and ownership notices in full.                  */
/*                                                                      */
/*----------------------------------------------------------------------*/
/*                                                                      */
/* Global Procedures:                                                   */
/*                                                                      */
/*                                                                      */
/************************************************************************/
/*
 * Routines to compress and uncompess tcp packets (for transmission
 * over low speed serial lines.
 *
 * Copyright (c) 1989, 1991 Regents of the University of California.
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms are permitted
 * provided that the above copyright notice and this paragraph are
 * duplicated in all such forms and that any documentation,
 * advertising materials, and other materials related to such
 * distribution and use acknowledge that the software was developed
 * by the University of California, Berkeley.  The name of the
 * University may not be used to endorse or promote products derived
 * from this software without specific prior written permission.
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 *
 *  Van Jacobson (van@ee.lbl.gov), Dec 31, 1989:
 *  - Initial distribution.
 */
#ifndef lint
static char rcsid[] =
    "@(#) $Header: compress.c,v 1.1 97/07/23 10:26:40 kapil Exp $ (LBL)";
#endif

#include <string.h>

#include "bsp.h"
#include "pna.h"
#include "ppp.h"

#include "compress.h"

#ifndef SL_NO_STATS
#define INCR(counter) (++comp->counter)
#else
#define INCR(counter) ((void) 0)
#endif

/*#define BCMP(p1, p2, n) bcmp((char *)(p1), (char *)(p2), (int)(n))*/
/*#define BCOPY(p1, p2, n) slbcopy((U_CHAR *)(p1), (U_CHAR *)(p2), (int)(n))*/
/*#ifndef KERNEL
#define ovbcopy slbcopy
#endif*/

#define BCMP(p0, p1, n)    memcmp  (p0, p1, n)
#define BCOPY(p0, p1, n)   memmove (p1, p0, n)
#define ovbcopy(p0, p1, n) memmove (p1, p0, n)

/*
 * sizeof(word) MUST BE A POWER OF TWO
 * SO THAT wmask BELOW IS ALL ONES
 */
typedef int word;       /* "word" used for optimal copy speed */
#define wsize   sizeof(word)
#define wmask   (wsize - 1)

/*----------------------------------------------------------------------*/
/* prototypes                                                           */
/*----------------------------------------------------------------------*/
/*static int bcmp(char *b1, char *b2, int n);*/
/*extern void bzero(char *cp, long size);*/

#if 0
/************************************************************************/
/*   slbcopy: BSD style byte copying                                    */
/*  INPUTS: b1 - source, b2 - dest, n - length                          */
/* RETURNS:                                                             */
/* OUTPUTS:                                                             */
/* NOTE(S): Handles overlap.                                            */
/************************************************************************/
void
slbcopy(U_CHAR *src0, U_CHAR *dst0, int length)
{
    register U_CHAR *dst = dst0;
    register const U_CHAR *src = src0;
    register int t;

    if (length == 0 || dst == src)      /* nothing to do */
        return;

    /*
     * Macros: loop-t-times; and loop-t-times, t>0
     */
#define TLOOP(s) if (t) TLOOP1(s)
#define TLOOP1(s) do { s; } while (--t)

    if ((unsigned long)dst < (unsigned long)src) {
        /*
         * Copy forward.
         */
        t = (int)src;   /* only need low bits */
        if ((t | (int)dst) & wmask) {
            /*
             * Try to align operands.  This cannot be done
             * unless the low bits match.
             */
            if ((t ^ (int)dst) & wmask || length < wsize)
                t = length;
            else
                t = wsize - (t & wmask);
            length -= t;
            TLOOP1(*dst++ = *src++);
        }
        /*
         * Copy whole words, then mop up any trailing bytes.
         */
        t = length / wsize;
        TLOOP(*(word *)dst = *(word *)src; src += wsize; dst += wsize);
        t = length & wmask;
        TLOOP(*dst++ = *src++);
    } else {
        /*
         * Copy backwards.  Otherwise essentially the same.
         * Alignment works as before, except that it takes
         * (t&wmask) bytes to align, not wsize-(t&wmask).
         */
        src += length;
        dst += length;
        t = (int)src;
        if ((t | (int)dst) & wmask) {
            if ((t ^ (int)dst) & wmask || length <= wsize)
                t = length;
            else
                t &= wmask;
            length -= t;
            TLOOP1(*--dst = *--src);
        }
        t = length / wsize;
        TLOOP(src -= wsize; dst -= wsize; *(word *)dst = *(word *)src);
        t = length & wmask;
        TLOOP(*--dst = *--src);
    }
}
#endif

#if 0
/************************************************************************/
/*   bcmp : BSD-style string comparison (of same length)                */
/*  INPUTS: b1 - string1; b2 - string2; n - size                        */
/* RETURNS:                                                             */
/* OUTPUTS: 0 - identical; nonzero otherwise                            */
/* NOTE(S):                                                             */
/************************************************************************/
static int bcmp(char *b1, char *b2, int n)
{
if (!n) return 0;
while (n--)
  {
  if (*b1++ != *b2++) return 1;
  }
return 0;
}
#endif

void
sl_compress_init(struct slcompress *comp)
{
    register U_INT i;
    register struct cstate *tstate = comp->tstate;

    bzero((char *)comp, sizeof(*comp));
    for (i = MAX_STATES - 1; i > 0; --i) {
        tstate[i].cs_id = i;
        tstate[i].cs_next = &tstate[i - 1];
    }
    tstate[0].cs_next = &tstate[MAX_STATES - 1];
    tstate[0].cs_id = 0;
    comp->last_cs = &tstate[0];
    comp->last_recv = 255;
    comp->last_xmit = 255;
    comp->flags = SLF_TOSS;
}


/* ENCODE encodes a number that is known to be non-zero.  ENCODEZ
 * checks for zero (since zero has to be encoded in the long, 3 byte
 * form).
 */
#define ENCODE(n) { \
    if ((U_SHORT)(n) >= 256) { \
        *cp++ = 0; \
        cp[1] = (n); \
        cp[0] = (n) >> 8; \
        cp += 2; \
    } else { \
        *cp++ = (n); \
    } \
}
#define ENCODEZ(n) { \
    if ((U_SHORT)(n) >= 256 || (U_SHORT)(n) == 0) { \
        *cp++ = 0; \
        cp[1] = (n); \
        cp[0] = (n) >> 8; \
        cp += 2; \
    } else { \
        *cp++ = (n); \
    } \
}

#define DECODEL(f) { \
    if (*cp == 0) {\
        (f) = htonl(ntohl(f) + ((cp[1] << 8) | cp[2])); \
        cp += 3; \
    } else { \
        (f) = htonl(ntohl(f) + (U_LONG)*cp++); \
    } \
}

#define DECODES(f) { \
    if (*cp == 0) {\
        (f) = htons(ntohs(f) + ((cp[1] << 8) | cp[2])); \
        cp += 3; \
    } else { \
        (f) = htons(ntohs(f) + (U_LONG)*cp++); \
    } \
}

#define DECODEU(f) { \
    if (*cp == 0) {\
        (f) = htons((cp[1] << 8) | cp[2]); \
        cp += 3; \
    } else { \
        (f) = htons((U_LONG)*cp++); \
    } \
}


U_CHAR
sl_compress_tcp(struct mbuf *m, struct ip *ip, struct slcompress *comp,
                int compress_cid)
{
    register struct cstate *cs = comp->last_cs->cs_next;
    register U_INT hlen = ip->ip_hl;
    register struct tcphdr *oth;
    register struct tcphdr *th;
    register U_INT deltaS, deltaA;
    register U_INT changes = 0;
    U_CHAR new_seq[16];
    register U_CHAR *cp = new_seq;

    /*
     * Bail if this is an IP fragment or if the TCP packet isn't
     * `compressible' (i.e., ACK isn't set or some other control bit is
     * set).  (We assume that the caller has already made sure the
     * packet is IP proto TCP).
     */
    if ((ip->ip_off & htons(0x3fff)) || m->m_len < 40)
        return (TYPE_IP);

    th = (struct tcphdr *)&((int *)ip)[hlen];
    if ((th->th_flags & (TH_SYN|TH_FIN|TH_RST|TH_ACK)) != TH_ACK)
        return (TYPE_IP);
    /*
     * Packet is compressible -- we're going to send either a
     * COMPRESSED_TCP or UNCOMPRESSED_TCP packet.  Either way we need
     * to locate (or create) the connection state.  Special case the
     * most recently used connection since it's most likely to be used
     * again & we don't have to do any reordering if it's used.
     */
    INCR(sls_packets);
    if (ip->ip_src.s_addr != cs->cs_ip.ip_src.s_addr ||
        ip->ip_dst.s_addr != cs->cs_ip.ip_dst.s_addr ||
        *(int *)th != ((int *)&cs->cs_ip)[cs->cs_ip.ip_hl]) {
        /*
         * Wasn't the first -- search for it.
         *
         * States are kept in a circularly linked list with
         * last_cs pointing to the end of the list.  The
         * list is kept in lru order by moving a state to the
         * head of the list whenever it is referenced.  Since
         * the list is short and, empirically, the connection
         * we want is almost always near the front, we locate
         * states via linear search.  If we don't find a state
         * for the datagram, the oldest state is (re-)used.
         */
        register struct cstate *lcs;
        register struct cstate *lastcs = comp->last_cs;

        do {
            lcs = cs; cs = cs->cs_next;
            INCR(sls_searches);
            if (ip->ip_src.s_addr == cs->cs_ip.ip_src.s_addr
                && ip->ip_dst.s_addr == cs->cs_ip.ip_dst.s_addr
                && *(int *)th == ((int *)&cs->cs_ip)[cs->cs_ip.ip_hl])
                goto found;
        } while (cs != lastcs);

        /*
         * Didn't find it -- re-use oldest cstate.  Send an
         * uncompressed packet that tells the other side what
         * connection number we're using for this conversation.
         * Note that since the state list is circular, the oldest
         * state points to the newest and we only need to set
         * last_cs to update the lru linkage.
         */
        INCR(sls_misses);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区免费观看| 天天色天天爱天天射综合| 欧美日韩国产区一| 国产成人精品三级| 青娱乐精品在线视频| 亚洲日本一区二区| 国产欧美1区2区3区| 正在播放一区二区| 欧美亚洲一区三区| jvid福利写真一区二区三区| 精品一区二区三区影院在线午夜| 亚洲一区日韩精品中文字幕| 国产精品久久久久三级| 久久蜜桃一区二区| 欧美一区二区三区日韩视频| 在线观看日韩精品| 91在线观看美女| 福利一区二区在线| 国产美女精品在线| 国内一区二区视频| 视频一区欧美精品| 亚洲综合久久久| 国产美女精品人人做人人爽| 男人的天堂久久精品| 亚洲国产aⅴ天堂久久| 亚洲精品一二三| 亚洲欧美综合网| 国产精品国产三级国产普通话蜜臀 | 色婷婷久久99综合精品jk白丝 | 97久久精品人人澡人人爽| 国产精品1区2区3区在线观看| 另类调教123区| 日本不卡高清视频| 蜜桃视频在线观看一区| 蜜臀久久99精品久久久画质超高清 | 欧美日韩国产一区二区三区地区| 日本高清成人免费播放| 色婷婷av一区二区三区大白胸| 91猫先生在线| 欧美性色aⅴ视频一区日韩精品| 日本高清不卡aⅴ免费网站| 一本高清dvd不卡在线观看| 91久久一区二区| 欧美网站大全在线观看| 欧美精品一二三区| 日韩午夜激情免费电影| 欧美一区二区啪啪| 亚洲精品一区在线观看| 国产欧美日韩在线视频| 国产精品国产三级国产普通话蜜臀 | 欧美tickling挠脚心丨vk| 337p日本欧洲亚洲大胆色噜噜| 亚洲精品在线一区二区| 国产精品区一区二区三区| 最近中文字幕一区二区三区| 亚洲男人天堂一区| 亚洲成人高清在线| 久久99在线观看| 丁香天五香天堂综合| www.激情成人| 欧洲视频一区二区| 欧美一区二区在线播放| 国产亚洲一区字幕| 亚洲精品久久久久久国产精华液| 午夜精品免费在线| 国产精品亚洲一区二区三区妖精| 不卡的电视剧免费网站有什么| 日本久久精品电影| 日韩免费电影一区| 中文字幕在线免费不卡| 午夜视频久久久久久| 国产福利不卡视频| 在线一区二区三区四区| 日韩欧美成人午夜| ...xxx性欧美| 久久国产精品99久久久久久老狼| 国产精品69毛片高清亚洲| 国产精品久久影院| 偷拍亚洲欧洲综合| 成人av电影在线观看| 欧美日韩国产片| 国产精品久久久久一区二区三区| 亚洲亚洲人成综合网络| 国产成人精品影院| 777午夜精品免费视频| 国产精品免费丝袜| 免费成人美女在线观看| 色综合天天综合狠狠| 日韩免费电影一区| 一区二区三区日韩欧美| 国产成人一级电影| 56国语精品自产拍在线观看| 1024成人网| 国产美女精品人人做人人爽| 欧美日本不卡视频| 自拍偷拍亚洲综合| 国产精品一区二区91| 欧美一区二区性放荡片| 亚洲精品福利视频网站| 风间由美一区二区av101| 欧美电影一区二区| 一区二区三区在线免费视频 | 国产精品一区二区久激情瑜伽| 欧美日韩免费电影| 亚洲视频1区2区| 成人午夜电影网站| 久久夜色精品一区| 日韩vs国产vs欧美| 欧美日韩视频在线观看一区二区三区| 国产精品网站导航| 激情六月婷婷综合| 欧美日韩视频不卡| 一区二区三区中文字幕在线观看| 成人性生交大合| 国产亚洲婷婷免费| 国产在线精品免费| 久久综合久久久久88| 美女国产一区二区| 欧美一区二区三区播放老司机| 亚洲一区二区欧美激情| 91久久奴性调教| 亚洲欧洲制服丝袜| 99久久亚洲一区二区三区青草| 美国一区二区三区在线播放| 欧美浪妇xxxx高跟鞋交| 亚洲国产成人porn| 欧美特级限制片免费在线观看| 亚洲免费资源在线播放| 99re亚洲国产精品| 国产精品久久久久影院老司| 成人福利视频在线看| 国产精品成人免费| 成av人片一区二区| 中文字幕一区二区三区四区不卡| 国产精品白丝av| 国产精品免费aⅴ片在线观看| 粉嫩一区二区三区性色av| 国产欧美一区二区精品久导航| 国产·精品毛片| 国产精品视频你懂的| 91片黄在线观看| 一区二区三区四区蜜桃| 精品视频123区在线观看| 亚洲地区一二三色| 欧美一区二区三区喷汁尤物| 青椒成人免费视频| 久久综合色婷婷| 成人精品高清在线| 亚洲精品视频在线观看免费 | 欧美国产日产图区| 成人av在线资源网| 一区二区三区在线免费观看| 欧美日韩一区二区三区高清| 免费精品视频在线| 国产欧美日韩久久| 在线精品视频一区二区| 91激情五月电影| 青青草91视频| 国产精品丝袜一区| 欧美亚洲丝袜传媒另类| 久久精品99国产国产精| 亚洲国产精品二十页| 91久久久免费一区二区| 久久se精品一区精品二区| 国产精品视频在线看| 在线观看日韩高清av| 精品一区二区成人精品| 18欧美亚洲精品| 欧美一区二区三区不卡| 成人一级视频在线观看| 亚洲444eee在线观看| 久久久久国产一区二区三区四区| 91一区二区在线观看| 美国十次了思思久久精品导航| 国产精品久久影院| 欧美一区二区三区系列电影| 国产精品69毛片高清亚洲| 亚洲国产三级在线| 久久品道一品道久久精品| 欧美网站一区二区| 成人午夜在线播放| 日日夜夜精品免费视频| 日本一区二区免费在线| 欧美日韩1区2区| 99在线视频精品| 蜜臀精品一区二区三区在线观看| 中文字幕在线不卡| 精品国产一区二区三区久久久蜜月| 91亚洲资源网| 国产精品一区二区三区乱码| 午夜精品一区二区三区电影天堂| 国产精品网曝门| 日韩视频一区在线观看| 91国内精品野花午夜精品| 国产乱码精品1区2区3区| 日韩激情av在线| 亚洲精品高清在线观看| 国产香蕉久久精品综合网| 欧美一区二区三区成人| 欧美系列亚洲系列|