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

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

?? udp.c

?? 內(nèi)容包括: 嵌入式TCPIP協(xié)議棧應(yīng)用主機端程序(VC6源碼);如何構(gòu)造嵌入式Linux系統(tǒng);基于ARM的嵌入式TCPIP協(xié)議的實現(xiàn)等
?? 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 */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色悠悠久久综合| 国产中文字幕精品| 91国产丝袜在线播放| 亚洲精品中文字幕在线观看| 一本大道久久a久久精二百| 亚洲欧美怡红院| 在线观看精品一区| 偷拍亚洲欧洲综合| 精品处破学生在线二十三| 国产一区二区三区精品视频| 中文字幕欧美国产| 91国产丝袜在线播放| 七七婷婷婷婷精品国产| 久久久另类综合| 99精品黄色片免费大全| 亚洲综合图片区| 欧美成人一区二区| eeuss鲁片一区二区三区| 亚洲一区二区三区四区的 | 午夜精品视频一区| 欧美日韩高清在线播放| 极品销魂美女一区二区三区| 中文天堂在线一区| 欧美日韩精品三区| 国产电影一区在线| 亚洲高清在线精品| 久久久久久久久免费| 色婷婷亚洲精品| 美女视频黄免费的久久| 国产精品国产三级国产普通话三级 | 日韩美女一区二区三区| a级高清视频欧美日韩| 香蕉久久夜色精品国产使用方法 | 国产天堂亚洲国产碰碰| 在线亚洲一区二区| 黑人巨大精品欧美一区| 一区二区在线看| 精品黑人一区二区三区久久| jizzjizzjizz欧美| 麻豆精品久久久| 亚洲卡通动漫在线| 久久久精品2019中文字幕之3| 色婷婷亚洲一区二区三区| 国产美女视频一区| 五月天激情小说综合| 国产精品九色蝌蚪自拍| 久久亚洲一区二区三区明星换脸| 91激情在线视频| 国产成人免费视频网站| 亚洲成人动漫在线观看| 国产精品国产精品国产专区不片| 日韩欧美国产小视频| 99在线精品免费| 国产在线不卡视频| 偷拍日韩校园综合在线| 一区二区三区四区乱视频| 亚洲国产精品精华液2区45| 日韩天堂在线观看| 欧美精三区欧美精三区| 色综合久久久久久久久| 成人看片黄a免费看在线| 乱一区二区av| 日本一区中文字幕| 亚洲成人高清在线| 亚洲一区二区欧美激情| 中文字幕制服丝袜成人av| 精品国产91九色蝌蚪| 日韩欧美不卡在线观看视频| 欧美日本一区二区在线观看| 在线这里只有精品| 色综合天天综合狠狠| 成人app下载| 成人免费毛片aaaaa**| 从欧美一区二区三区| 成人性生交大合| 国产xxx精品视频大全| 国产一区福利在线| 国产乱码一区二区三区| 国产精品一二三区在线| 国产高清不卡一区| 国产成人在线免费| 成人午夜私人影院| 欧美一二三区在线观看| 欧美精品免费视频| 在线综合视频播放| 日韩视频一区二区三区在线播放| 欧美日本一区二区三区四区| 欧美一区二区在线播放| 日韩精品一区在线观看| 亚洲精品一区二区三区福利| 欧美精品一区二区三区蜜桃 | 97精品国产露脸对白| 91丝袜美腿高跟国产极品老师 | 午夜精品爽啪视频| 视频一区中文字幕| 美女网站一区二区| 国产一区二区三区高清播放| 国产mv日韩mv欧美| 91视频国产观看| 欧美日韩日本视频| 日韩欧美国产不卡| 久久久亚洲精品一区二区三区| 久久久久国产免费免费| 136国产福利精品导航| 一区二区三区在线视频观看58 | 欧美亚洲国产一区二区三区| 日韩一区二区在线播放| 久久久精品综合| 日韩美女视频一区二区 | 久久综合999| 国产精品不卡一区| 亚洲成人777| 国模大尺度一区二区三区| 成人国产视频在线观看| 欧美三级日本三级少妇99| 日韩精品专区在线| 国产精品成人一区二区艾草 | 伊人一区二区三区| 老鸭窝一区二区久久精品| 国产aⅴ综合色| 欧美在线观看18| 欧美精品一区二区三区很污很色的 | 亚洲自拍偷拍九九九| 久久精品72免费观看| 色综合久久久久综合体桃花网| 日韩视频在线你懂得| 中文字幕在线不卡国产视频| 日韩国产精品久久久久久亚洲| 国产 欧美在线| 制服丝袜成人动漫| 《视频一区视频二区| 久久精品国产在热久久| 91丝袜国产在线播放| xf在线a精品一区二区视频网站| 一区二区三国产精华液| 国产精品一区在线观看乱码| 欧美天堂一区二区三区| 欧美极品aⅴ影院| 麻豆91精品91久久久的内涵| 91黄色免费版| 国产精品久久三| 国内精品自线一区二区三区视频| 在线日韩国产精品| 久久久亚洲欧洲日产国码αv| 亚洲成人自拍网| 91日韩精品一区| 国产日韩av一区| 国内精品伊人久久久久影院对白| 在线成人av网站| 亚洲一区欧美一区| 色综合中文综合网| 欧美激情自拍偷拍| 经典三级视频一区| 日韩欧美www| 另类中文字幕网| 欧美二区在线观看| 亚洲一区在线视频观看| 一本久道中文字幕精品亚洲嫩| 欧美激情中文不卡| 国产凹凸在线观看一区二区| 久久免费视频色| 国内成+人亚洲+欧美+综合在线| 日韩一区二区视频在线观看| 亚洲va国产天堂va久久en| 在线免费观看日韩欧美| 国产精品成人一区二区三区夜夜夜| 高清国产午夜精品久久久久久| 久久久久97国产精华液好用吗| 国产综合色精品一区二区三区| 日韩欧美电影一区| 久久国产综合精品| 欧美电视剧在线观看完整版| 日韩电影在线观看电影| 欧美一区午夜视频在线观看| 日韩av在线发布| 日韩女优电影在线观看| 久久国产精品72免费观看| 精品欧美乱码久久久久久 | 亚洲美女偷拍久久| 在线看日本不卡| 午夜婷婷国产麻豆精品| 欧美一区二区三区公司| 极品美女销魂一区二区三区免费| 精品成人一区二区三区四区| 国产精品一区二区三区四区 | 日本韩国欧美在线| 一区二区免费在线| 欧美精品久久一区二区三区| 久久福利资源站| 国产精品色噜噜| 色婷婷av一区二区| 日韩精品久久久久久| 日韩免费观看高清完整版在线观看| 国产乱码精品一区二区三区忘忧草| 国产精品麻豆久久久| 日本道色综合久久| 日韩影院在线观看| 久久久综合网站| 色系网站成人免费| 日韩精品乱码免费|