?? symbol2.c
字號(hào):
fprintf(fheader, "\n\nSOAP_FMAC1 int SOAP_FMAC2 %s(struct soap*",param->sym->name); for(t=output;t!=(Table*) 0;t=t->prev) { for (pin = t->list; pin != (Entry*) 0; pin = pin->next) { if (pin->info.typ->type == Treference) { sprintf(errbuf, "Cannot pass input argument \"%s\" of remote method function \"%s\" by reference: use pointer", pin->sym->name, param->sym->name); semerror(errbuf); } fprintf(fheader,", %s%s",c_storage(pin->info.sto), c_type(pin->info.typ)); } } if (is_transient(pout->info.typ)) fprintf(fheader,");"); else fprintf(fheader,", %s%s);", c_storage(pout->info.sto), c_type(pout->info.typ));}voidgenerate_call(Table *table, Entry *param){ Service *sp; Entry *pin,*q,*pout,*response=NULL; Tnode *temp; Table *output,*t; int cardinality, element_width, i, flag = 0; q=entry(table, param->sym); if (q) pout = (Entry*)q->info.typ->ref; else fprintf(stderr, "Internal error: no table entry\n"); q=entry(classtable, param->sym); output=(Table*) q->info.typ->ref; if (!is_response(pout->info.typ)) { response = get_response(param->info.typ); } /* soapStub.h*/ if (is_transient(pout->info.typ)) { fprintf(fheader, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_send_%s(struct soap*, const char*, const char*",param->sym->name); fprintf(fclient, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_send_%s(struct soap *soap, const char *URL, const char *action",param->sym->name); } else { fprintf(fheader, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_call_%s(struct soap*, const char*, const char*",param->sym->name); fprintf(fclient, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_call_%s(struct soap *soap, const char *URL, const char *action",param->sym->name); } fflush(fheader); fflush(fclient); /* Parameters being passed */ for(t=output;t!=(Table*) 0;t=t->prev) { for (pin = t->list; pin != (Entry*) 0; pin = pin->next) { fprintf(fclient,", %s%s",c_storage(pin->info.sto), c_type_id(pin->info.typ,pin->sym->name)); fprintf(fheader,", %s%s",c_storage(pin->info.sto), c_type(pin->info.typ)); } } /* Return value */ fflush(fclient); if (!is_transient(pout->info.typ)) { fprintf(fclient, ", %s%s)\n{", c_storage(pout->info.sto), c_type_id(pout->info.typ, pout->sym->name)); fprintf(fheader,", %s%s);", c_storage(pout->info.sto), c_type(pout->info.typ)); } else { fprintf(fclient, ")\n{"); fprintf(fheader,");"); } fflush(fclient); fprintf(fclient,"\n\tstruct %s soap_tmp_%s;",param->sym->name,param->sym->name); if (!is_response(pout->info.typ) && response) { fprintf(fclient,"\n\tstruct %s *soap_tmp_%s;",c_ident(response->info.typ), c_ident(response->info.typ)); } for (sp = services; sp; sp = sp->next) if (has_ns_eq(sp->ns, param->sym->name)) if (sp->encoding && sp->URI) { flag = 1; fprintf(fclient, "\n\tconst char *soap_tmp_encodingStyle = soap->encodingStyle;"); fprintf(fclient, "\n\tconst char *soap_tmp_defaultNamespace = soap->defaultNamespace;"); fprintf(fclient, "\n\tint soap_tmp_disable_href = soap->disable_href;"); if (!strcmp(sp->encoding, "literal")) { fprintf(fclient, "\n\tsoap->encodingStyle = NULL;"); fprintf(fclient, "\n\tsoap->defaultNamespace = \"%s\";", sp->URI); } else { fprintf(fclient, "\n\tsoap->encodingStyle = \"%s\";", sp->encoding); fprintf(fclient, "\n\tsoap->defaultNamespace = \"%s\";", sp->URI); } fprintf(fclient, "\n\tsoap->disable_href = 1;"); break; } fflush(fclient); for(t=output;t!=(Table*) 0;t=t->prev) for (pin = t->list; pin != (Entry*) 0; pin = pin->next) { if(pin->info.typ->type==Tarray) { temp = pin->info.typ; cardinality = 0; while(temp->type == Tarray){ cardinality ++; temp = temp->ref; } element_width = temp->width; fprintf(fclient,"\n\tmemcpy(&(soap_tmp_%s.%s", param->sym->name,pin->sym->name); for(i=0;i<cardinality;i++){ fprintf(fclient,"[0]"); } fprintf(fclient,"), "); fprintf(fclient,"&(%s", pin->sym->name); for(i=0;i<cardinality;i++){ fprintf(fclient,"[0]"); } fprintf(fclient,"), %d*sizeof(%s));", (pin->info.typ->width)/(element_width), c_type(temp)); } else fprintf (fclient,"\n\tsoap_tmp_%s.%s=%s;", param->sym->name,pin->sym->name,pin->sym->name); } fprintf(fclient,"\n\tsoap_begin(soap);"); fprintf(fclient,"\n\tsoap_serializeheader(soap);"); fprintf(fclient,"\n\tsoap_serialize_%s(soap, &soap_tmp_%s);", param->sym->name,param->sym->name); fprintf(fclient,"\n\tif (!soap->disable_request_count)"); fprintf(fclient,"\n\t{\tsoap_begin_count(soap);"); fprintf(fclient,"\n\t\tsoap_envelope_begin_out(soap);"); fprintf(fclient,"\n\t\tsoap_putheader(soap);"); fprintf(fclient,"\n\t\tsoap_body_begin_out(soap);"); fprintf(fclient,"\n\t\tsoap_put_%s(soap, &soap_tmp_%s, \"%s\", \"\");", param->sym->name,param->sym->name, ns_convert(param->sym->name)); fprintf(fclient,"\n\t\tsoap_body_end_out(soap);"); fprintf(fclient,"\n\t\tsoap_envelope_end_out(soap);"); fprintf(fclient,"\n\t}"); fprintf(fclient,"\n\tsoap_begin_send(soap);"); fprintf(fclient,"\n\tif (soap_connect(soap, URL, action))\n\t{"); if (flag) { fprintf(fclient, "\n\tsoap->encodingStyle = soap_tmp_encodingStyle;"); fprintf(fclient, "\n\tsoap->defaultNamespace = soap_tmp_defaultNamespace;"); fprintf(fclient, "\n\tsoap->disable_href = soap_tmp_disable_href;"); } fprintf(fclient, "\n\t\treturn soap->error;"); fprintf(fclient, "\n\t}"); fprintf(fclient,"\n\tsoap_envelope_begin_out(soap);"); fprintf(fclient,"\n\tsoap_putheader(soap);"); fprintf(fclient,"\n\tsoap_body_begin_out(soap);"); fprintf(fclient,"\n\tsoap_put_%s(soap, &soap_tmp_%s, \"%s\", \"\");", param->sym->name,param->sym->name,ns_convert(param->sym->name)); fprintf(fclient,"\n\tsoap_body_end_out(soap);"); fprintf(fclient,"\n\tsoap_envelope_end_out(soap);"); fprintf(fclient,"\n\tsoap_putattachments(soap);"); fprintf(fclient,"\n\tsoap_end_send(soap);"); if (flag) { fprintf(fclient, "\n\tsoap->encodingStyle = soap_tmp_encodingStyle;"); fprintf(fclient, "\n\tsoap->defaultNamespace = soap_tmp_defaultNamespace;"); fprintf(fclient, "\n\tsoap->disable_href = soap_tmp_disable_href;"); } fflush(fclient); if (is_transient(pout->info.typ)) { fprintf(fclient, "\n\treturn soap->error;\n}"); fprintf(fheader, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_recv_%s(struct soap*, ",param->sym->name); fprintf(fclient, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_recv_%s(struct soap *soap, ",param->sym->name); fprintf(fheader,"struct %s*);\n",param->sym->name); fprintf(fclient,"struct %s *%s)\n{",param->sym->name,pout->sym->name); fprintf(fclient,"\n\tsoap_default_%s(soap, %s);", param->sym->name,pout->sym->name); fprintf(fclient,"\n\tsoap_begin(soap);"); } else if(pout->info.typ->type == Tarray) fprintf(fclient,"\n\tsoap_default_%s(soap, %s);", c_ident(pout->info.typ), pout->sym->name); else if (pout->info.typ->type == Treference && ((Tnode *) pout->info.typ->ref)->type == Tclass) fprintf(fclient,"\n\tif (&%s)\n\t\t%s.soap_default(soap);", pout->sym->name, pout->sym->name); else if( ((Tnode *) pout->info.typ->ref)->type == Tclass) fprintf(fclient,"\n\tif (%s)\n\t\t%s->soap_default(soap);", pout->sym->name, pout->sym->name); else if (pout->info.typ->type == Treference && is_XML(pout->info.typ->ref)) fprintf(fclient,"\n\t%s = NULL;", pout->sym->name); else if (pout->info.typ->type == Tpointer && is_XML(pout->info.typ->ref)) fprintf(fclient,"\n\t*%s = NULL;", pout->sym->name); else if (pout->info.typ->type == Treference) fprintf(fclient,"\n\tsoap_default_%s(soap, &%s);", c_ident((Tnode*)pout->info.typ->ref), pout->sym->name); else if (!is_void(pout->info.typ)) fprintf(fclient,"\n\tsoap_default_%s(soap, %s);", c_ident((Tnode*)pout->info.typ->ref), pout->sym->name); fflush(fclient); fprintf(fclient,"\n\tif (soap_begin_recv(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_envelope_begin_in(soap))"); fprintf(fclient,"\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_recv_header(soap))"); fprintf(fclient,"\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_body_begin_in(soap))"); fprintf(fclient,"\n\t\treturn soap->error;"); fflush(fclient); if (is_transient(pout->info.typ)) { fprintf(fclient,"\n\tsoap_get_%s(soap, %s, \"%s\", NULL);", param->sym->name, pout->sym->name, ns_convert(param->sym->name)); fprintf(fclient,"\n\tif (soap->error == SOAP_TAG_MISMATCH && soap->level == 2)\n\t\tsoap->error = SOAP_NO_METHOD;"); fprintf(fclient,"\n\tif (soap->error)"); fprintf(fclient,"\n\t\treturn soap->error;"); fprintf(fclient,"\n\t"); fprintf(fclient,"\n\tif (soap_body_end_in(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_envelope_end_in(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_getattachments(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tsoap_end_recv(soap);"); fprintf(fclient,"\n\treturn soap->error;\n}"); fflush(fclient); return; } if(pout->info.typ->type == Treference && ((Tnode *) pout->info.typ->ref)->type == Tclass && !is_dynamic_array(pout->info.typ->ref)) fprintf(fclient,"\n\tif (&%s)\n\t\t%s.soap_get(soap, \"%s\", \"%s\");\n\telse\n\t\tsoap_get_%s(soap, &%s, \"%s\", \"%s\");", pout->sym->name, pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ), c_ident(pout->info.typ->ref), pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ)); else if(pout->info.typ->type == Tpointer && ((Tnode *) pout->info.typ->ref)->type == Tclass && !is_dynamic_array(pout->info.typ->ref)) fprintf(fclient,"\n\tif (%s)\n\t\t%s->soap_get(soap, \"%s\", \"%s\");\n\telse\n\t\tsoap_get_%s(soap, %s, \"%s\", \"%s\");", pout->sym->name, pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ), c_ident(pout->info.typ->ref), pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ)); else if(pout->info.typ->type == Treference && ((Tnode *) pout->info.typ->ref)->type == Tstruct && !is_dynamic_array(pout->info.typ->ref)) fprintf(fclient,"\n\tsoap_get_%s(soap, &%s, \"%s\", \"%s\");", c_ident(pout->info.typ->ref), pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ)); else if(pout->info.typ->type == Tpointer && ((Tnode *) pout->info.typ->ref)->type == Tstruct && !is_dynamic_array(pout->info.typ->ref)) fprintf(fclient,"\n\tsoap_get_%s(soap, %s, \"%s\", \"%s\");", c_ident(pout->info.typ->ref), pout->sym->name, xml_tag(pout->info.typ), xsi_type(pout->info.typ)); else { fprintf(fclient,"\n\tsoap_tmp_%s = soap_get_%s(soap, NULL, \"%s\", \"%s\");", c_ident(response->info.typ), c_ident(response->info.typ), xml_tag(response->info.typ), xsi_type(response->info.typ)); fflush(fclient); } fflush(fclient); fprintf(fclient,"\n\tif (soap->error){"); { fprintf(fclient,"\n\t\tif (soap->error == SOAP_TAG_MISMATCH && soap->level == 2)\n\t\t\tsoap_recv_fault(soap);"); } fprintf(fclient,"\n\t\treturn soap->error;"); fprintf(fclient,"\n\t}"); fprintf(fclient,"\n\tif (soap_body_end_in(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_envelope_end_in(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tif (soap_getattachments(soap))\n\t\treturn soap->error;"); fprintf(fclient,"\n\tsoap_closesock(soap);"); fprintf(fclient,"\n\tsoap_end_recv(soap);"); if (!is_response(pout->info.typ)) { if (pout->info.typ->type == Tarray) { temp = pout->info.typ; cardinality = 0; while(temp->type == Tarray){ cardinality ++; temp = temp->ref; } element_width = temp->width; fprintf(fclient,"\n\tmemcpy(&(%s", pout->sym->name); for(i=0;i<cardinality;i++){ fprintf(fclient,"[0]"); } fprintf(fclient,"), "); fprintf(fclient,"&(soap_tmp_%s->%s", c_ident(response->info.typ), pout->sym->name); for(i=0;i<cardinality;i++){ fprintf(fclient,"[0]"); } fprintf(fclient,"), %d*sizeof(%s));", (pout->info.typ->width)/(element_width), c_type(temp)); } else if (pout->info.typ->type == Treference) fprintf(fclient,"\n\t%s = soap_tmp_%s->%s;", pout->sym->name, c_ident(response->info.typ), pout->sym->name); else { fprintf(fclient,"\n\tif (soap_tmp_%s->%s)", c_ident(response->info.typ), pout->sym->name); fprintf(fclient,"\n\t\t*%s = *soap_tmp_%s->%s;", pout->sym->name, c_ident(response->info.typ), pout->sym->name); } } fprintf(fclient,"\n\treturn soap->error;"); fprintf(fclient ,"\n}");}voidgenerate_server(Table *table, Entry *param){ Service *sp; int flag = 0; Entry *q,*pin, *pout, *response; Table *t, *input; q=entry(table, param->sym); if (q) pout = (Entry*)q->info.typ->ref; else fprintf(stderr, "Internal error: no table entry"); if (!is_response(pout->info.typ)) response = get_response(param->info.typ); fprintf(fheader, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_serve_%s(struct soap*);",param->sym->name); fprintf(fserver, "\n\nSOAP_FMAC1 int SOAP_FMAC2 soap_serve_%s(struct soap *soap)",param->sym->name); fprintf(fserver, "\n{\tstruct %s soap_tmp_%s;", param->sym->name, param->sym->name); if (!is_transient(pout->info.typ)) for (sp = services; sp; sp = sp->next) if (has_ns_eq(sp->ns, param->sym->name)) if (sp->encoding && sp->URI) { flag = 1; fprintf(fserver, "\n\tconst char *soap_tmp_encodingStyle = soap->encodingStyle;"); fprintf(fserver, "\n\tconst char *soap_tmp_defaultNamespace = soap->defaultNamespace;"); fprintf(fserver, "\n\tshort soap_tmp_disable_href = soap->disable_href;"); break; } fflush(fserver); if (is_transient(pout->info.typ)) ; else if(pout->info.typ->type == Tarray){ /* ARRAY */ fprintf(fserver,"\n\tstruct %s soap_tmp_%s;", c_ident(response->info.typ), c_ident(response->info.typ)); fprintf(fserver,"\n\tsoap_default_%s(soap, &soap_tmp_%s);", c_ident(response->info.typ),c_ident(response->info.typ)); }else if(((Tnode *)pout->info.typ->ref)->type == Tclass && !is_dynamic_array(pout->info.typ->ref)){
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -