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

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

?? tinytcp.c

?? TCPIP源代碼C語言版本
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
 * tinytcp.c - Tiny Implementation of the Transmission Control Protocol
 *
 * Written March 28, 1986 by Geoffrey Cooper, IMAGEN Corporation.
 *
 * This code is a small implementation of the TCP and IP protocols, suitable
 * for burning into ROM.  The implementation is bare-bones and represents
 * two days' coding efforts.  A timer and an ethernet board are assumed.  The
 * implementation is based on busy-waiting, but the tcp_handler procedure
 * could easily be integrated into an interrupt driven scheme.
 *
 * IP routing is accomplished on active opens by broadcasting the tcp SYN
 * packet when ARP mapping fails.  If anyone answers, the ethernet address
 * used is saved for future use.  This also allows IP routing on incoming
 * connections.
 * 
 * The TCP does not implement urgent pointers (easy to add), and discards
 * segments that are received out of order.  It ignores the received window
 * and always offers a fixed window size on input (i.e., it is not flow
 * controlled).
 *
 * Special care is taken to access the ethernet buffers only in word
 * mode.  This is to support boards that only allow word accesses.
 *
 * Copyright (C) 1986, IMAGEN Corporation
 *  "This code may be duplicated in whole or in part provided that [1] there
 *   is no commercial gain involved in the duplication, and [2] that this
 *   copyright notice is preserved on all copies.  Any other duplication
 *   requires written notice of the author (Geoffrey H. Cooper)."
 */

#include "tinytcp.h"

/*
 * Local IP address
 */
in_HwAddress sin_lclINAddr;

/*
 * IP identification numbers
 */
int tcp_id;

tcp_Socket *tcp_allsocs;

/* Timer definitions */
#define tcp_RETRANSMITTIME 1000     /* interval at which retransmitter is called */
#define tcp_LONGTIMEOUT 31000       /* timeout for opens */
#define tcp_TIMEOUT 10000           /* timeout during a connection */

#ifdef DEBUG
/* 
 * Primitive logging facility
 */
#define tcp_LOGPACKETS 1        /* log packet headers */
word tcp_logState;
#endif

/*
 * Initialize the tcp implementation
 */
tcp_Init()
{
    extern eth_HwAddress sed_lclEthAddr;

    /* initialize ethernet interface */
    sed_Init();

    tcp_allsocs = NIL;
#ifdef DEBUG
    tcp_logState = 0;
#endif
    tcp_id = 0;

    /* hack - assume the network number */
    sin_lclINAddr = 0x7d000000 + (*((longword *)&sed_lclEthAddr[1]) & 0xFFFFFF);
}

/*
 * Actively open a TCP connection to a particular destination.
 */
tcp_Open(s, lport, ina, port, datahandler)
    tcp_Socket *s;
    in_HwAddress ina;
    word lport, port;
    procref datahandler;
{
    extern eth_HwAddress sed_ethBcastAddr;

    s->state = tcp_StateSYNSENT;
    s->timeout = tcp_LONGTIMEOUT;
    if ( lport == 0 ) lport = clock_ValueRough();
    s->myport = lport;
    if ( ! sar_MapIn2Eth(ina, &s->hisethaddr[0]) ) {
        printf("tcp_Open of 0x%x: defaulting ethernet address to broadcast\n", ina);
        Move(&sed_ethBcastAddr[0], &s->hisethaddr[0], sizeof(eth_HwAddress));
    }
    s->hisaddr = ina;
    s->hisport = port;
    s->seqnum = 0;
    s->dataSize = 0;
    s->flags = tcp_FlagSYN;
    s->unhappy = true;
    s->dataHandler = datahandler;
    s->next = tcp_allsocs;
    tcp_allsocs = s;
    tcp_Send(s);
}

/*
 * Passive open: listen for a connection on a particular port
 */
