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

📄 http.lst

📁 本程序是一个RS232转网口的。是一个透明传输的模块
💻 LST
📖 第 1 页 / 共 2 页
字号:
 171   5                          //} else 
 172   5                          ReplaceTag(ReplacePtr,ConfigAckMsg[HttpAckCode[i]],PostPageReplace[i].length); 
 173   5                                              if ((HttpAckCode[i] == USER_ERROR) || (HttpAckCode[i] == PASSWORD_ERROR)) {
 174   6                                  for (; i<REPLACE_STATU_NUM; i++) {         //如果是密码或用户名错误,余下的不再替换  
             -            
 175   7                                  ReplaceStatu[i] = 10;                          
 176   7                                  }                   
C51 COMPILER V7.06   HTTP                                                                  09/26/2008 13:36:02 PAGE 4   

 177   6                              break;                                             
 178   6                                              }
 179   5                                  }
 180   4                              }                                                      //正文用字符串替代原先准备替换的标签
 181   3              }
 182   2              }
 183   1      }
 184          
 185          
 186          /*
 187          *****************************************************************************************************
 188          *FUNC:
 189          *NOTE:  
 190          *****************************************************************************************************
 191          */
 192          void HttpFunc(union netcard xdata *pRxdnet,unsigned char sock,unsigned int length)
 193          {
 194   1          unsigned int  xdata body_len, hdr_len, page_len;
 195   1              unsigned char xdata body[1461];
 196   1              unsigned int  xdata i,sent,remaining;
 197   1              unsigned char xdata request;
 198   1              unsigned char code *xdata head[3];  //利用指针数组存放头部数据首地址
 199   1              unsigned char code *xdata page[3];  //利用指针数组存放网页正文数据首地址
 200   1              unsigned char count=0,ch=0;
 201   1      
 202   1              if (StrCompare(pRxdnet->tcpframe.tcpdata,"POST",length)) {
 203   2              request = POST_PAGE; 
 204   2                      DebugMsg(45);
 205   2              } else if (StrCompare(pRxdnet->tcpframe.tcpdata,"GET",length) != NULL) {
 206   2              if (StrCompare(pRxdnet->tcpframe.tcpdata, "logo",length) != NULL) {
 207   3                  request = GET_JPEG;
 208   3                              DebugMsg(46);
 209   3                  } else if (StrCompare(pRxdnet->tcpframe.tcpdata, "index",length) != NULL) {
 210   3                      request = GET_PAGE;
 211   3                              DebugMsg(47);
 212   3              } else if (StrCompare(pRxdnet->tcpframe.tcpdata, "/ ",length) != NULL) {
 213   3                      request = GET_PAGE;
 214   3                              DebugMsg(47);
 215   3              } else {
 216   3                      request = GET_PAGE;
 217   3                              DebugMsg(48);
 218   3                  }
 219   2              } else {
 220   2              return;
 221   2              }
 222   1      
 223   1              if (request > 2) {
 224   2              return;
 225   2              }
 226   1      
 227   1              if (request == POST_PAGE) {
 228   2              ParseHttpCmd(pRxdnet->tcpframe.tcpdata,length);  // 各ACK ID放在HttpAckCode[i]里  
 229   2              }
 230   1      
 231   1              head[0] = HtmlHeader;                         //request =0:Getpage
 232   1              head[1] = HtmlHeader;                         //request =1:Postpage 
 233   1              head[2] = JpegHeader;                         //request =2:GetJPG
 234   1      
 235   1              page[0] = WebPage;                            //request =0:Getpage
 236   1      
 237   1              if (RemoteRestart == REMOTE_RESTART_TRUE) {
 238   2                  page[1] = PostRstPage;                     //HTTP控制重启,提交重启页   
C51 COMPILER V7.06   HTTP                                                                  09/26/2008 13:36:02 PAGE 5   

 239   2              } else if (RemoteRestart == REMOTE_RESTART_FALSE){
 240   2              page[1] = PostRstErrorPage;
 241   2              } else {
 242   2              page[1] = PostPage;                        //request =1:Postpage
 243   2              }
 244   1              page[2] = Photo1Jpeg;                          //request =2:GetJPG
 245   1      
 246   1          hdr_len = strlen(head[request]);               // 头长度:119
 247   1          page_len = strlen(page[request]);              //页长度: 2223
 248   1              if (request == GET_JPEG) {
 249   2              page_len = 2267;//7680;                    //图片长度用strlen取会有问题
 250   2              }
 251   1          body_len = hdr_len + page_len;                 //总长度: 2342
 252   1      
 253   1          HexToDec(page_len);                            // 网页正文长度变成字符串Data_Length
 254   1      
 255   1              if (body_len > 1460) {
 256   2              remaining = 1460;
 257   2          } else {
 258   2              remaining = body_len;
 259   2          }
 260   1      
 261   1          for (i=0; i<remaining; i++) {
 262   2                      if (i < hdr_len) {
 263   3                  body[i] = *(head[request]+i);            //COPY头部
 264   3                  } else {
 265   3                  body[i] = *(page[request]+i-hdr_len);    //copy正文 从0个开始
 266   3                  }
 267   2              }
 268   1      
 269   1              body[remaining]=0;                               //结束符
 270   1      
 271   1      
 272   1              for (i=0; i<REPLACE_STATU_NUM; i++) {            //替换前全清0,0:未替换,大于0:已替换
 273   2              ReplaceStatu[i] = 0;                         //替换一个后填大于1的值,否为0
 274   2              }
 275   1          ReplaceNewIp = FALSE;                            //替换刷新IP,置未替换
 276   1      
 277   1              if (ReplacePtr = StrCompare(body,"TAG:LEN1",length)) {
 278   2              ReplaceTag(ReplacePtr,Data_Length,8);        //正文长度用字符串替代原先准备替换的标签
 279   2              }
 280   1              
 281   1              Replace_Loop(body,request,remaining);            //把当前的参数替换为网页内容上传显示
 282   1      
 283   1              //#ifdef _DEBUG_
 284   1              //    Uart0Putsl(body,remaining);
 285   1              //#endif
 286   1      
 287   1              conxn[sock].pUnAcked->bUsed     = FALSE;
 288   1          User_TCPSend(sock,body,remaining);
 289   1          conxn[sock].my_sequence+=remaining;            // 很重要哦
 290   1          sent = remaining-hdr_len;                      //sent=正文已发,remaining=现在正要发的
 291   1      
 292   1          while (sent < page_len) {                      //小于说明正文还有未发
 293   2                  count++;
 294   2                      ch=count+0x30;
 295   2              remaining = page_len - sent;               //现在要发的
 296   2              if (remaining > 1460) {
 297   3                              remaining = 1460;
 298   3              }
 299   2      
 300   2              for (i=0; i<remaining; i++) {
C51 COMPILER V7.06   HTTP                                                                  09/26/2008 13:36:02 PAGE 6   

 301   3                  body[i] = *(page[request]+i+sent);     //copy正文
 302   3                      }
 303   2      
 304   2                  body[remaining]=0;                         //结束符
 305   2      
 306   2                      Replace_Loop(body,request,remaining);      //替换,有些正文有分侦发送,反以这也要判断
 307   2      
 308   2              sent += remaining;
 309   2                      conxn[sock].pUnAcked->bUsed     = FALSE;
 310   2              User_TCPSend(sock,body,remaining);
 311   2                      conxn[sock].my_sequence+=remaining;        // 很重要哦   
 312   2          } 
 313   1      
 314   1              conxn[sock].pUnAcked->bUsed     = FALSE;       // 很重要哦 僻免重发     
 315   1      
 316   1          //发RST命令目的是,让浏览器每一次POST或GET都得从请求链接开始,牺牲时间
 317   1          tcp_send(&TCPSend,FLG_RST, 20, sock); 
 318   1              InerClose(sock);
 319   1          //=======================================================
 320   1              
 321   1              if (RemoteRestart == REMOTE_RESTART_TRUE) {
 322   2                  RemoteRestart = REMOTE_RESTART_IDEL;
 323   2                      HintMsg(11,NULL);
 324   2              McuRst(SAVE_EXIT);         
 325   2          }                   
 326   1      }
 327          
 328          /*
 329          *****************************************************************************************************
 330          * 
 331          *****************************************************************************************************
 332          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2279    ----
   CONSTANT SIZE    =    529    ----
   XDATA SIZE       =     15    1486
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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