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

📄 httpd.i

📁 实现在指定视频服务器下的视频点播
💻 I
字号:
# 1 "httpd.c"



 






































 






 

































 

# 1 "globals.h"








typedef unsigned long  int u32;
typedef unsigned short int u16;
typedef unsigned      char  u8;






                                    

                                    


                                        

                                    









extern _Bool STACK_BUSY;

extern u16 temp_cgi; 		

# 87 "httpd.c"
# 1 "uip.h"



 










 


































 




# 1 "uipopt.h"









 










 

































 





 



 






 
typedef unsigned char u8_t;






 
typedef unsigned short u16_t;






 
typedef unsigned short uip_stats_t;

 

 













 









 













 


# 146 "uipopt.h"

# 159 "uipopt.h"

# 172 "uipopt.h"









 






								

 

								

 

								

 

								

 

								

 

 
 




 




 














 






 


 

 








 





 









 






 






 


 
 



 










 










 








 










 










 






 







 








 






 







  



 
 



 








 







 


 

 




 









 









 










 







 
void uip_log(char *msg);









 



 
 









 
# 493 "uipopt.h"








 




 
 































 







 






 
 



 




# 57 "uip.h"
# 1 "httpd.h"



 





 

































 




void httpd_init(void);
void httpd_appcall(void);



 




struct httpd_state {
  u8 state; 
  u16 count;
  char *dataptr;
  char *script;
};



 






extern struct httpd_state *hs;

# 58 "uip.h"
# 1 "uip_arp.h"



 




 
 




 
  

































 




# 1 "uip.h"



 










 


































 

# 1071 "uip.h"


 

# 56 "uip_arp.h"





 
struct uip_eth_addr {
  u8 addr[6];
};

extern struct uip_eth_addr uip_ethaddr;



 
struct uip_eth_hdr {
  struct uip_eth_addr dest;
  struct uip_eth_addr src;
  u16_t type;
};








 
void uip_arp_init(void);





 
void uip_arp_ipin(void);






 
void uip_arp_arpin(void);










 
void uip_arp_out(void);


 
void uip_arp_timer(void);

 




 








 










 











 










 



















 
# 193 "uip_arp.h"

 




 
extern const u16_t uip_arp_draddr[2], uip_arp_netmask[2];









# 59 "uip.h"


 



 







 











 














 



 






 






 
void uip_init(void);

 







 


















































 











































 














 



# 297 "uip.h"






















 
extern u8 uip_buf[1600+2];

 

 



 





 












 
void uip_listen(u16 port);












 
void uip_unlisten(u16 port);

































 
struct uip_conn *uip_connect(u16 *ripaddr, u16 port);











 


























 










 










 








 










 









 







 










 






 









 










 











 









 









 









 











 













  







 












 












 
struct uip_udp_conn *uip_udp_new(u16 *ripaddr, u16 rport);







 












 


 

 







 
 



















 













 
# 715 "uip.h"







 

u16 htons(u16 val);


 







 

extern volatile u8 *uip_appdata;

extern volatile unsigned int uip_appdata_length; 


extern volatile u8 *uip_sappdata; 







 
extern volatile u8 *uip_urgdata; 











 
extern volatile u16 uip_len, uip_slen;


extern volatile u8 uip_urglen, uip_surglen;












 
struct uip_conn {
  u16 ripaddr[2];    
  
  u16 lport;         
  u16 rport;        
   
  
  u8 rcv_nxt[4];    
 
  u8 snd_nxt[4];    
 
  u16 len;           
  u16 mss;          
 
  u16 initialmss;   
   
  u8 sa;            
 
  u8 sv;            
 
  u8 rto;            
  u8 tcpstateflags;  
  u8 timer;          
  u8 nrtx;          
 

   
  u8 appstate[(sizeof(struct httpd_state))];  
};


 
extern struct uip_conn *uip_conn;
 
extern struct uip_conn uip_conns[10];



 



 
extern volatile u8 uip_acc32[4];

 


# 842 "uip.h"





 
struct uip_stats {
  struct {
    uip_stats_t drop;     
 
    uip_stats_t recv;     
 
