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

📄 cgilib.c

📁 一个uclinux下进行网络数据处理,及串口读取,CGI配置
💻 C
字号:
#include "cgilib.h"int strpos(char *str,char *substr){  if (strstr(str,substr)==NULL)    return 0;  else    return (strlen(str)-strlen(strstr(str,substr))+1);}char *strdel(char *str,int index,int count){  int i=0;  while (str[index-1+count+i]!='\0')  {    str[index-1+i]=str[index-1+count+i];    i++;  }  str[index-1+i]='\0';  return str;}void translate(char *sourcestr){  int i=0;  int j=0;  char *tmpstr;  char tmpchar1,tmpchar2;  tmpstr=(char *)malloc(sizeof(char)*strlen(sourcestr)+1);  while(sourcestr[j])  {    if ((tmpstr[i]=sourcestr[j])=='%')    {       if (sourcestr[j+1]>='A')          tmpchar1=((sourcestr[j+1] & 0xdf)-'A')+10;       else          tmpchar1=(sourcestr[j+1]-'0');       if (sourcestr[j+2]>='A')          tmpchar2=((sourcestr[j+2] & 0xdf)-'A')+10;       else          tmpchar2=(sourcestr[j+2]-'0');       tmpstr[i]=tmpchar1*16+tmpchar2;       j=j+2;    }    i++;    j++;  }  tmpstr[i]='\0';  strcpy(sourcestr,tmpstr);}void html_message(char *headtitle,char *bodytitle){  printf("Content-type:text/html\n\n");  printf("<HTML>\n");  printf("<HEAD>\n");  printf("<TITLE>%s</TITLE>\n",headtitle);  printf("</HEAD>\n");  printf("<BODY><CENTER>\n");  printf("<H1>%s</H1>\n",bodytitle);  printf("</CENTER><BR>\n");  printf("</BODY>\n");  printf("</HTML>\n");}int get_CGI_request(htmlinput_struct htmlinputs[]){  int i,j;  int length;  char method[10], *inputstring, *tmpstr;  int htmlinputcount=0;  strcpy(method,getenv("REQUEST_METHOD"));  if (!strcmp(method,"POST"))  {     length=atoi(getenv("CONTENT_LENGTH"));     if (length!=0)     {        inputstring=(char *)malloc(sizeof(char)*length+1);        fread(inputstring,sizeof(char),length,stdin);     }  }  else if(!strcmp(method,"GET"))  {    strcpy(inputstring,getenv("QUERY_STRING"));    length=strlen(inputstring);  }  if (length==0)    return 0;  j=0;  tmpstr=(char *)malloc(sizeof(char)*length+1);  for(i=0;i<length;i++)  {     if (inputstring[i]=='=')     {       tmpstr[j]='\0';       translate(tmpstr);       strcpy(htmlinputs[htmlinputcount].name,tmpstr);       if (i==length-1)       {          strcpy(htmlinputs[htmlinputcount].value,"");          htmlinputcount++;       }       j=0;     }     else if ((inputstring[i]=='&')||(i==length-1))     {        if (i==length-1)        {            tmpstr[j]=inputstring[i];            j++;        }        tmpstr[j]='\0';        translate(tmpstr);        strcpy(htmlinputs[htmlinputcount].value,tmpstr);        htmlinputcount++;        j=0;     }     else if(inputstring[i]=='+')     {       tmpstr[j]=' ';       j++;     }     else     {       tmpstr[j]=inputstring[i];       j++;     }  }  return (htmlinputcount);}void write_comm_to_file(char *commfile,commparam_struct commparam){  FILE *fp;  //open file  if ((fp=fopen(commfile,"w+"))==NULL)  {    html_message("error","cannot open the parameters file.");    exit(1);  }  //print the string to file  fprintf(fp,"serverip:%s\n",commparam.serverip);  fprintf(fp,"serverport:%s\n",commparam.serverport);  fprintf(fp,"baudrate:%s\n",commparam.baudrate);  fprintf(fp,"parity:%s\n",commparam.parity);  fprintf(fp,"databits:%s\n",commparam.databits);  fprintf(fp,"stopbits:%s\n",commparam.stopbits);  fprintf(fp,"handshaking:%s\n",commparam.handshaking);  //close file  fclose(fp);}void write_ip_to_file(char *ipfile,char *localip,char *netmask){  FILE *fp;  char routeaddr[20],tmp[20],tmp1[20];  int iplen,tmplen;  //open file  if ((fp=fopen(ipfile,"w+"))==NULL)  {    html_message("error","cannot open the parameters file.");    exit(1);  }  //get the routeaddr  iplen=strlen(localip);  strcpy(tmp,localip);  if (strcmp("255.255.255.0",netmask)==0)  {	  tmplen=strlen(strrchr(localip,'.'));	  strdel(tmp,iplen-tmplen+1,tmplen);	  strcat(tmp,".0");  }  if (strcmp("255.255.0.0",netmask)==0)  {	  tmplen=strlen(strrchr(localip,'.'));	  strdel(tmp,iplen-tmplen+1,tmplen);	  strcpy(tmp1,tmp);	  iplen=strlen(tmp1);	  tmplen=strlen(strrchr(tmp1,'.'));	  strdel(tmp1,iplen-tmplen+1,tmplen);	  strcat(tmp1,".0.0");	  strcpy(tmp,tmp1);  }  if (strcmp("255.0.0.0",netmask)==0)  {	  tmplen=strlen(strchr(localip,'.'));	  strdel(tmp,iplen-tmplen+1,tmplen);	  strcat(tmp,".0.0.0");  }  strcpy(routeaddr,tmp);  //print the string to file  fprintf(fp,"ifconfig eth0 %s netmask %s\n",localip,netmask);  fprintf(fp,"route add -net %s eth0\n",routeaddr);  fprintf(fp,"/bin/IBMSGateway&\n");  //close file  fclose(fp);  }int erase_sector(unsigned long flash_addr){    *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa;    *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555;    *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0x8080;    *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa;    *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555;    *(volatile unsigned short *)(flash_addr)=0x3030;    printf("flash secter erased!\n");}int write_word(unsigned long flash_addr,unsigned short value){    unsigned short temp_w;    unsigned long i;    //value = strtoul(input_argv3,end,16);    *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xaaaa;    *(volatile unsigned short *)(flash_addr&0xfffff000|0x554)=0x5555;    *(volatile unsigned short *)(flash_addr&0xfffff000|0xaaa)=0xa0a0;    *(volatile unsigned short *)(flash_addr)=value;    temp_w=*(volatile unsigned short *)flash_addr;    i=0;    while(temp_w != value){        temp_w=*(volatile unsigned short *)flash_addr;        i++;        if(i==0xfff){            printf("err :%08X ",flash_addr);            printf("write = %04X ",value);            printf("read = %04X \n",temp_w);            return 1;        }    }    return 0;}////////////////////////////////////////////////////////////////////////////////file operation(flat FS)long int getfilelength(char *filename){    FILE *fp;    long int i;    int j;    fp=fopen(filename,"r");    fseek(fp,0L,2);    i=ftell(fp);    j=fclose(fp);    return(i);}/////////////////////////////////////////////////////////////////////////////HEAD:filename(32bytes)+filelength(4bytes)+filecontents(filelength)///////////////////////////////////////////////////////////////////////////int write_file_to_flash(char * filename,unsigned long addr){    FILE *fp;    unsigned long i,j,len;    unsigned short value_w,temp_w;    unsigned char *p;    char fname[32];    bzero(fname,32);    strncpy(fname,filename,32);    p=(unsigned char *)&len;    //////////////////////////////////////////////////////////////////////////    //write filename    for(i=0;i<32;i+=2){        value_w=*(unsigned short *)(fname+i);        if(write_word(addr,value_w)!=0)            return 2;        addr+=2;    }    //////////////////////////////////////////////////////////////////////////    //write file length    len=getfilelength(filename);    printf("filelength=0x%08X\n",len);    value_w=*(unsigned short *)p;    if(write_word(addr,value_w)!=0)        return 2;    addr+=2;    value_w=*(unsigned short *)(p+2);    if(write_word(addr,value_w)!=0)        return 2;    addr+=2;    //////////////////////////////////////////////////////////////////////////    fp=fopen(filename,"r");    if(fp==NULL){        printf("open file error");        return 1;    }    for(;;){        j=fread(&value_w,sizeof(unsigned short),1,fp);        //value_w = exchangew(value_w);        if(j!=1){            if(ferror(fp) != 0)                printf("over or wrong\n");            else                printf("File write successfully!\n");            break;        }        if(write_word(addr,value_w)!=0)            return 2;        addr+=2;    }    if (len%2==1)    {       value_w=0x0AFF;       if (write_word(addr,value_w)!=0) return 2;    }    fclose(fp);    return 0;}

⌨️ 快捷键说明

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