[BACK]Return to oxcgi.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / plugin

Diff for /OpenXM/src/kan96xx/plugin/oxcgi.c between version 1.4 and 1.9

version 1.4, 2004/09/27 11:18:23 version 1.9, 2005/06/16 05:07:24
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/plugin/oxcgi.c,v 1.3 2004/09/27 01:20:46 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/plugin/oxcgi.c,v 1.8 2005/02/27 05:28:06 takayama Exp $ */
 #include <stdio.h>  #include <stdio.h>
 #include "datatype.h"  #include "datatype.h"
 #include "stackm.h"  #include "stackm.h"
Line 28  struct object cgiUrlEncodingToKeyValuePair(char *s) {
Line 28  struct object cgiUrlEncodingToKeyValuePair(char *s) {
   int vstart,vend; /* start of value, end of value */    int vstart,vend; /* start of value, end of value */
   int state;    int state;
   int nOfPairs;    int nOfPairs;
   struct object rob;    struct object rob = OINIT;
   struct object ob;    struct object ob = OINIT;
   int k;    int k;
   n = strlen(s); start = -1;    n = strlen(s); start = -1;
   for (i=0; i<n; i++) {    for (i=0; i<n; i++) {
     if (s[i] == '?') { start=i+1; break;}      if (s[i] == '?') { start=i+1; break;}
   }    }
   if (start == -1) start=0;    if (start == -1) {
       start = 0;
       for (i=0; i<n; i++) {
         if (s[i] > ' ') { start = i; break; }
       }
     }
   for (k=0; k<2; k++) {    for (k=0; k<2; k++) {
     /* k==0 path one. Count nOfPairs. */      /* k==0 path one. Count nOfPairs. */
     /* k==1 path two. generate array. */      /* k==1 path two. generate array. */
Line 175  struct object urlEncodedStringToObj(char *s,int vstart
Line 180  struct object urlEncodedStringToObj(char *s,int vstart
         [ not implemented yet. ]          [ not implemented yet. ]
       */        */
 {  {
   struct object rob;    struct object rob = OINIT;
   char *ts;    char *ts;
   char *ts2;    char *ts2;
   int i,j;    int i,j;
Line 236  static test1() {
Line 241  static test1() {
 }  }
 static test2() {  static test2() {
   char s[1000];    char s[1000];
   struct object ob;    struct object ob = OINIT;
   ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=asdfsdf&foo=asdfasdf");    ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=asdfsdf&foo=asdfasdf");
   printObject(ob,1,stdout);    printObject(ob,1,stdout);
   ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=&foo=asdfasdf&hoge=A%41+%42%62y%21");    ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=&foo=asdfasdf&hoge=A%41+%42%62y%21");
Line 248  static test2() {
Line 253  static test2() {
   
 static test4() {  static test4() {
   char s[1000];    char s[1000];
   struct object ob;    struct object ob = OINIT;
   char *ts;    char *ts;
   int size;    int size;
   ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=&foo=asdfasdf&hoge=A%41+%42%62y%21");    ob=cgiUrlEncodingToKeyValuePair("http://hoge.hoge?name=1231232&hoge=&foo=asdfasdf&hoge=A%41+%42%62y%21");
Line 278  char *cgiKeyValuePairToUrlEncoding(struct object ob) {
Line 283  char *cgiKeyValuePairToUrlEncoding(struct object ob) {
 }  }
 int checkKeyValuePairFormat(struct object ob,char *msg) {  int checkKeyValuePairFormat(struct object ob,char *msg) {
   int i,n;    int i,n;
   struct object eob,eob0,eob1;    struct object eob = OINIT;
     struct object eob0 = OINIT;
     struct object eob1 = OINIT;
   static char *fmt = NULL;    static char *fmt = NULL;
   int size;    int size;
   char *ss;    char *ss;
Line 304  int checkKeyValuePairFormat(struct object ob,char *msg
Line 311  int checkKeyValuePairFormat(struct object ob,char *msg
   
 int cgiKeyValuePairToUrlEncodingFile2(struct object ob,FILE2 *fp) {  int cgiKeyValuePairToUrlEncodingFile2(struct object ob,FILE2 *fp) {
   int n,i;    int n,i;
   struct object eob,eob0,eob1;    struct object eob = OINIT;
     struct object eob0 = OINIT;
     struct object eob1 = OINIT;
   char *key, *s;    char *key, *s;
   checkKeyValuePairFormat(ob,"cgiKeyValuePairToUrlEncodingFile2");    checkKeyValuePairFormat(ob,"cgiKeyValuePairToUrlEncodingFile2");
   n = getoaSize(ob);    n = getoaSize(ob);
Line 312  int cgiKeyValuePairToUrlEncodingFile2(struct object ob
Line 321  int cgiKeyValuePairToUrlEncodingFile2(struct object ob
     eob = getoa(ob,i);      eob = getoa(ob,i);
     eob0 = getoa(eob,0); eob1 = getoa(eob,1);      eob0 = getoa(eob,0); eob1 = getoa(eob,1);
     key = KopString(eob0);      key = KopString(eob0);
     if (i == 0) {      if ((i == 0) && (strcmp(key,"URL")==0)) {
       if (strcmp(key,"URL") != 0) warningKan("Key word should be URL.\n");  
       if (eob1.tag != Sdollar) errorKan1("%s\n","URL value must be a string.");        if (eob1.tag != Sdollar) errorKan1("%s\n","URL value must be a string.");
       fp2fputs(KopString(eob1),fp);        fp2fputs(KopString(eob1),fp);
       if ( n > 1 ) fp2fputc('?',fp);        if ( n > 1 ) fp2fputc('?',fp);
Line 336  int cgiKeyValuePairToUrlEncodingFile2(struct object ob
Line 344  int cgiKeyValuePairToUrlEncodingFile2(struct object ob
   
 static struct object rStringToObj(char *s,int vstart,int vend,int mode) {  static struct object rStringToObj(char *s,int vstart,int vend,int mode) {
   /* mode has not yet been used. */    /* mode has not yet been used. */
   struct object rob;    struct object rob = OINIT;
   char *sss; int i;    char *sss; int i;
   int bytearray;    int bytearray;
   bytearray=0;    bytearray=0;
Line 368  struct object cgiHttpToKeyValuePair(char *s,int size) 
Line 376  struct object cgiHttpToKeyValuePair(char *s,int size) 
   int ssize,i,j,k;    int ssize,i,j,k;
   int nOfPairs, startbody,state, kstart,kend,vstart, vend,startline,endline;    int nOfPairs, startbody,state, kstart,kend,vstart, vend,startline,endline;
   int nextstart,path;    int nextstart,path;
   struct object rob,ob;    struct object rob = OINIT;
     struct object ob = OINIT;
   ssize = strlen(s);    ssize = strlen(s);
   nOfPairs = 0; startbody = -1;    nOfPairs = 0; startbody = -1;
   /* state==0 :  readline and set startline and endline; state = 1;    /* state==0 :  readline and set startline and endline; state = 1;
Line 451  char *cgiKeyValuePairToHttp(struct object ob,int *size
Line 460  char *cgiKeyValuePairToHttp(struct object ob,int *size
   
 int cgiKeyValuePairToHttpFile2(struct object ob,FILE2 *fp) {  int cgiKeyValuePairToHttpFile2(struct object ob,FILE2 *fp) {
   int n,i;    int n,i;
   struct object eob,eob0,eob1;    struct object eob = OINIT;
     struct object eob0 = OINIT;
     struct object eob1 = OINIT;
   char *key, *s;    char *key, *s;
   checkKeyValuePairFormat(ob,"cgiKeyValuePairToHttpFile2");    checkKeyValuePairFormat(ob,"cgiKeyValuePairToHttpFile2");
   n = getoaSize(ob);    n = getoaSize(ob);
Line 487  int cgiKeyValuePairToHttpFile2(struct object ob,FILE2 
Line 498  int cgiKeyValuePairToHttpFile2(struct object ob,FILE2 
   
 static test3() {  static test3() {
   char *s;    char *s;
   struct object ob;    struct object ob = OINIT;
   s = "Pragma: no-cache\nContent-Length:  2915\nContent-Type: text/html\nConnection: close\n\n                <DIV class=Section1> \n    <P class=MsoNormal \n   style=\"mso-list: none; mso-list-ins: \" 19991102T2025\">&nbsp;\n      </P> ";    s = "Pragma: no-cache\nContent-Length:  2915\nContent-Type: text/html\nConnection: close\n\n                <DIV class=Section1> \n    <P class=MsoNormal \n   style=\"mso-list: none; mso-list-ins: \" 19991102T2025\">&nbsp;\n      </P> ";
   
   ob=cgiHttpToKeyValuePair(s,strlen(s));    ob=cgiHttpToKeyValuePair(s,strlen(s));
Line 548  struct object KooUrlEncodedStringToObj(struct object s
Line 559  struct object KooUrlEncodedStringToObj(struct object s
     n = getByteArraySize(sob);      n = getByteArraySize(sob);
   }else errorKan1("%s\n","KooUrlEncodedStringToObj: argument must be a string.");    }else errorKan1("%s\n","KooUrlEncodedStringToObj: argument must be a string.");
   return urlEncodedStringToObj(s,0,n-1,0);    return urlEncodedStringToObj(s,0,n-1,0);
   }
   
   static struct object toTokens(char *s,int *sep,int nsep) {
     /* s is the input, and sep are the separators. */
     /* -1 means <=' ' are separators */
     int nOfTokens,n,i,done,k,start,sav;
     struct object rob = OINIT;
     char *t;
   
     rob = NullObject;
     if (nsep < 1) return rob;
     if (sep[0] != -1) {
           fprintf(stderr,"cgiToTokens: Not implemeted for this separator.\n");
           return rob;
     }
   
     /* Count the number of tokens */
     n = strlen(s); i = 0; nOfTokens=0;
     while (i < n) {
           done = 0;
           while (s[i] <= ' ') {
             i++; if (i >= n) { done=1; break;}
           }
           if (done==1) break;
           nOfTokens++;
           while (s[i] > ' ') {
             i++; if (i >= n) { done=1; break; }
           }
           if (done == 1) break;
     }
   
     rob = newObjectArray(nOfTokens);
     n = strlen(s); i = 0; k = 0;
     while (i < n) {
           done = 0;
           while (s[i] <= ' ') {
             i++; if (i >= n) { done=1; break;}
           }
           if (done==1) break;
           start = i;
           while (s[i] > ' ') {
             i++; if (i >= n) { done=1; break; }
           }
           t = (char *) GC_malloc(i-start+1);
           if (t == NULL) { fprintf(stderr,"No more memory.\n"); exit(10); }
           t[i-start] = 0;
       strncpy(t,&(s[start]),i-start);
           putoa(rob,k,KpoString(t));
           k++;
           if (done == 1) break;
     }
   
     return rob;
   }
   
   struct object KooToTokens(struct object ob,struct object sep) {
     char *s;
     int n;
     int tmp[1];
     tmp[0] = -1;
     if (ob.tag == Sdollar) {
       s = KopString(ob);
       n = strlen((char *)s);
     }else errorKan1("%s\n","KooToTokens: the first argument must be a string.");
     if (sep.tag == Sarray) {
           if (getoaSize(sep) != 0) {
             errorKan1("%s\n","This separators have not been implemented.");
           }
     }else errorKan1("%s\n","KooToTokens: the second argument(separators) must be an array.");
     return toTokens(s,tmp,1);
 }  }

Legend:
Removed from v.1.4  
changed lines
  Added in v.1.9

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>