    uip_stats_t sent;     
 
    uip_stats_t vhlerr;   
 
    uip_stats_t hblenerr; 
 
    uip_stats_t lblenerr; 
 
    uip_stats_t fragerr;  
 
    uip_stats_t chkerr;   
 
    uip_stats_t protoerr; 
 
  } ip;                    
  struct {
    uip_stats_t drop;      
    uip_stats_t recv;      
    uip_stats_t sent;      
    uip_stats_t typeerr;  
 
  } icmp;                  
  struct {
    uip_stats_t drop;      
    uip_stats_t recv;      
    uip_stats_t sent;      
    uip_stats_t chkerr;   
 
    uip_stats_t ackerr;   
 
    uip_stats_t rst;       
    uip_stats_t rexmit;    
    uip_stats_t syndrop;  
 
    uip_stats_t synrst;   
 
  } tcp;                   
};





 
extern struct uip_stats uip_stat;


 


 
 





 
extern volatile u8 uip_flags;





 

# 945 "uip.h"








 
void uip_process(u8 flag);





 

# 971 "uip.h"

 
# 983 "uip.h"
  




 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
  
   
  u16 srcport,
    destport;
  u8 seqno[4],  
    ackno[4],
    tcpoffset,
    flags,
    wnd[2];     
  u16 tcpchksum;
  u8 urgp[2];
  u8 optdata[4];
} uip_tcpip_hdr;

 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
   
  u8 type, icode;
  u16 icmpchksum;
  u16 id, seqno;  
} uip_icmpip_hdr;


 
typedef struct {
   
  u8 vhl,
    tos,          
    len[2],       
    ipid[2],        
    ipoffset[2],  
    ttl,          
    proto;     
  u16 ipchksum;
  u16 srcipaddr[2], 
    destipaddr[2];
  
   
  u16 srcport,
    destport;
  u16 udplen;
  u16 udpchksum;
} uip_udpip_hdr;






extern const u16 uip_hostaddr[2];











 

# 88 "httpd.c"
# 1 "fs.h"



 





 
 

































 







 
struct fs_file {
  char *data;   
  int len;      
};








 
int fs_open(const char *name, struct fs_file *file);



u16_t fs_count(char *name);





 
void fs_init(void);

# 90 "httpd.c"
# 1 "fsdata.h"

































 







struct fsdata_file {
   const struct fsdata_file *next; 
   const char *name;				
   const char *data;					
   const int len;						


  u16_t count;


};

struct fsdata_file_noconst {
  struct fsdata_file *next;
  char *name;
  char *data;
  int len;


  u16_t count;


};




extern const struct fsdata_file file_cgi_stats[];
extern const struct fsdata_file file_cgi_tcp[];
extern const struct fsdata_file file_img_bg_png[];
extern const struct fsdata_file file_about_html[];
extern const struct fsdata_file file_control_html[];
extern const struct fsdata_file file_404_html[];


extern const struct fsdata_file file_media_html[];
extern const struct fsdata_file file_index_html[];
extern const struct fsdata_file file_stats_footer_plain[];
extern const struct fsdata_file file_stats_header_html[];
extern const struct fsdata_file file_tcp_footer_plain[];
extern const struct fsdata_file file_tcp_header_html[];


# 91 "httpd.c"
# 1 "cgi.h"



 





 

































 




typedef u8_t (* cgifunction)(u8_t next);




 
extern cgifunction cgitab[];

# 92 "httpd.c"



 









# 113 "httpd.c"

struct httpd_state *hs;




static void next_scriptline(void);
static void next_scriptstate(void);

# 136 "httpd.c"


 




 
 
void
httpd_init(void)
{
  fs_init();
  
   
  uip_listen(((((u16)((80) & 0xff)) << 8) | (((80) & 0xff00) >> 8)));
}
 
