⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udp.lst

📁 51 单片机上网
💻 LST
字号:
C51 COMPILER V7.07   UDP                                                                   06/30/2006 16:21:51 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE UDP
OBJECT MODULE PLACED IN Udp.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE Udp.c LARGE OPTIMIZE(SIZE) BROWSE

stmt level    source

   1          #include <stdio.h>
   2          #include <string.h>
   3          #include "ethernet.h"
   4          #include "ip.h"
   5          #include "udp.h"
   6          
   7          /* Return UDP data length (-1 if no data), 0 if not UDP */
   8          int is_udp(IPKT *ip, int len)
   9          {
  10   1          UDPKT *udp;
  11   1          WORD sum;
  12   1          int dlen=0;
  13   1                                             /* Check protocol & minimum length */
  14   1          if (ip->i.pcol==PUDP && len>=sizeof(UDPHDR))
  15   1          {
  16   2              udp = (UDPKT *)ip;              /* Do checksum */
  17   2              sum = check_udp(udp, ip->i.sip, ip->i.dip, len);
  18   2              if (!udp->u.check || sum==0xffff)
  19   2              {                               /* If zero or correct.. */
  20   3                  len -= sizeof(UDPHDR);      /* Subtract header len */
  21   3                  dlen = len>0 ? len : -1;    /* Return -1 if data len=0 */
  22   3              }
  23   2          }
  24   1          return(dlen);
  25   1      }
  26          
  27          /* Make a UDP datagram given the source & destination, data len */
  28          int make_udp(ETHERFRAME * efp, NODE *srcep, NODE *destp, WORD dlen)
  29          {
  30   1          UDPKT *udp;
  31   1          int ulen, ilen;
  32   1          udp = (UDPKT *)(efp->edata);
  33   1          udp->u.sport = srcep->port;          /* Set ports */
  34   1          udp->u.dport = destp->port;
  35   1              ulen = dlen + sizeof(UDPHDR);
  36   1          udp->u.len = ulen; 
  37   1          udp->u.check = 0;
  38   1          ilen = make_ip(efp, srcep, destp, PUDP, (WORD)(ulen));
  39   1          udp->u.check = ~check_udp(udp, udp->i.sip, udp->i.dip, ulen);
  40   1          if (udp->u.check == 0)              /* Change sum of 0 to FFFF */
  41   1              udp->u.check = 0xffff;
  42   1          return(ilen);                       /* Return IP length */
  43   1      }
  44          
  45          /* Return TCP checksum, given UDP (header + data) length.
  46          ** The values must be in network byte-order */
  47          WORD check_udp(UDPKT *udp, LWORD sip, LWORD dip, int ulen)
  48          {
  49   1          PHDR tph;
  50   1          LWORD sum;
  51   1          sum = csum(&udp->u, (WORD)ulen);            /* Checksum TCP segment */
  52   1              tph.len=ulen;
  53   1          tph.srce = sip;
  54   1          tph.dest = dip;
  55   1          tph.z = 0;
C51 COMPILER V7.07   UDP                                                                   06/30/2006 16:21:51 PAGE 2   

  56   1          tph.pcol = udp->i.pcol;
  57   1          sum += csum(&tph, sizeof(tph));             /* Checksum pseudo-header */
  58   1          return((WORD)(sum + (sum /0x10000)));          /* Return total plus carry */
  59   1      }
  60          
  61          /* Send a UDP datagram, given destination node, data and length */
  62          void udp_transmit(ETHERFRAME *efp, NODE *sp, NODE *dp, void *dat, int len)
  63          {
  64   1          UDPKT *udp;
  65   1          udp = (UDPKT *)efp->edata;
  66   1          memmove(udp->udpdata, dat, len);
  67   1          put_ethernet(efp, make_udp(efp, sp, dp, (WORD)max(len, 0)));
  68   1      }
  69          
  70          
  71          /* Get the frame driver type, source port, IP and Ethernet addrs */
  72          void getudp_srce(ETHERFRAME *efp, NODE *np)
  73          {
  74   1          UDPKT *udp;
  75   1          memset(np, 0, sizeof(NODE));        /* Clear unused fields */
  76   1          getip_srce(efp, np);                /* Get dtype, srce IP and Ether addrs */
  77   1          udp = (UDPKT *)(efp->edata);
  78   1          np->port = udp->u.sport;            /* Get source port */
  79   1      }
  80          
  81          /* Get complete TCP local node data corresponding to frame dest IP address
  82          ** Return 0 if no matching node */
  83          int getudp_locdest(ETHERFRAME *efp, NODE *np)
  84          {
  85   1          UDPKT *udp;
  86   1          int ok;
  87   1          ok = getip_locdest(efp, np);          /* Get addresses, dtype & netmask */
  88   1          udp = (UDPKT *)(efp->edata);          /* Get dest port */
  89   1          np->port = udp->u.dport;
  90   1          return(ok);
  91   1      }
  92          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    973    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----      86
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -