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

📄 symbol2.c

📁 linux下开发的soap协议。建议大家学习学习!
💻 C
📖 第 1 页 / 共 5 页
字号:
  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)){

⌨️ 快捷键说明

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