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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ppp.c

?? PPP協議C語言源代碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
#include <string.h>
#include "net.h"
#include "local.h"
#include "support.h"

#ifndef PPP
#error Please do not undefine PPP in local.h
#endif

#include "ppp.h"

#if DIALD
#include "dialapi.h"
#endif

extern struct NET nets[];
extern struct CONNECT connblo[];
extern struct NETCONF netconf[];
extern PTABLE ussIPTable;
extern PTABLE ussTCPTable;
extern PTABLE ussUDPTable;
extern PTABLE ussLQRPTable;

static int ioctl(void *handle, enum ioctlreq request, void *arg, size_t size);

struct Ihdr {                   /* Internet header */
    char message_header[MESSH_SZ];
    char link_header[LHDRSZ];
    unsigned char verlen;     /* header version, length in 32 bit words */
    unsigned char tservice;   /* type of service */
    unsigned short tlen;       /* total packet length including header */
    unsigned short frid;       /* ID for fragmentation */
    unsigned short fragm;      /* fragment flags, offset */
    unsigned char time;       /* time to live (hops) */
    unsigned char prot;       /* protocol */
    unsigned short chksum;     /* header checksum */
    unsigned char from[Iid_SZ];       /* source name */
    unsigned char to[Iid_SZ]; /* destination name */
};
#define IP_H(mb) ((struct Ihdr *)mb)
#define NOMIPHDRSZ 20

struct Thdr {                   /* TCP header */
    char message_header[MESSH_SZ];
    char link_header[LHDRSZ];
    char ip_header[NOMIPHDRSZ];
    unsigned short myport;     /* source port */
    unsigned short herport;    /* dest port */
    unsigned NLONG seqno[4 / sizeof(NLONG)];   /* sequence number */
    unsigned NLONG ackno[4 / sizeof(NLONG)];   /* acknowledgement number */
    unsigned char hdrlen;     /* tcp header length in high 4 bits */
    unsigned char flags;      /* message flags, see below */
    unsigned short window;     /* window */
    unsigned short chksum;     /* checksum */
    unsigned short urgp;       /* urgent pointer */
};
#define TCP_H(mb) ((struct Thdr *)mb)

struct Uhdr {                   /* UDP header */
    char message_header[MESSH_SZ];
    char link_header[LHDRSZ];
    char ip_header[NOMIPHDRSZ];
    unsigned short myport;     /* source port */
    unsigned short herport;    /* dest port */
    unsigned short tlen;
    unsigned short chksum;     /* checksum */
};
#define UDP_H(mb) ((struct Uhdr *)mb)

#define IP_TCP 6
#define IP_UDP 17

/* table for fast checksum sequence calculation */
static const unsigned short fcstab[256] = {
    0x0000,0x1189,0x2312,0x329b,0x4624,0x57ad,0x6536,0x74bf,
    0x8c48,0x9dc1,0xaf5a,0xbed3,0xca6c,0xdbe5,0xe97e,0xf8f7,
    0x1081,0x0108,0x3393,0x221a,0x56a5,0x472c,0x75b7,0x643e,
    0x9cc9,0x8d40,0xbfdb,0xae52,0xdaed,0xcb64,0xf9ff,0xe876,
    0x2102,0x308b,0x0210,0x1399,0x6726,0x76af,0x4434,0x55bd,
    0xad4a,0xbcc3,0x8e58,0x9fd1,0xeb6e,0xfae7,0xc87c,0xd9f5,
    0x3183,0x200a,0x1291,0x0318,0x77a7,0x662e,0x54b5,0x453c,
    0xbdcb,0xac42,0x9ed9,0x8f50,0xfbef,0xea66,0xd8fd,0xc974,
    0x4204,0x538d,0x6116,0x709f,0x0420,0x15a9,0x2732,0x36bb,
    0xce4c,0xdfc5,0xed5e,0xfcd7,0x8868,0x99e1,0xab7a,0xbaf3,
    0x5285,0x430c,0x7197,0x601e,0x14a1,0x0528,0x37b3,0x263a,
    0xdecd,0xcf44,0xfddf,0xec56,0x98e9,0x8960,0xbbfb,0xaa72,
    0x6306,0x728f,0x4014,0x519d,0x2522,0x34ab,0x0630,0x17b9,
    0xef4e,0xfec7,0xcc5c,0xddd5,0xa96a,0xb8e3,0x8a78,0x9bf1,
    0x7387,0x620e,0x5095,0x411c,0x35a3,0x242a,0x16b1,0x0738,
    0xffcf,0xee46,0xdcdd,0xcd54,0xb9eb,0xa862,0x9af9,0x8b70,
    0x8408,0x9581,0xa71a,0xb693,0xc22c,0xd3a5,0xe13e,0xf0b7,
    0x0840,0x19c9,0x2b52,0x3adb,0x4e64,0x5fed,0x6d76,0x7cff,
    0x9489,0x8500,0xb79b,0xa612,0xd2ad,0xc324,0xf1bf,0xe036,
    0x18c1,0x0948,0x3bd3,0x2a5a,0x5ee5,0x4f6c,0x7df7,0x6c7e,
    0xa50a,0xb483,0x8618,0x9791,0xe32e,0xf2a7,0xc03c,0xd1b5,
    0x2942,0x38cb,0x0a50,0x1bd9,0x6f66,0x7eef,0x4c74,0x5dfd,
    0xb58b,0xa402,0x9699,0x8710,0xf3af,0xe226,0xd0bd,0xc134,
    0x39c3,0x284a,0x1ad1,0x0b58,0x7fe7,0x6e6e,0x5cf5,0x4d7c,
    0xc60c,0xd785,0xe51e,0xf497,0x8028,0x91a1,0xa33a,0xb2b3,
    0x4a44,0x5bcd,0x6956,0x78df,0x0c60,0x1de9,0x2f72,0x3efb,
    0xd68d,0xc704,0xf59f,0xe416,0x90a9,0x8120,0xb3bb,0xa232,
    0x5ac5,0x4b4c,0x79d7,0x685e,0x1ce1,0x0d68,0x3ff3,0x2e7a,
    0xe70e,0xf687,0xc41c,0xd595,0xa12a,0xb0a3,0x8238,0x93b1,
    0x6b46,0x7acf,0x4854,0x59dd,0x2d62,0x3ceb,0x0e70,0x1ff9,
    0xf78f,0xe606,0xd49d,0xc514,0xb1ab,0xa022,0x92b9,0x8330,
    0x7bc7,0x6a4e,0x58d5,0x495c,0x3de3,0x2c6a,0x1ef1,0x0f78
};

static const char pppterm[]={5,0,0,10,0,0,0,0,0,0};

unsigned char ppp_hstat[NNETS];


/*
** * * * * * *
** ussGetPasswd()   Get password from user id
**
** char *ussGetPasswd(int n, char ul, char *u);
**
** PARAMETERS:
**   (in) int n                A network interface index
**   (in) char ul              Length of user ID
**   (in) char *u              Pointer to user ID
**
** RETURNS:
**   char *passwd              Success
**   0                         Failure
**
** DESCRIPTION:
**   This function is an internal function for PPP to see if a password
**   exists for a given userid.
**
*/
char *ussGetPasswd(int netno, char ul, char *uid)
{
    char *pw;
    struct NET *netp;

    netp = &nets[netno];
    if (strncmp(uid, netp->hw.userid, ul) == 0)
        pw = netp->hw.passwd;
    else
        pw = 0;

    return pw;
}


/*
** * * * * * *
** pppDQ()   Dequeue any lingering messages in PPP future queue
**
** static void pppDQ(netno)
**
** PARAMETERS:
**   (in) int netno            A network interface index
**
** DESCRIPTION:
**   This function is an internal function for PPP that dequeues any
**   remaining messages in the PPP future queue so that the upper
**   layers may deal with them (as if they were sent but no replies
**   have been received).
**
** * * * * * *
*/
#if DBUFFER
static void pppDQ(int netno)
{
    MESS *mess;
    struct NET *netp;
    int i1, i2;

    netp = &nets[netno];
    i1 = 0;
   /* Empty future queue for future links */
    while (!QUEUE_EMPTY(netp, future)) {
        QUEUE_OUT(netp, future, mess);
        mess->offset = boTXDONE;    /* Message is "sent" */
        if (mess->id <= bWACK) {
            if (mess->id == bRELEASE) {
                mess->id = bALLOC;
                Nrelbuf(mess);
            }
        }
        else {
            WAITNOMORE(SIG_WN(netno));
        }
        i1++;
    }
#if NTRACE >= 5
    if (i1)
        Nprintf("PPP: %d Datagram%c tossed from future queue!\n",
            i1, ((i1 == 1)?'!':'s'));
#endif
    netp->hw.opt8 = 0;
}
#else
#define pppDQ(netno) (nets[netno].hw.opt8 = 0)
#endif


/*
** * * * * * *
** pppWrite()  Internal write for negotiation protocols
**
** static int pppWrite(MESS *mess);
**
** PARAMETERS:
**   (in/out) mess             Pointer to a buffer to write out interface
**
** DESCRIPTION:
**   This function is an internal function for PPP that will create
**   the appropriate framing and write a message out the link.
**
** * * * * * *
*/
static int pppWrite(MESS *mess)
{
    int i1;
    unsigned short us1;
    unsigned char *cp;
    struct NET *netp;

#if NTRACE > 2 && PPP_DEBUG
    pppDebug(0, mess);  /* Print out packet */
#endif

    netp = &nets[mess->netno];

   /* The '- 2' skips the PPP protocol field */
    cp = (unsigned char *)mess + MESSH_SZ + LHDRSZ - 2;

    PH(mess)->MACtype = 0;  /* No compression for WRAP driver */

   /* Make async framing */
    if (netp->ifType == 23) {
       /* Add AHDLC framing */
        *--cp = 0x03;   /* Control */
        *--cp = 0xff;   /* Address */

       /* Set driver offset */
        PH(mess)->poffset = cp - (unsigned char *)mess;
        i1 = mess->mlen - PH(mess)->poffset;

       /* Calculate and append AHDLC checksum */
        us1 = 0xffff;
        while (i1--)
            us1 = (us1 >> 8) ^ fcstab[(us1 ^ *cp++) & 0xff];
        us1 ^= 0xffff;
        cp[1] = us1 >> 8;
        cp[0] = us1;
    }

#ifdef MIB2
    netp->ifOutOctets += mess->mlen - PH(mess)->poffset + 2;
    netp->ifOutUcastPkts++;
#endif


    us1 = mess->id;

   /* Write out the packet by calling the driver */
    i1 = netp->protoc[1]->writE(mess->netno, mess);
    if (i1 != 0 || us1 <= bWACK)
        return i1;
    WAITFOR(mess->offset == boTXDONE, SIG_WN(mess->netno), netp->tout, i1);
    return 1;
}


/*
** * * * * * *
** pppStart()  Internal function to make PPP ready for negotiations
**
** static void pppStart(int netno);
**
** PARAMETERS:
**   (in) netno                A yfnet network number
**   (in) apflag               Active/Passive flag (1/0)
**
** DESCRIPTION:
**   This function will set PPP's data to initial values for negotiations.
**   It neither checks nor changes the state.  The apflag is there because
**   active links usually do not request authentication, but passive ones
**   usually do.
**
** * * * * * *
*/
static void pppStart(int netno, int apflag)
{
    struct NET *netp;

    netp = &nets[netno];
    netp->state = 0;

#if NTRACE >= 3
    Nprintf("PPP: Starting on network %d\n", netno);
#endif

#ifdef LQRP
    memset(netp->lastins, 0, 44); /* OutLQRs, InLQRs, InGoodOctets also */
#endif

   /* Options used in first configure request for LCP */
    netp->hw.locopts = 0
#if PPP_MRU
        + 0x02
#endif
#if ASYNC
        + 0x04
#endif
#if REQAUTH
        + (apflag ? 0 : 0x08)
#endif
#if QUALITY
        + 0x10
#endif
#if MAGICNUM
        + 0x20
#endif
#if COMPRESSION & 1
        + 0x0180
#endif
    ;

    netp->hw.remopts = 0;

#if MP
    mpStart(netno);
#endif

#if VJ
    TXslots[netno] = RXslots[netno] = MAXSLOTS-1;
    TXixcomp[netno] = 1;
#endif

   /* What authentication did host request if passive? */
    if (!apflag) {
#if REQAUTH == PROTpap
        netp->hw.opt4 = AUTHhpap;
#elif REQAUTH == PROTchap && AUTH_ALG == CHAPalg_MD5
        netp->hw.opt4 = AUTHhchp;
#elif REQAUTH == PROTchap && AUTH_ALG == CHAPalg_MD4
        netp->hw.opt4 = AUTHhmsc;
#else
        netp->hw.opt4 = 0;
#endif
    }

#if ASYNC
    netp->hw.ul1 = 0;   /* Escape no characters if possible */
#endif

    netp->hw.opt1 = netp->hw.opt2 =  netp->hw.opt6 = netp->hw.opt8 = 0;
    netp->hw.opt7 = MAXCONF;        /* Initialize restart counter */
    netp->hw.timems = TimeMS();     /* Initialize timer */
    netp->hw.idle_time = netp->hw.echo_time = netp->hw.timems;
}


