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

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

?? udp.c

?? 嵌入式小型TCPIP協議棧
?? C
字號:
/* UDP functions for 'TCP/IP Lean' (c) Iosoft Ltd. 2000

This software is only licensed for distribution with the book 'TCP/IP Lean',
and may only be used for personal experimentation by the purchaser
of that book, on condition that this copyright notice is retained.
For commercial licensing, contact license@iosoft.co.uk

This is experimental software; use it entirely at your own risk. The author
offers no warranties of any kind, including its fitness for purpose. */

/*
** v0.01 JPB 15/2/00
** v0.02 JPB 3/7/00   Revised header for book CD
*/

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#include "ether.h"
#include "netutil.h"
#include "net.h"
#include "ip.h"
#include "udp.h"

int udpdebug;                   /* Flag to enable TCP packet display */
extern BYTE bcast[MACLEN];

/* Return UDP data length (-1 if no data), 0 if not UDP */
int is_udp(IPKT *ip, int len)
{
    UDPKT *udp;
    WORD sum;
    int dlen=0;
                                        /* Check protocol & minimum length */
    if (ip->i.pcol==PUDP && len>=sizeof(UDPHDR))
    {
        udp = (UDPKT *)ip;              /* Do checksum */
        sum = check_udp(udp, swapl(ip->i.sip), swapl(ip->i.dip), len);
        if (!udp->u.check || sum==0xffff)
        {                               /* If zero or correct.. */
            swap_udp(udp);              /* Do byte-swaps */
            len -= sizeof(UDPHDR);      /* Subtract header len */
            if (udpdebug)               /* Display segment if in debug mode */
                disp_udp(udp, len, 0);
            dlen = len>0 ? len : -1;    /* Return -1 if data len=0 */
        }
        else if (udpdebug)              /* Display error */
            printf("  ERROR: UDP checksum %04X\n", sum);
    }
    return(dlen);
}

/* Make a UDP datagram given the source & destination, data len */
int make_udp(GENFRAME *gfp, NODE *srcep, NODE *destp, WORD dlen)
{
    UDPKT *udp;
    int ulen, ilen;

    udp = getframe_datap(gfp);
    udp->u.sport = srcep->port;          /* Set ports */
    udp->u.dport = destp->port;
    udp->u.len = ulen = dlen + sizeof(UDPHDR);
    udp->u.check = 0;
    if (udpdebug)                       /* Display datagram if in debug mode */
        disp_udp(udp, dlen, 1);
    swap_udp(udp);                      /* Byte-swap */
    ilen = make_ip(gfp, srcep, destp, PUDP, (WORD)(ulen));
    udp->u.check = ~check_udp(udp, udp->i.sip, udp->i.dip, ulen);
    if (udp->u.check == 0)              /* Change sum of 0 to FFFF */
        udp->u.check = 0xffff;
    return(ilen);                       /* Return IP length */
}

/* Return TCP checksum, given UDP (header + data) length.
** The values must be in network byte-order */
WORD check_udp(UDPKT *udp, LWORD sip, LWORD dip, int ulen)
{
    PHDR tph;
    LWORD sum;

    sum = csum(&udp->u, (WORD)ulen);            /* Checksum TCP segment */
    tph.len = swapw((WORD)ulen);                /* Make pseudo-header */
    tph.srce = sip;
    tph.dest = dip;
    tph.z = 0;
    tph.pcol = udp->i.pcol;
    sum += csum(&tph, sizeof(tph));             /* Checksum pseudo-header */
    return((WORD)(sum + (sum >> 16)));          /* Return total plus carry */
}

/* Swap byte order of ints in TCP header */
void swap_udp(UDPKT *udp)
{
    udp->u.sport = swapw(udp->u.sport);
    udp->u.dport = swapw(udp->u.dport);
    udp->u.len = swapw(udp->u.len);
}

/* Return the max TCP seg (data) size for a given frame without fragmentation */
int udp_maxdata(GENFRAME *gfp)
{
    return(maxi(ip_maxdata(gfp)-sizeof(UDPHDR), 0));
}

/* Get the frame driver type, source port, IP and Ethernet addrs */
void getudp_srce(GENFRAME *gfp, NODE *np)
{
    TCPKT *tcp;

    memset(np, 0, sizeof(NODE));        /* Clear unused fields */
    getip_srce(gfp, np);                /* Get dtype, srce IP and Ether addrs */
    tcp = getframe_datap(gfp);
    np->port = tcp->t.sport;            /* Get source port */
}

