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

📄 http_server.lst

📁 cs8900 c51应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
 256                                          
 257          Return val:             INT32 - depends on event but usually (-1) is error of some
 258                                                          kind and positive reply means OK
 259                                          
 260          Date:                   13.10.2002
 261          
 262          Desc:                   This function is given to TCP socket as function pointer to be
 263                                          used by TCP engine to make callbacks to inform about events
 264                                          on TCP e.g. arriving data. 
 265          *********************************************************************************/
 266          
 267          
 268          INT32 https_eventlistener (INT8 cbhandle, UINT8 event, UINT32 par1, UINT32 par2) reentrant
 269          {
 270                  /* This function is called by TCP stack to inform about events  */
 271                  
 272                  INT16   i;
 273                  INT16   session;
 274                          
 275                  if( https_enabled == 0)
 276                          return(-1);
 277                  
 278                  if(cbhandle < 0)
 279                          return(-1);     
 280                          
 281                  /* Search for rigth session     */
 282                  
 283                  session = https_searchsession(cbhandle);        
 284                  
 285                  switch( event )
 286                  {
 287                  
 288                          case TCP_EVENT_CONREQ:
 289                          
 290                                  /* Do we have a session for requesting socket?  */
 291                                  
 292                                  if(session < 0)
 293                                          return(-1);
C51 COMPILER V7.06   HTTP_SERVER                                                           11/26/2004 11:32:46 PAGE 6   

 294          
 295                                  
 296                                  /* Try to get new session       */
 297                                  
 298                                  session = https_bindsession(cbhandle);
 299                                  
 300                                  if(session < 0)                 /* No resources */
 301                                          return(-1);
 302          
 303                                  
 304                                  return(1);
 305                  
 306                          case TCP_EVENT_ABORT:
 307                          
 308                                  if(session < 0)
 309                                          return(1);
 310                                  
 311                                  https_deletesession((UINT8)session);            
 312                                  
 313                                  return(1);
 314                          
 315                          case TCP_EVENT_CONNECTED:
 316                          
 317                                  if(session < 0)
 318                                          return(-1);
 319                          
 320                                  https_activatesession((UINT8)session);
 321                                  
 322                                  return(1);
 323                                  
 324                          case TCP_EVENT_CLOSE:
 325                          
 326                                  if(session < 0)
 327                                          return(-1);
 328                                  
 329                                  https_deletesession((UINT8)session);            
 330                                  
 331                                  return(1);              
 332                          
 333                                  
 334                          case TCP_EVENT_ACK:
 335                          
 336                                  if(session < 0)
 337                                          return(-1);
 338                          
 339                                  https[session].fpoint += https[session].funacked;
 340                                  https[session].funacked = 0;
 341                          
 342                                  return(1);
 343                                  
 344                          case TCP_EVENT_DATA:
 345                          
 346                                  /* Check for GET request        */
 347                                  
 348                                  if(session < 0)
 349                                          return(-1);
 350                                  
 351                                  if(https[session].fstart == 0)
 352                                  {
 353                                          if(par1 <= 3)
 354                                                  return(1);
 355                                          
C51 COMPILER V7.06   HTTP_SERVER                                                           11/26/2004 11:32:46 PAGE 7   

 356                                          /* Check for GET        */
 357                                          
 358                                          if(RECEIVE_NETWORK_B() != 'G')
 359                                                  return(1);
 360                                          if(RECEIVE_NETWORK_B() != 'E')
 361                                                  return(1);      
 362                                          if(RECEIVE_NETWORK_B() != 'T')
 363                                                  return(1);                      
 364                                                  
 365                                          par1 -= 3;
 366                                          
 367                                          /* Search for '/'       */
 368                                          
 369                                          for(i=0; i<par1; i++)
 370                                          {
 371                                                  if(RECEIVE_NETWORK_B() == '/')
 372                                                  {
 373                                                          i++;
 374                                                          break;
 375                                                  }
 376                                          }               
 377                                          
 378                                          par1 -= i;
 379                                          
 380                                          /* Calculate Hash       */
 381                                          
 382                                          i = https_calculatehash(par1);  
 383                                          
 384                                          if(i < 0)
 385                                          {
 386                                                  /* Invalid GET  */
 387                                                  return(1);
 388                                          }       
 389                                          
 390                                          /* Get FileRef  */
 391                                          
 392                                          i = https_findfile((UINT8)i, (UINT8)session);
 393                                                          
 394                                          
 395                                          return(1);              
 396                                          
 397                                  
 398                                  }
 399                          
 400                          
 401                                  return(1);
 402                          
 403                                  
 404                          case TCP_EVENT_REGENERATE:
 405                          
 406                                  if(session < 0)
 407                                          return(-1);
 408                          
 409                                  if(https[session].state != HTTPS_STATE_ACTIVE)
 410                                          return(-1);
 411                          
 412                                  i = https_loadbuffer(session, &net_buf[TCP_APP_OFFSET], (UINT16)par1);
 413                                  
 414                                  if(i<0)
 415                                          return(-1);
 416                                  
 417                                  tcp_send(https[session].ownersocket, &net_buf[TCP_APP_OFFSET], NETWORK_TX_BUFFER_SIZE - TCP_APP_OFFSET,
C51 COMPILER V7.06   HTTP_SERVER                                                           11/26/2004 11:32:46 PAGE 8   

             - i);        
 418                          
 419                                  return(i);
 420                  
 421                  
 422                          default:
 423                                  return(-1);
 424                  }       
 425          
 426          }
 427          
 428          
 429          void https_deletesession (UINT8 ses)
 430          {
 431                  https[ses].state = HTTPS_STATE_FREE;
 432                  https[ses].fstart = 0;
 433                  https[ses].fpoint = 0;
 434                  https[ses].flen  = 0;
 435                  https[ses].funacked = 0;
 436          
 437          }
 438          
 439          INT16 https_searchsession (UINT8 soch)
 440          {
 441                  UINT8 i;
 442                  
 443                  for(i=0; i<NO_OF_HTTP_SESSIONS; i++)
 444                  {
 445                          if(https[i].ownersocket == soch)
 446                                  return(i);
 447                          
 448                  }
 449                  
 450                  return(-1);
 451          
 452          }
 453          
 454          INT16 https_bindsession (UINT8 soch)
 455          {
 456                  UINT8 i;
 457                  
 458                  for(i=0; i<NO_OF_HTTP_SESSIONS; i++)
 459                  {
 460                          if(https[i].ownersocket == soch)
 461                          {
 462                                  if(https[i].state == HTTPS_STATE_FREE)
 463                                  {
 464                                          https[i].state = HTTPS_STATE_RESERVED;
 465                                          return(i);
 466                                  }                       
 467                          }       
 468                          
 469                  }
 470                  
 471                  
 472                  return(-1);
 473          
 474          }
 475          
 476          void https_activatesession (UINT8 ses)
 477          {
 478                  https[ses].state = HTTPS_STATE_ACTIVE;
C51 COMPILER V7.06   HTTP_SERVER                                                           11/26/2004 11:32:46 PAGE 9   

 479          
 480          }
 481          
 482          INT16 https_calculatehash (UINT32 len)
 483          {
 484                  UINT8 hash=0;
 485                  UINT8 ch;
 486                  UINT8 i;
 487                  
 488                  
 489                  /* Read Max 60 characters */
 490                  
 491                  if(len > 60)
 492                          len = 60;
 493                  
 494                  for( i=0; i<len; i++)
 495                  {
 496                          ch = RECEIVE_NETWORK_B();
 497                          
 498                          if( ch ==' ')   /* End reached?                 */
 499                                  break;
 500                          
 501                          hash *= 37;
 502                          hash += ch;
 503                  
 504                  }
 505                  
 506                  if(i==len)
 507                          return(-1);
 508                  
 509                  /* construct address for Hash table */
 510                  
 511                  if(hash == 0)           /* User asked defaul file       */
 512                  {
 513                          /* Set hash to index.html value */
 514                          
 515                          hash = 0x0B;
 516                  
 517                  }
 518                  
 519                  /* Now we have hash value calculated            */
 520                  
 521                  return( hash );
 522          
 523          }
 524          
 525          

C51 COMPILATION COMPLETE.  6 WARNING(S),  1 ERROR(S)

⌨️ 快捷键说明

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