/*
** * * * * * *
** pppNegotiate()   Internal packet writing function.
**
** static void pppNegotiate(MESS *mess);
**
** PARAMETERS:
**   (in/out) mess              A buffer to write with
**
** DESCRIPTION:
**   This function will check the state and create any necessary
**   packet to negotiate with.
**
** * * * * * *
*/
static void pppNegotiate(MESS *mess)
{
    int i1;
    unsigned char *cp, *cp2;
    struct NET *netp;

    netp = &nets[mess->netno];
    if (netp->state != PPPclsd && netp->state != PPPopen) {
        cp = (unsigned char *)mess + MESSH_SZ + LHDRSZ;
        cp2 = cp + 4;
        if (netp->state == PPPclsng) {
            Nmemcpy((char *)mess+MESSH_SZ+LHDRSZ, pppterm, sizeof(pppterm));
            PH(mess)->protocol = NC2(PROTlcp);
            cp2 = cp + sizeof(pppterm);
            goto write;
        }
        else if ((netp->state & LCPopen) == LCPopen) {

#if AUTHENT & 1
           /* If peer requested PAP, we send Auth-req */
            if (netp->hw.opt4 & AUTHppap) {
                if(netp->hw.opt4 & AUTHpwat)
                    return;
                netp->hw.opt4 |= AUTHpwat;
                PH(mess)->protocol = NC2(PROTpap);
                *cp = PAPauth_req;
                cp[2] = 0;
                *cp2 = (unsigned char)strlen(netp->hw.userid);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品不卡一区二区三区| 亚洲国产精品一区二区www| 一区二区三区四区不卡在线| 老汉av免费一区二区三区| 91丝袜高跟美女视频| 亚洲精品一区二区三区影院| 亚洲国产欧美一区二区三区丁香婷| 国产精品一区一区| 7777精品伊人久久久大香线蕉完整版| 国产精品久久综合| 国产精品小仙女| 精品乱人伦一区二区三区| 亚洲动漫第一页| 91社区在线播放| 国产精品久久久久一区| 国产美女一区二区| 欧美电影精品一区二区| 亚洲超丰满肉感bbw| 在线观看欧美精品| 亚洲毛片av在线| 91麻豆精品视频| 亚洲欧美在线视频| 大胆欧美人体老妇| 国产区在线观看成人精品| 国产麻豆视频精品| 久久婷婷国产综合国色天香| 蜜臀精品久久久久久蜜臀| 91麻豆精品国产91久久久久久久久 | 欧美高清一级片在线| 亚洲欧美偷拍卡通变态| 99精品1区2区| 亚洲欧美日韩中文字幕一区二区三区| 成人一区二区三区中文字幕| 国产亚洲一区二区三区在线观看 | 日韩免费高清视频| 日韩电影在线免费看| 日韩一区二区免费电影| 蜜桃视频第一区免费观看| 日韩三级视频在线观看| 激情综合色综合久久综合| 337p日本欧洲亚洲大胆精品| 国产传媒欧美日韩成人| 国产色综合一区| 91丨九色丨蝌蚪丨老版| 亚洲一区在线观看网站| 91精品国产综合久久久久| 精品一区二区三区在线视频| 国产日产亚洲精品系列| 一区二区三区四区五区视频在线观看| 激情深爱一区二区| 久久久精品日韩欧美| 成人动漫一区二区三区| 一区二区三区四区蜜桃| 日韩一区二区三区四区五区六区| 国产精品一区二区免费不卡| 国产精品成人一区二区艾草| 欧美午夜精品一区| 久久99热99| 中文字幕一区二区三中文字幕| 欧美亚洲丝袜传媒另类| 激情综合色丁香一区二区| 国产精品蜜臀av| 欧美色综合影院| 国产精品99久久久久久久女警 | 亚洲四区在线观看| 欧美日本一区二区三区四区| 国内久久婷婷综合| 亚洲视频中文字幕| 日韩一区二区三免费高清| 国产成a人亚洲| 五月天国产精品| 国产精品美女久久久久久| 欧美人与z0zoxxxx视频| 国产精品996| 午夜亚洲国产au精品一区二区| 久久影音资源网| 91成人免费电影| 国产毛片精品视频| 视频在线在亚洲| 亚洲欧美日韩国产成人精品影院 | 国产成人av资源| 五月天中文字幕一区二区| 中文字幕第一区| 欧美成人猛片aaaaaaa| 欧美性猛片aaaaaaa做受| 国产传媒日韩欧美成人| 青青草国产精品97视觉盛宴| 亚洲色图丝袜美腿| 国产精品欧美精品| 精品动漫一区二区三区在线观看| 色菇凉天天综合网| www.66久久| 国产激情一区二区三区| 毛片基地黄久久久久久天堂| 亚洲成av人综合在线观看| 日韩美女视频一区二区| 日本一区二区成人在线| 亚洲精品一区二区三区在线观看| 91精品国产福利在线观看| 欧美怡红院视频| 91在线观看成人| 99九九99九九九视频精品| 北岛玲一区二区三区四区| 激情成人午夜视频| 精品亚洲免费视频| 蜜桃一区二区三区在线观看| 日本一区中文字幕 | 国产成人免费在线| 久久福利资源站| 另类小说图片综合网| 毛片不卡一区二区| 精品一区二区三区的国产在线播放| 五月天一区二区| 蜜臀av一区二区三区| 麻豆国产一区二区| 九九视频精品免费| 国产一区二区三区不卡在线观看| 国产一区二区三区四区五区入口| 韩国三级在线一区| 国产精品69久久久久水密桃| 国产成人在线免费| 成熟亚洲日本毛茸茸凸凹| 成人aa视频在线观看| 99r精品视频| 欧美亚洲自拍偷拍| 欧美精品在线一区二区三区| 欧美精品久久久久久久多人混战| 日韩视频国产视频| 久久一留热品黄| 国产精品不卡在线观看| 亚洲影视在线播放| 日本不卡1234视频| 国产精品一区免费在线观看| 99精品视频中文字幕| 91精品办公室少妇高潮对白| 91精品国产综合久久香蕉麻豆 | 精品久久久久久无| 日本一区二区免费在线观看视频 | 欧美午夜精品电影| 欧美一区二区三区免费观看视频| 久久综合久久久久88| 亚洲欧美日韩一区二区 | 成人av电影免费在线播放| 91成人在线免费观看| 欧美精品一区二区三区视频 | 日本系列欧美系列| 国产一区在线观看麻豆| 91丨porny丨最新| 日韩亚洲欧美成人一区| 中文字幕不卡一区| 日韩黄色片在线观看| 国产69精品一区二区亚洲孕妇| 欧美亚洲一区二区在线| 国产亚洲综合色| 亚洲mv大片欧洲mv大片精品| 国产成人午夜片在线观看高清观看| 91福利区一区二区三区| 久久精品亚洲精品国产欧美| 亚洲成人激情av| www.久久精品| 2020国产成人综合网| 亚洲国产日韩在线一区模特| 国产福利一区在线观看| 56国语精品自产拍在线观看| 国产精品欧美久久久久无广告| 美女视频网站久久| 欧美性一区二区| 国产精品免费久久| 久久99精品视频| 欧美美女喷水视频| 亚洲人成网站影音先锋播放| 精品午夜一区二区三区在线观看| 欧美系列日韩一区| 18欧美亚洲精品| 国产69精品久久久久毛片| 69久久夜色精品国产69蝌蚪网| 樱花草国产18久久久久| 北岛玲一区二区三区四区 | 日本伦理一区二区| 中文字幕免费不卡| 国产综合久久久久影院| 91麻豆精品国产91久久久更新时间| 亚洲精品视频在线看| av在线不卡电影| 国产拍欧美日韩视频二区| 国内外成人在线| 精品久久一区二区三区| 日韩精品电影一区亚洲| 欧美另类久久久品| 婷婷开心激情综合| 欧美日韩日日摸| 天天亚洲美女在线视频| 欧美精品在线一区二区三区| 午夜久久久影院| 欧美日韩电影一区| 视频一区国产视频| 欧美一区二区三区四区久久| 琪琪久久久久日韩精品| 日韩视频一区二区在线观看| 精品中文字幕一区二区|