tcp_Listen(s, port, datahandler, timeout)
    tcp_Socket *s;
    word port;
    procref datahandler;
{
    s->state = tcp_StateLISTEN;
    if ( timeout == 0 ) s->timeout = 0x7ffffff; /* forever... */
    else s->timeout = timeout;
    s->myport = port;
    s->hisport = 0;
    s->seqnum = 0;
    s->dataSize = 0;
    s->flags = 0;
    s->unhappy = 0;
    s->dataHandler = datahandler;
    s->next = tcp_allsocs;
    tcp_allsocs = s;
}

/*
 * Send a FIN on a particular port -- only works if it is open
 */
tcp_Close(s)
    tcp_Socket *s;
{
    if ( s->state == tcp_StateESTAB || s->state == tcp_StateSYNREC ) {
        s->flags = tcp_FlagACK | tcp_FlagFIN;
        s->state = tcp_StateFINWT1;
        s->unhappy = true;
    }
}

/*
 * Abort a tcp connection
 */
tcp_Abort(s)
    tcp_Socket *s;
{
    if ( s->state != tcp_StateLISTEN && s->state != tcp_StateCLOSED ) {
        s->flags = tcp_FlagRST | tcp_FlagACK;
        tcp_Send(s);
    }
    s->unhappy = 0;
    s->dataSize = 0;
    s->state = tcp_StateCLOSED;
    s->dataHandler(s, 0, -1);
    tcp_Unthread(s);
}

/*
 * Retransmitter - called periodically to perform tcp retransmissions
 */
tcp_Retransmitter()
{
    tcp_Socket *s;
    BOOL x;

    for ( s = tcp_allsocs; s; s = s->next ) {
        x = false;
        if ( s->dataSize > 0 || s->unhappy ) {
            tcp_Send(s);
            x = true;
        }
        if ( x || s->state != tcp_StateESTAB )
            s->timeout -= tcp_RETRANSMITTIME;
        if ( s->timeout <= 0 ) {
            if ( s->state == tcp_StateTIMEWT ) {
                printf("Closed.    \n");
                s->state = tcp_StateCLOSED;
                s->dataHandler(s, 0, 0);
                tcp_Unthread(s);
            } else {
                printf("Timeout, aborting\n");
                tcp_Abort(s);
            }
        }
    }
}

/*
 * Unthread a socket from the socket list, if it's there 
 */
tcp_Unthread(ds)
    tcp_Socket *ds;
{
    tcp_Socket *s, **sp;

    sp = &tcp_allsocs;
    for (;;) {
        s = *sp;
        if ( s == ds ) {
            *sp = s->next;
            break;
        }
        if ( s == NIL ) break;
        sp = &s->next;
    }
}

/*
 * busy-wait loop for tcp.  Also calls an "application proc"
 */
tcp(application)
    procref application;
{
    in_Header *ip;
    longword timeout, start;
    int x;

    sed_Receive(0);

    timeout = 0;
    while ( tcp_allsocs ) {
        start = clock_ValueRough();
        ip = sed_IsPacket();
        if ( ip == NIL ) {
            if ( clock_ValueRough() > timeout ) {
                tcp_Retransmitter();
                timeout = clock_ValueRough() + tcp_RETRANSMITTIME;
            }

            application();

            continue;
        }

        if ( sed_CheckPacket(ip, 0x806) == 1 ) {
            /* do arp */
            sar_CheckPacket(ip);

        } else if ( sed_CheckPacket(ip, 0x800) == 1 ) {
            /* do IP */
            if ( ip->destination == sin_lclINAddr &&
                 in_GetProtocol(ip) == 6 &&
                 checksum(ip, in_GetHdrlenBytes(ip)) == 0xFFFF ) {
                tcp_Handler(ip);
            }
        }
        /* recycle buffer */
        sed_Receive(ip);

        x = clock_ValueRough() - start;
        timeout -= x;
    }

    return ( 1 );
}

/*
 * Write data to a connection.
 * Returns number of bytes written, == 0 when connection is not in
 * established state.
 */
tcp_Write(s, dp, len)
    tcp_Socket *s;
    byte *dp;
    int len;
{
    int x;

    if ( s->state != tcp_StateESTAB ) len = 0;
    if ( len > (x = tcp_MaxData - s->dataSize) ) len = x;
    if ( len > 0 ) {
        Move(dp, &s->data[s->dataSize], len);
        s->dataSize += len;
        tcp_Flush(s);
    }

    return ( len );
}

/*
 * Send pending data
 */
tcp_Flush(s)
    tcp_Socket *s;
{
    if ( s->dataSize > 0 ) {
        s->flags |= tcp_FlagPUSH;
        tcp_Send(s);
    }
}

/*
 * Handler for incoming packets.
 */
tcp_Handler(ip)
    in_Header *ip;
{
    tcp_Header *tp;
    tcp_PseudoHeader ph;
    int len;
    byte *dp;
    int x, diff;
    tcp_Socket *s;
    word flags;

    len = in_GetHdrlenBytes(ip);
    tp = (tcp_Header *)((byte *)ip + len);
    len = ip->length - len;

    /* demux to active sockets */
    for ( s = tcp_allsocs; s; s = s->next )
        if ( s->hisport != 0 &&
             tp->dstPort == s->myport &&
             tp->srcPort == s->hisport &&
             ip->source == s->hisaddr ) break;
    if ( s == NIL ) {
        /* demux to passive sockets */
        for ( s = tcp_allsocs; s; s = s->next )
            if ( s->hisport == 0 && tp->dstPort == s->myport ) break;
    }
    if ( s == NIL ) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线观看不卡一区| 国产精品久久久久久久第一福利| 麻豆免费精品视频| 亚洲国产高清aⅴ视频| 日本高清免费不卡视频| 国模大尺度一区二区三区| 亚洲成av人片一区二区梦乃 | 成人性生交大合| 亚洲成人精品在线观看| 国产精品午夜在线观看| 日韩一区二区在线免费观看| 91老司机福利 在线| 国产最新精品免费| 午夜精品成人在线| 最新国产成人在线观看| 精品国产一区二区三区久久影院 | 欧美一三区三区四区免费在线看 | 国产视频亚洲色图| 欧美另类一区二区三区| 99久久精品99国产精品| 国产一区二区精品久久| 日韩成人伦理电影在线观看| 成人免费一区二区三区视频 | 精品国产露脸精彩对白| 欧美日韩高清影院| 色欧美乱欧美15图片| 国产成人综合亚洲91猫咪| 免费在线视频一区| 亚洲成a人在线观看| 亚洲另类中文字| 国产精品国产三级国产普通话蜜臀| 欧美一区二区日韩| 欧美日韩1234| 欧美少妇xxx| 日本精品免费观看高清观看| 99re热视频这里只精品| 粉嫩av一区二区三区| 精东粉嫩av免费一区二区三区| 日韩中文字幕av电影| 亚洲成av人综合在线观看| 亚洲综合激情网| 亚洲理论在线观看| 亚洲手机成人高清视频| 18欧美亚洲精品| 中文字幕中文在线不卡住| 国产午夜精品一区二区| 久久精品视频一区二区三区| 久久综合国产精品| 久久夜色精品一区| 久久亚洲影视婷婷| 久久久99精品免费观看不卡| 国产亚洲女人久久久久毛片| 国产日韩欧美在线一区| 欧美国产日产图区| 国产精品久久99| 亚洲美女偷拍久久| 亚洲影院免费观看| 日日噜噜夜夜狠狠视频欧美人| 午夜影视日本亚洲欧洲精品| 日韩高清不卡一区二区| 蜜臀91精品一区二区三区 | 欧美成人一区二区| 欧美精品一区二区三区一线天视频 | 国产制服丝袜一区| 高清shemale亚洲人妖| 99久久99久久精品国产片果冻| 99久久精品免费| 欧美色中文字幕| 日韩欧美黄色影院| 国产视频在线观看一区二区三区| 国产精品久久久久天堂| 玉米视频成人免费看| 日韩电影在线观看电影| 国产乱人伦精品一区二区在线观看 | 国产精品电影院| 亚洲乱码中文字幕综合| 午夜伦欧美伦电影理论片| 麻豆精品一区二区三区| 风间由美中文字幕在线看视频国产欧美| av电影一区二区| 欧美丝袜丝交足nylons| 欧美变态tickle挠乳网站| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 国产欧美日韩亚州综合| 亚洲激情图片一区| 麻豆精品视频在线观看视频| 成人久久视频在线观看| 欧美性三三影院| 精品欧美久久久| 亚洲美女淫视频| 精品亚洲成a人| 色一区在线观看| 精品精品国产高清a毛片牛牛 | 欧美不卡一二三| 日韩美女视频一区二区| 蜜臀a∨国产成人精品| 99精品国产热久久91蜜凸| 日韩一级黄色大片| 亚洲日本成人在线观看| 久久国产成人午夜av影院| 色综合中文字幕国产 | 日本午夜精品一区二区三区电影| 国产一区二区三区国产| 精品视频在线免费看| 欧美激情一区二区三区在线| 日日夜夜一区二区| 97久久超碰国产精品| 精品裸体舞一区二区三区| 亚洲综合一区二区精品导航| 福利一区在线观看| 日韩精品一区二| 亚洲国产视频直播| 成人天堂资源www在线| 日韩精品一区二区三区在线| 亚洲码国产岛国毛片在线| 久久精工是国产品牌吗| 欧美亚洲综合色| 亚洲欧洲精品成人久久奇米网| 韩国三级电影一区二区| 51精品久久久久久久蜜臀| 亚洲黄色尤物视频| eeuss鲁片一区二区三区在线观看| 精品奇米国产一区二区三区| 午夜av一区二区三区| 在线免费观看日韩欧美| 成人免费一区二区三区在线观看| 国产精品456露脸| 日韩一二三区不卡| 亚洲成av人片在线观看无码| 91官网在线免费观看| 国产精品国产三级国产aⅴ中文| 久久99久久久欧美国产| 欧美一区在线视频| 日日夜夜精品视频免费| 欧美精三区欧美精三区| 亚洲成人av免费| 91黄色激情网站| 亚洲精品视频在线观看网站| aaa亚洲精品| 亚洲欧美日韩在线播放| 色综合 综合色| 亚洲激情综合网| 欧美色综合网站| 婷婷开心久久网| 欧美一区二区三区电影| 免费国产亚洲视频| 欧美哺乳videos| 国产一区二区主播在线| 国产亚洲欧美激情| 成人高清视频在线| 中文字幕一区二| 91美女片黄在线观看| 亚洲黄色免费网站| 欧美日韩电影在线| 日韩黄色免费网站| 精品乱人伦小说| 国产福利一区二区三区在线视频| 久久久美女艺术照精彩视频福利播放 | 国产精品日韩成人| 99久久精品国产观看| 亚洲综合精品久久| 日韩一区二区三区视频在线| 精品一区二区三区香蕉蜜桃| 久久久不卡网国产精品一区| 成人av综合一区| 亚洲最大成人网4388xx| 欧美精三区欧美精三区| 激情六月婷婷综合| 九九精品一区二区| 国产精品国产三级国产三级人妇| 色综合中文字幕国产 | 99久久久国产精品免费蜜臀| 一区二区不卡在线播放| 91精品国产一区二区| 国产精品一二一区| 亚洲精品国产一区二区精华液| 欧美日韩日本视频| 国产一本一道久久香蕉| 国产精品电影院| 欧美一区二区视频在线观看2022 | 99久久精品国产观看| 亚洲香蕉伊在人在线观| wwww国产精品欧美| 一本大道久久a久久综合| 免费看欧美女人艹b| 国产精品私房写真福利视频| 欧美三区在线观看| 激情伊人五月天久久综合| 亚洲欧洲av另类| 日韩视频一区二区在线观看| 波多野结衣在线一区| 日本成人在线网站| 日韩一区在线播放| 欧美大片国产精品| 色综合久久九月婷婷色综合| 精品伊人久久久久7777人| 亚洲天堂精品在线观看| 精品免费99久久| 欧美日韩国产综合草草| 成人免费视频app|