/* Get the frame driver type, destination port, IP and Ethernet addrs */
void getudp_dest(GENFRAME *gfp, NODE *np)
{
    TCPKT *tcp;

    memset(np, 0, sizeof(NODE));        /* Clear unused fields */
    getip_dest(gfp, np);                /* Get dtype, dest IP and Ether addrs */
    tcp = getframe_datap(gfp);
    np->port = tcp->t.dport;            /* Get dest port */
}

/* Get complete TCP local node data corresponding to frame dest IP address
** Return 0 if no matching node */
int getudp_locdest(GENFRAME *gfp, NODE *np)
{
    UDPKT *udp;
    int ok;

    ok = getip_locdest(gfp, np);        /* Get addresses, dtype & netmask */
    udp = getframe_datap(gfp);          /* Get dest port */
    np->port = udp->u.dport;
    return(ok);
}

/* Display TCP segment */
void disp_udp(UDPKT *udp, int dlen, int tx)
{
    if (tx)
        printf("     /port %u->%u ", udp->u.sport, udp->u.dport);
    else
        printf("     \\port %u<-%u ", udp->u.dport, udp->u.sport);
    printf(" dlen %u\n", dlen);
}

/* Make a TCP segment given the socket, flags, data len */
int make_tftp_req(GENFRAME *gfp, NODE *sp, NODE *dp, WORD op, char *fname,
    char *mode)
{
    TFTP_REQ *tpr;
    WORD len;

    tpr = getframe_datap(gfp);
    tpr->op = swapw(op);
    len = strlen(strcpy(tpr->data, fname)) + 1;
    len += strlen(strcpy(&tpr->data[len], mode)) + 1;
    return(make_udp(gfp, sp, dp, (WORD)(len+2)));
}

/* EOF */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本视频一区二区三区| 日韩和的一区二区| 久久综合久久鬼色| 欧美本精品男人aⅴ天堂| 9191久久久久久久久久久| 欧美美女一区二区在线观看| 欧美性猛交xxxx乱大交退制版| proumb性欧美在线观看| 色综合天天综合网天天狠天天| 91伊人久久大香线蕉| 欧美在线免费观看视频| 欧美日韩专区在线| 日韩一区二区在线免费观看| 欧美成人一区二区三区在线观看| 日韩欧美国产高清| 国产日韩成人精品| 亚洲精选视频免费看| 五月天久久比比资源色| 青青草原综合久久大伊人精品 | 成人高清在线视频| 国产91精品在线观看| 99九九99九九九视频精品| 欧美日韩极品在线观看一区| 欧美一区二区三区公司| 国产视频一区在线播放| 亚洲品质自拍视频| 伦理电影国产精品| 91在线国内视频| 欧美一区二区在线视频| 国产视频一区二区三区在线观看| 国产精品美女久久久久久久网站| 亚洲福利视频一区| 国产精品中文字幕日韩精品| 在线免费av一区| 久久久久国产精品麻豆ai换脸| 日韩久久一区二区| 久久精品久久99精品久久| a在线播放不卡| 精品国产自在久精品国产| ...av二区三区久久精品| 日韩av二区在线播放| eeuss鲁一区二区三区| 91麻豆精品国产自产在线观看一区 | 国产精品第13页| 日韩高清不卡一区二区三区| 99久久久久免费精品国产 | 亚洲欧美区自拍先锋| 久久99在线观看| 欧美日韩国产首页| 中文字幕在线不卡一区| 精品写真视频在线观看| 欧美日韩午夜精品| 国产精品大尺度| 国产成人av福利| 日韩免费高清视频| 蜜臀av性久久久久蜜臀aⅴ | 精品国产乱码久久久久久久| 亚洲国产一区在线观看| 91啪亚洲精品| 亚洲欧洲无码一区二区三区| 国产精品77777竹菊影视小说| 91精品国产一区二区三区| 亚洲一区二区欧美日韩| 在线免费观看日本欧美| 亚洲美女精品一区| 色婷婷av一区二区三区大白胸| 欧美激情综合五月色丁香| 国产一区日韩二区欧美三区| 欧美videos大乳护士334| 日本vs亚洲vs韩国一区三区| 欧美三级电影网| 亚洲第一精品在线| 欧美日韩精品是欧美日韩精品| 自拍偷拍亚洲综合| 色综合咪咪久久| 亚洲精品视频一区| 欧美日本一区二区在线观看| 午夜不卡在线视频| 91精品国产全国免费观看| 免费xxxx性欧美18vr| 日韩一区二区三区在线观看| 日韩av不卡在线观看| 91精品国产手机| 精品伊人久久久久7777人| 久久综合九色欧美综合狠狠 | 欧美在线不卡视频| 亚洲成av人影院在线观看网| 91超碰这里只有精品国产| 毛片av中文字幕一区二区| 久久婷婷色综合| 波多野结衣在线一区| 亚洲欧美激情小说另类| 欧美日本不卡视频| 麻豆91在线看| 国产精品久久久久久久裸模| 在线观看区一区二| 久久99热狠狠色一区二区| 国产日韩欧美电影| 在线看不卡av| 麻豆91免费看| 亚洲色图制服诱惑| 91精品国产综合久久香蕉麻豆| 狠狠色丁香久久婷婷综| 自拍偷自拍亚洲精品播放| 欧美一区永久视频免费观看| 国产乱子伦视频一区二区三区| 中文字幕日韩一区| 欧美一区二区三区四区久久| 国产一区二区三区免费观看| 亚洲免费观看高清完整| 欧美mv和日韩mv的网站| 色噜噜狠狠成人网p站| 老司机免费视频一区二区三区| 中文字幕乱码久久午夜不卡| 制服.丝袜.亚洲.另类.中文| 成人污视频在线观看| 日本不卡123| 一区二区三区国产精华| 久久先锋影音av| 91精品欧美久久久久久动漫| 成人在线视频一区二区| 日韩精品欧美成人高清一区二区| 国产欧美日韩三区| 精品捆绑美女sm三区| 在线观看av一区二区| www.成人在线| 丁香婷婷综合色啪| 国内外精品视频| 日韩精品成人一区二区在线| 亚洲女同一区二区| 日本一区二区视频在线| 精品少妇一区二区三区在线视频| 欧美主播一区二区三区美女| 成人免费视频一区| 国产一区二区三区四区五区入口 | 国产精品正在播放| 奇米一区二区三区av| 亚洲一区二区三区在线看| 国产精品久久久久久久久免费丝袜 | 午夜精品福利一区二区蜜股av| 国产精品无码永久免费888| 久久综合色之久久综合| 精品日本一线二线三线不卡| 欧美日韩精品综合在线| 欧美视频在线不卡| 欧美色老头old∨ideo| 色婷婷久久久久swag精品 | 亚洲国产精品一区二区久久 | 粉嫩绯色av一区二区在线观看 | 色婷婷综合中文久久一本| 国产成人福利片| 丁香一区二区三区| 国产精品一区二区免费不卡| 国产在线播放一区三区四| 久久99日本精品| 国产乱子伦一区二区三区国色天香| 久久精品国产亚洲aⅴ| 秋霞电影一区二区| 久久国产精品区| 国产在线精品一区二区三区不卡| 激情另类小说区图片区视频区| 国内外成人在线视频| 国产一区二区久久| caoporn国产一区二区| 色婷婷av一区二区三区软件| 在线免费不卡视频| 日韩欧美一二区| 国产清纯白嫩初高生在线观看91| 国产精品三级视频| 亚洲曰韩产成在线| 麻豆精品在线播放| 成人激情动漫在线观看| 在线观看一区日韩| 欧美精品一区二区在线观看| 国产欧美日韩在线视频| 亚洲综合男人的天堂| 久久99精品网久久| 91免费看片在线观看| 欧美老肥妇做.爰bbww| 久久综合九色综合欧美就去吻| 国产精品国产三级国产专播品爱网| 亚洲欧美日韩国产另类专区| 日本va欧美va瓶| 99riav久久精品riav| 91精品国产欧美一区二区成人| 国产日韩av一区| 日日夜夜免费精品| 国产a视频精品免费观看| 欧美日韩中文字幕一区二区| 欧美大白屁股肥臀xxxxxx| 亚洲欧洲日产国产综合网| 日本视频一区二区| 色香蕉久久蜜桃| 久久久久久久久久久黄色| 一区二区三区在线免费播放| 韩国av一区二区三区| 欧美日韩国产成人在线免费| 日本一区二区免费在线观看视频 | 久久99精品国产.久久久久| 99国产精品国产精品毛片|