void
httpd_appcall(void)
{
  struct fs_file fsfile; 
  char temp=0; 

  u32 i;

  	if(temp_cgi ==1){			
		temp_cgi=66;};
  
  switch(uip_conn->lport) {
     
  case ((((u16)((80) & 0xff)) << 8) | (((80) & 0xff00) >> 8)):
     
    hs = (struct httpd_state *)(uip_conn->appstate);

    





 
    if((uip_flags & 64)) {
      




 
      hs->state = 0;
      hs->count = 0;
      return;

    } else if((uip_flags & 8)) {
      

 
      if(hs->count++ >= 10) {
	(uip_flags = 32);
      }
      return;
    } else if((uip_flags & 2) && hs->state == 0) {
      
 
      
       
      if(uip_appdata[0] != 0x47 ||
	 	 uip_appdata[1] != 0x45 ||
	 	 uip_appdata[2] != 0x54 ||
	 	 uip_appdata[3] != 0x20) {
	 
	(uip_flags = 32);
	return;
      }
	       
       
      for(i = 4; i < 40; ++i) {
		if(uip_appdata[i] == 0x20 ||
	   	   uip_appdata[i] == 0x0d ||
	   	   uip_appdata[i] == 0x0a) {
	  	   	uip_appdata[i] = 0;
	  		break;
		}
      }

      ;
      ;
      
       
      if(uip_appdata[4] == 0x2f &&
	 uip_appdata[5] == 0) {

	fs_open(file_index_html->name, &fsfile);    
 
      } else {
	if(!fs_open((const char *)&uip_appdata[4], &fsfile)) {
	  ;

  	  fs_open(file_404_html->name, &fsfile);

	}
      } 


      if(uip_appdata[4] == 0x2f &&
	 	 uip_appdata[5] == 0x63 &&
	 	 uip_appdata[6] == 0x67 &&
		 uip_appdata[7] == 0x69 &&
		 uip_appdata[8] == 0x2f) {
	
 	
	hs->script = fsfile.data;
	next_scriptstate();
	temp++;
      } else {  
	hs->script = (void *)0;
	

 
	hs->state = 1;

	
 
	hs->dataptr = fsfile.data;
	hs->count = fsfile.len;	
      }     
    }

    
    if(hs->state != 3) {
      


 
   if((uip_flags & 1)) {
	if(hs->count >= uip_conn->len) {
	  hs->count -= uip_conn->len;
	  hs->dataptr += uip_conn->len;
	} else {
	  hs->count = 0;
	}
	
	if(hs->count == 0) {
	  if(hs->script != (void *)0) {
	    next_scriptline();
	    next_scriptstate();
	  } else { (uip_flags = 16); }
	}
      }         
    } else {
       
      if(cgitab[hs->script[2] - 0x61]((uip_flags & 1))) {
	
 
	next_scriptline();
	next_scriptstate();
      }
    }

    if(hs->state != 3 && !(uip_flags & 8)) {
      
  
  	  do { uip_sappdata = ((volatile u8_t *)hs->dataptr); uip_slen = (hs->count);} while(0);
    }

    
 
   return;

  default:
     
    (uip_flags = 32);
    break;
  }  
}
 


 
static void
next_scriptline(void)
{
   
  do {
    ++(hs->script);
  } while(hs->script[0] != 0x0a);

   
  ++(hs->script);
}
 



 
static void
next_scriptstate(void)
{
  struct fs_file fsfile;
  u8_t i;
 again:
  switch(hs->script[0]) {
  case 0x74:
     
    hs->state = 2;
    hs->dataptr = &hs->script[2];

     
    for(i = 0; hs->dataptr[i] != 0x0a; ++i);
    hs->count = i;    
    break;
  case 0x63:
     
    hs->state = 3;
    hs->dataptr = (void *)0;
    hs->count = 0;
    cgitab[hs->script[2] - 0x61](0);
    break;
  case 0x69:   
     
    hs->state = 1;
    if(!fs_open(&hs->script[2], &fsfile)) {
      (uip_flags = 32);
    }
    hs->dataptr = fsfile.data;
    hs->count = fsfile.len;
    break;
  case 0x23:
     
    next_scriptline();
    goto again;

  case 0x2e:
     
    hs->state = 4;
    (uip_flags = 16);
    break;
  default:
    (uip_flags = 32);
    break;
  }
}
 
 
 

⌨️ 快捷键说明

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