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

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

?? udp.lst

?? cf8020+cp2200(網絡)的驅動實現(xiàn)
?? LST
字號:
C51 COMPILER V7.09   UDP                                                                   07/27/2007 15:55:59 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE UDP
OBJECT MODULE PLACED IN UDP.obj
COMPILER INVOKED BY: F:\Keil\C51\BIN\C51.EXE tcp\UDP.C LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\UDP.lst) OBJECT(UDP.obj)

line level    source

   1          //-----------------------------------------------------------------------------
   2          // Copyright (c) 2002 Jim Brady
   3          // Do not use commercially without author's permission
   4          // Last revised August 2002
   5          // Net UDP.C
   6          //
   7          // This module handles UDP messages
   8          // Refer to RFC 768, 1122
   9          // Also RFC 862 echo, RFC 867 daytime, and RFC 868 time
  10          //-----------------------------------------------------------------------------
  11          
  12          #include <stdlib.h>
  13          
  14          #include "net.h"
  15          #include "ip.h"
  16          #include "cksum.h"
  17          #include "serial.h"
  18          #include "icmp.h"
  19          #include "udp.h"
  20          #include "utils.h"
  21          #include "tftp.h"
  22          
  23          extern UCHAR  debug;
  24          extern ulong  my_ipaddr;
  25          uint  sender_udpport;
  26          static ulong  sender_ipaddr;
  27          extern char  text[];
  28          extern unsigned char TFTP_BUF[];
  29          ulong broadcast_ip = 0xFFFFFFFF;
  30          //void udp_tftp_service(UCHAR  * inbuf, uint len, HANDLE Adapter, ULONG Op);
  31          //------------------------------------------------------------------------
  32          //      UDP Echo service - see RFC 862
  33          // This simply echos what it received back to the sender
  34          //------------------------------------------------------------------------
  35          void udp_echo_service(UCHAR  * inbuf, uint len)
  36          {
  37   1         if (debug)
  38   1         {
  39   2            //serial_send("ECHO: Nr chars = ");
  40   2          //  memset(text, 0, 10);
  41   2      //      itoa(len, text, 10);
  42   2            //serial_send(text);
  43   2                //serial_send("\n");
  44   2         }
  45   1              udp_send(inbuf, ECHO_PORT, len);      
  46   1      }
  47          
  48          
  49          
  50          //------------------------------------------------------------------------
  51          //      This handles outgoing UDP messages
  52          // See "TCP/IP Illustrated, Volume 1" Sect 11.1 - 11.3
  53          //------------------------------------------------------------------------
  54          void udp_send(UCHAR  * inbuf, uint port, uint len)
  55          {
C51 COMPILER V7.09   UDP                                                                   07/27/2007 15:55:59 PAGE 2   

  56   1              ulong  sum;
  57   1              uint  result;
  58   1              UCHAR  * outbuf;
  59   1              UDP_HEADER  * udp;
  60   1              IP_HEADER  * ip;
  61   1              int udplen = 0;
  62   1              
  63   1              // Allocate memory for entire outgoing message including
  64   1              // eth & IP headers. Total ethernet message length is:
  65   1         // 14 byte eth header + 20 byte IP header + 8 byte UDP header
  66   1         // + length of this data 
  67   1      //   outbuf = (UCHAR  *)malloc(42 + len);
  68   1         outbuf = inbuf;
  69   1         if (outbuf == NULL)
  70   1         {
  71   2            return;
  72   2         }
  73   1         
  74   1         udp = (UDP_HEADER  *)(outbuf + 34);
  75   1         ip = (IP_HEADER  *)(outbuf + 14);
  76   1         
  77   1         // Direct message back to the senders port. 
  78   1         udp->dest_port = sender_udpport;
  79   1         udp->source_port = port;
  80   1         udp->length = 8 + len;
  81   1         udp->checksum = 0;
  82   1         
  83   1         // Fill in data
  84   1         // Important do not free receive buffer prior to this
  85   1         memcpy((char*)udp->msg_data, (inbuf + 42), len); 
  86   1         
  87   1         
  88   1         // Compute checksum including 12 bytes of pseudoheader
  89   1         // Must pre-fill 2 items in outbuf to do this
  90   1         // Direct message back to senders ip address
  91   1         ip->dest_ipaddr = sender_ipaddr;
  92   1         ip->source_ipaddr = my_ipaddr;
  93   1         
  94   1      #ifdef __LITTLEENDIAN__
                 udp->dest_port = ntohs(udp->dest_port);
                 udp->source_port = ntohs(udp->source_port);
                 udplen = udp->length;
                 udp->length = ntohs(udp->length);
                 ip->source_ipaddr = ntohs(ip->source_ipaddr);
              
              #endif
 102   1         
 103   1         
 104   1         // Sum source_ipaddr, dest_ipaddr, and entire UDP message 
 105   1      
 106   1         sum = (ulong)cksum(outbuf + 26, 8 + udplen);
 107   1                              
 108   1         // Add in the rest of pseudoheader which is
 109   1         // zero, protocol id, and UDP length
 110   1         sum += (ulong)0x0011;
 111   1         sum += (ulong)udplen;
 112   1         
 113   1         // In case there was a carry, add it back around
 114   1         result = (uint)(sum + (sum >> 16));
 115   1         udp->checksum = ~result;
 116   1      
 117   1        udp->checksum = 0;
C51 COMPILER V7.09   UDP                                                                   07/27/2007 15:55:59 PAGE 3   

 118   1      //   if (debug) serial_send("UDP: Sending msg to IP layer\r");
 119   1      #ifdef __LITTLEENDIAN__
                 udp->checksum = ntohs(udp->checksum);
                 sender_ipaddr = ntohl(sender_ipaddr);
                 udp->length = ntohs(udp->length);
              #endif
 124   1      
 125   1         ip_send(outbuf, sender_ipaddr, UDP_TYPE, udp->length);
 126   1      
 127   1      #ifdef __LITTLEENDIAN__
                 free(outbuf);
              #endif
 130   1      }
 131          
 132          
 133          
 134          //------------------------------------------------------------------------
 135          // This handles incoming UDP messages
 136          // See "TCP/IP Illustrated, Volume 1" Sect 11.1 - 11.3
 137          //------------------------------------------------------------------------
 138          void udp_rcve(UCHAR  * inbuf, uint len)
 139          {
 140   1         uint  result;
 141   1         UDP_HEADER  * udp;
 142   1         IP_HEADER  * ip;
 143   1         ulong  sum;
 144   1         uint udplen;
 145   1            
 146   1              // Total of eth & IP headers = 34 bytes      
 147   1         udp = (UDP_HEADER  *)(inbuf + 34);
 148   1         ip = (IP_HEADER  *)(inbuf + 14);
 149   1                              
 150   1              // The IP length "len" should be the same as the redundant length
 151   1              // udp->length.  TCP/IP Illustrated, Vol 2, Sect 23.7 says to use the
 152   1              // UDP length, unless IP length < UDP length, in which case the frame
 153   1         // should be discarded.   
 154   1      #ifdef __LITTLEENDIAN__
                 udp->length = ntohs(udp->length);
              #endif
 157   1         udplen = udp->length;
 158   1         if (len < udplen)
 159   1                 return;
 160   1                         
 161   1              // If the checksum is zero it means that the sender did not compute
 162   1              // it and we should not try to check it.
 163   1              if (udp->checksum == 0)
 164   1              {
 165   2      //              if (debug) serial_send("UDP: Sender did not compute cksum\r");
 166   2              }
 167   1              else
 168   1              {
 169   2                      // Compute UDP checksum including 12 byte pseudoheader
 170   2                      // Sum source_ipaddr, dest_ipaddr, and entire UDP message 
 171   2                      sum = (ulong)cksum(inbuf + 26, 8 + udplen);
 172   2                      
 173   2                      // Add in the rest of pseudoheader which is
 174   2                      // zero, protocol id, and UDP length
 175   2                      sum += (ulong)0x0011;     
 176   2                      sum += (ulong)udplen;
 177   2      
 178   2                      // In case there was a carry, add it back around
 179   2                      result = (uint)(sum + (sum >> 16));
C51 COMPILER V7.09   UDP                                                                   07/27/2007 15:55:59 PAGE 4   

 180   2                      
 181   2                      if (result != 0xFFFF)
 182   2                      {
 183   3      //                      if (debug) serial_send("UDP: Error, bad cksum\r");
 184   3                              result = 0;
 185   3                              return;
 186   3                      }
 187   2              
 188   2      //              if (debug) serial_send("UDP: Msg rcvd with good cksum\r");
 189   2              }
 190   1                      
 191   1              // Capture sender's port number and ip_addr
 192   1              // to send return message to
 193   1              sender_udpport = udp->source_port;
 194   1              sender_ipaddr = ip->source_ipaddr;
 195   1              
 196   1      #ifdef __LITTLEENDIAN__
                      udp->dest_port = ntohs(udp->dest_port);
              #endif
 199   1              // See if any applications are on any ports
 200   1              switch (udp->dest_port)
 201   1              {
 202   2              case ECHO_PORT:
 203   2                      // Pass it the payload length
 204   2      #ifdef __LITTLEENDIAN__
                              udp->dest_port = ntohs(udp->dest_port);
              #endif
 207   2                      udp_echo_service(inbuf, udplen - 8);
 208   2                      break;
 209   2                      
 210   2              case TFTP_PORT:
 211   2      #ifdef __LITTLEENDIAN__
                              udp->dest_port = ntohs(udp->dest_port);
              #endif
 214   2                      tftp_rcv_packet(inbuf, udplen);
 215   2                      break;
 216   2                      
 217   2              default:
 218   2                      // If no application is registered to handle incoming
 219   2                      // UDP message then send ICMP destination unreachable
 220   2                      dest_unreach_send(inbuf, ip->source_ipaddr);
 221   2                      break;
 222   2              }
 223   1      }
 224          
 225          void udp_broadcast(UCHAR  * inbuf, uint port, uint len)
 226          {       
 227   1      
 228   1              UCHAR  * outbuf;
 229   1              UDP_HEADER  * udp;
 230   1              IP_HEADER  * ip;
 231   1              int udplen = 0;
 232   1              char test[]={'a', 'b', 'c'};
 233   1      
 234   1         outbuf = inbuf;
 235   1         if (outbuf == NULL)
 236   1         {
 237   2            return;
 238   2         }
 239   1         
 240   1         udp = (UDP_HEADER  *)(outbuf + 34);
 241   1         ip = (IP_HEADER  *)(outbuf + 14);
C51 COMPILER V7.09   UDP                                                                   07/27/2007 15:55:59 PAGE 5   

 242   1         
 243   1         // Direct message back to the senders port. 
 244   1         udp->dest_port = port;
 245   1         udp->source_port = port;
 246   1         udp->length = 8 + len;
 247   1         udp->checksum = 0;
 248   1         
 249   1         // Fill in data
 250   1         // Important do not free receive buffer prior to this
 251   1         memcpy((UCHAR *)udp->msg_data, &test[0], 3);    
 252   1         
 253   1         // Compute checksum including 12 bytes of pseudoheader
 254   1         // Must pre-fill 2 items in outbuf to do this
 255   1         // Direct message back to senders ip address
 256   1         ip->dest_ipaddr = sender_ipaddr;
 257   1         ip->source_ipaddr = my_ipaddr;
 258   1         
 259   1      #ifdef __LITTLEENDIAN__
                 udp->dest_port = ntohs(udp->dest_port);
                 udp->source_port = ntohs(udp->source_port);
                 udplen = udp->length;
                 udp->length = ntohs(udp->length);
                 ip->source_ipaddr = ntohs(ip->source_ipaddr);
              
              #endif
 267   1         
 268   1      #ifdef __LITTLEENDIAN__
                 udp->checksum = ntohs(udp->checksum);
                 sender_ipaddr = ntohl(sender_ipaddr);
                 udp->length = ntohs(udp->length);
              #endif
 273   1      
 274   1         ip_send(outbuf, broadcast_ip, UDP_TYPE, udp->length);
 275   1      
 276   1      #ifdef __LITTLEENDIAN__
                 free(outbuf);
              #endif
 279   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1337    ----
   CONSTANT SIZE    =      3    ----
   XDATA SIZE       =     10      58
   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 + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本大道av一区二区在线播放| 日本麻豆一区二区三区视频| 99久久伊人精品| 亚洲精品视频免费看| 777xxx欧美| 成人精品在线视频观看| 亚洲国产成人va在线观看天堂| 精品国产免费人成在线观看| 成人免费va视频| 麻豆成人av在线| 亚洲一区二区四区蜜桃| 国产偷国产偷精品高清尤物| 在线观看视频一区二区| 国产成人亚洲综合色影视| 一区二区三区成人| 欧美国产日韩在线观看| 9191成人精品久久| 欧美在线综合视频| 老司机精品视频线观看86| 亚洲永久精品大片| 欧美韩国一区二区| 久久久综合精品| 欧美美女喷水视频| 欧美精品久久久久久久多人混战 | 偷拍日韩校园综合在线| 国产日韩欧美a| 日韩精品中文字幕一区| 欧美日韩日本视频| 欧美日韩国产在线播放网站| 91在线视频播放| 国产精品一区二区久久精品爱涩 | 亚洲bt欧美bt精品| 国产女人aaa级久久久级 | 26uuu亚洲| 精品国产人成亚洲区| 日韩欧美久久一区| 2023国产精华国产精品| 久久久久青草大香线综合精品| 欧美不卡一区二区三区四区| 91精品婷婷国产综合久久| 欧美高清hd18日本| 精品国产污污免费网站入口 | 欧美日韩久久久一区| 91精品国产综合久久久久久 | 欧美日韩国产片| 91黄视频在线| 欧美日韩亚州综合| 欧美精品日韩精品| 2022国产精品视频| 亚洲女同女同女同女同女同69| 亚洲在线免费播放| 精品在线一区二区三区| 成人av影视在线观看| 欧美在线观看视频在线| 久久一区二区三区四区| 亚洲欧美日韩国产综合| 日本不卡一区二区三区高清视频| 狠狠狠色丁香婷婷综合激情| 97精品视频在线观看自产线路二| 欧美午夜精品久久久久久孕妇 | 美女国产一区二区| 国产伦精品一区二区三区在线观看 | 精品播放一区二区| 成人性生交大片| 精品欧美一区二区久久| 亚洲视频 欧洲视频| 蜜臀久久99精品久久久久久9| 成人免费观看av| 日韩免费一区二区| 一区二区三区日韩欧美| 国产毛片精品一区| 精品久久一二三区| 亚洲专区一二三| 在线免费av一区| 亚洲一级电影视频| 欧美日韩一区二区电影| 亚洲午夜免费福利视频| 欧美性一二三区| 国产精品久久777777| 日韩中文字幕av电影| 欧美日韩免费在线视频| 日韩电影在线免费观看| 91精品在线观看入口| 久久99精品久久久久久国产越南 | 欧美艳星brazzers| 亚洲国产毛片aaaaa无费看| 欧美精品aⅴ在线视频| 日本欧洲一区二区| 久久久蜜桃精品| av资源站一区| 亚洲黄网站在线观看| 欧美亚洲免费在线一区| 麻豆国产精品视频| 国产精品免费久久久久| 色婷婷av一区二区三区之一色屋| 一区二区三区小说| 日韩欧美成人一区二区| 一区二区三区在线视频观看58| 日韩精品亚洲一区| 2020国产精品久久精品美国| 成人久久18免费网站麻豆| 亚洲午夜电影在线| 中文字幕av不卡| 日韩三级电影网址| 成人精品免费网站| 蜜桃av一区二区三区| 亚洲天堂免费在线观看视频| 日韩精品一区二区三区老鸭窝| 99精品视频在线免费观看| 久久9热精品视频| 午夜影视日本亚洲欧洲精品| 国产精品色一区二区三区| 精品国产一区二区精华| 91精品国产综合久久蜜臀| 99久久综合狠狠综合久久| 国产真实乱子伦精品视频| 日韩电影免费一区| 日韩专区一卡二卡| 亚洲另类在线制服丝袜| 中文字幕亚洲精品在线观看| 欧美国产精品久久| 国产精品不卡在线观看| 中文字幕精品三区| 国产精品麻豆欧美日韩ww| 中文天堂在线一区| 欧美国产综合一区二区| 国产亚洲美州欧州综合国| 日韩你懂的在线观看| 精品国产乱码久久久久久浪潮 | 久久久一区二区三区捆绑**| 日韩欧美一区二区免费| 欧美一区二区黄色| 91精品国产乱码久久蜜臀| 欧美一区二区三区小说| 精品国产乱码久久久久久久久| 欧美一区二区三区在线观看 | 91免费看视频| 欧美日韩中文另类| 4438x成人网最大色成网站| 日韩美一区二区三区| 久久先锋资源网| 国产校园另类小说区| 国产精品女主播在线观看| 亚洲免费在线观看视频| 青青草97国产精品免费观看无弹窗版 | 一区二区国产视频| 日本不卡在线视频| kk眼镜猥琐国模调教系列一区二区 | 日韩成人午夜电影| 国内不卡的二区三区中文字幕| 成人黄色片在线观看| 欧美日韩精品一区二区天天拍小说 | 日韩欧美在线综合网| 国产精品护士白丝一区av| 日本大胆欧美人术艺术动态| 成人综合婷婷国产精品久久| 欧美日韩一区二区三区在线看| 欧美v国产在线一区二区三区| 亚洲天堂福利av| 国内精品嫩模私拍在线| 欧美性受xxxx黑人xyx性爽| 久久久久99精品一区| 成人免费视频播放| 91高清视频在线| 久久先锋资源网| 午夜a成v人精品| 欧美日韩视频在线第一区| 精品国产一区a| 裸体歌舞表演一区二区| 欧美日本在线播放| 亚洲人成网站精品片在线观看| 成人免费va视频| 国产精品免费人成网站| 丁香网亚洲国际| 国产欧美一区在线| 国产成人午夜视频| 久久精品一区二区三区四区| 国产麻豆成人传媒免费观看| 精品国产一区二区三区久久影院| 麻豆一区二区在线| 2020国产精品久久精品美国| 视频精品一区二区| 91麻豆精品国产91久久久久久 | 免费在线观看日韩欧美| 日韩一卡二卡三卡| 国产精品88av| 亚洲欧美日韩在线| 91精品国产aⅴ一区二区| 免费一级欧美片在线观看| 久久女同精品一区二区| 99久久精品免费看国产免费软件| 亚洲乱码一区二区三区在线观看| 色婷婷综合视频在线观看| 午夜久久福利影院| 久久精品欧美日韩| 97精品久久久午夜一区二区三区 | 亚洲欧美日韩一区| 日韩一区二区三区四区| av激情亚洲男人天堂| 偷拍一区二区三区四区|