Changeset 301 for branches/branch-1.2/zoo-kernel/zoo_loader.c
- Timestamp:
- Aug 5, 2011, 3:02:43 PM (13 years ago)
- Location:
- branches/branch-1.2
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/branch-1.2
-
branches/branch-1.2/zoo-kernel/zoo_loader.c
r217 r301 48 48 } 49 49 50 #include "service_internal.h" 51 50 52 xmlXPathObjectPtr extractFromDoc(xmlDocPtr,const char*); 51 53 int runRequest(map*); 52 54 53 55 using namespace std; 54 55 /* ************************************************************************* */56 57 int errorException(maps *m, const char *message, const char *errorcode)58 {59 map* errormap = createMap("text", message);60 addToMap(errormap,"code", errorcode);61 printExceptionReportResponse(m,errormap);62 freeMap(&errormap);63 free(errormap);64 return -1;65 }66 67 /* ************************************************************************* */68 69 56 70 57 #define TRUE 1 … … 85 72 #ifdef DEBUG 86 73 fprintf (stderr, "Addr:%s\n", cgiRemoteAddr); 87 fprintf (stderr, "RequestMethod: %s\n", cgiRequestMethod);74 fprintf (stderr, "RequestMethod: (%s) %d %d\n", cgiRequestMethod,strncasecmp(cgiRequestMethod,"post",4),strncmp(cgiContentType,"text/xml",8)==0 || strncasecmp(cgiRequestMethod,"post",4)==0); 88 75 fprintf (stderr, "Request: %s\n", cgiQueryString); 89 76 #endif … … 93 80 if(strncmp(cgiContentType,"text/xml",8)==0 || 94 81 strncasecmp(cgiRequestMethod,"post",4)==0){ 95 char *buffer=new char[cgiContentLength+1]; 96 if(fread(buffer,1,cgiContentLength,cgiIn)){ 97 buffer[cgiContentLength]=0; 98 tmpMap=createMap("request",buffer); 82 if(cgiContentLength==NULL){ 83 cgiContentLength=0; 84 char *buffer=new char[2]; 85 char *res=NULL; 86 int r=0; 87 while(r=fread(buffer,sizeof(char),1,cgiIn)){ 88 cgiContentLength+=r; 89 if(res==NULL){ 90 res=(char*)malloc(1*sizeof(char)); 91 sprintf(res,"%s",buffer); 92 } 93 else{ 94 res=(char*)realloc(res,(cgiContentLength+1)*sizeof(char)); 95 char *tmp=strdup(res); 96 sprintf(res,"%s%s",tmp,buffer); 97 free(tmp); 98 } 99 } 100 if(res==NULL){ 101 return errorException(NULL,"ZOO-Kernel failed to process your request cause the request was emtpty.","InternalError"); 102 }else 103 tmpMap=createMap("request",res); 99 104 }else{ 100 char **array, **arrayStep; 101 if (cgiFormEntries(&array) != cgiFormSuccess) { 102 return 1; 103 } 104 arrayStep = array; 105 while (*arrayStep) { 106 char *value=new char[cgiContentLength]; 107 cgiFormStringNoNewlines(*arrayStep, value, cgiContentLength); 108 char* tmpValueFinal=(char*) malloc((strlen(*arrayStep)+strlen(value)+1)*sizeof(char)); 109 sprintf(tmpValueFinal,"%s=%s",*arrayStep,value); 110 tmpMap=createMap("request",tmpValueFinal); 111 free(tmpValueFinal); 112 #ifdef DEBUG 113 fprintf(stderr,"(( \n %s \n %s \n ))",*arrayStep,value); 114 #endif 115 delete[]value; 116 arrayStep++; 117 } 118 } 119 delete[]buffer; 105 char *buffer=new char[cgiContentLength+1]; 106 if(fread(buffer,sizeof(char),cgiContentLength,cgiIn)){ 107 buffer[cgiContentLength]=0; 108 tmpMap=createMap("request",buffer); 109 }else{ 110 buffer[0]=0; 111 char **array, **arrayStep; 112 if (cgiFormEntries(&array) != cgiFormSuccess) { 113 return 1; 114 } 115 arrayStep = array; 116 while (*arrayStep) { 117 char *ivalue=new char[cgiContentLength]; 118 cgiFormStringNoNewlines(*arrayStep, ivalue, cgiContentLength); 119 char* tmpValueFinal=(char*) malloc((strlen(*arrayStep)+strlen(ivalue)+1)*sizeof(char)); 120 sprintf(tmpValueFinal,"%s=%s",*arrayStep,ivalue); 121 if(strlen(buffer)==0){ 122 sprintf(buffer,"%s",tmpValueFinal); 123 }else{ 124 char *tmp=strdup(buffer); 125 sprintf(buffer,"%s&%s",tmp,tmpValueFinal); 126 free(tmp); 127 } 128 129 sprintf(tmpValueFinal,"%s=%s",*arrayStep,ivalue); 130 free(tmpValueFinal); 131 #ifdef DEBUG 132 fprintf(stderr,"(( \n %s \n %s \n ))",*arrayStep,ivalue); 133 #endif 134 delete[]ivalue; 135 arrayStep++; 136 } 137 tmpMap=createMap("request",buffer); 138 } 139 delete[]buffer; 140 } 120 141 } 121 142 else{ … … 162 183 xmlInitParser(); 163 184 xmlDocPtr doc = xmlParseMemory(t1->value,cgiContentLength); 185 186 187 { 188 xmlXPathObjectPtr reqptr=extractFromDoc(doc,"/*[local-name()='Envelope']/*[local-name()='Body']/*"); 189 if(reqptr!=NULL){ 190 xmlNodeSet* req=reqptr->nodesetval; 191 if(req!=NULL && req->nodeNr==1){ 192 addToMap(tmpMap,"soap","true"); 193 int k=0; 194 for(k;k < req->nodeNr;k++){ 195 xmlNsPtr ns=xmlNewNs(req->nodeTab[k],BAD_CAST "http://www.w3.org/2001/XMLSchema-instance",BAD_CAST "xsi"); 196 xmlDocSetRootElement(doc, req->nodeTab[k]); 197 xmlChar *xmlbuff; 198 int buffersize; 199 xmlDocDumpFormatMemoryEnc(doc, &xmlbuff, &buffersize, "utf-8", 1); 200 addToMap(tmpMap,"xrequest",(char*)xmlbuff); 201 char *tmp=(char*)xmlbuff; 202 fprintf(stderr,"%s\n",tmp); 203 xmlFree(xmlbuff); 204 } 205 } 206 } 207 } 208 164 209 xmlNodePtr cur = xmlDocGetRootElement(doc); 165 210 char *tval; … … 172 217 if(tval!=NULL) 173 218 addToMap(tmpMap,"language",tval); 174 175 const char* requests[3]; 176 requests[0]="GetCapabilities"; 177 requests[1]="DescribeProcess"; 178 requests[2]="Execute"; 219 const char* requests[3]={"GetCapabilities","DescribeProcess","Execute"}; 179 220 for(int j=0;j<3;j++){ 180 char tt[ 35];221 char tt[128]; 181 222 sprintf(tt,"/*[local-name()='%s']",requests[j]); 182 223 xmlXPathObjectPtr reqptr=extractFromDoc(doc,tt);
Note: See TracChangeset
for help on using the changeset viewer.