From 88fa3e34a012efc29f7b21b11eb75185431f3536 Mon Sep 17 00:00:00 2001 From: snowdrop Date: Fri, 30 Jan 2004 16:38:49 +0000 Subject: initial import --- libcsoap/soap-fault.c | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 libcsoap/soap-fault.c (limited to 'libcsoap/soap-fault.c') diff --git a/libcsoap/soap-fault.c b/libcsoap/soap-fault.c new file mode 100644 index 0000000..30a972a --- /dev/null +++ b/libcsoap/soap-fault.c @@ -0,0 +1,120 @@ +/****************************************************************** + * $Id: soap-fault.c,v 1.1 2004/01/30 16:39:34 snowdrop Exp $ + * + * CSOAP Project: A SOAP client/server library in C + * Copyright (C) 2003 Ferhat Ayaz + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + * + * Email: ayaz@jprogrammer.net + ******************************************************************/ +#include +#include + + +static char *soap_env_ns = "http://schemas.xmlsoap.org/soap/envelope/"; +static char *soap_env_enc = "http://schemas.xmlsoap.org/soap/encoding/"; +static char *soap_xsi_ns = "http://www.w3.org/1999/XMLSchema-instance"; +static char *soap_xsd_ns = "http://www.w3.org/1999/XMLSchema"; + +/* + Parameters: + 1- soap_env_ns + 2- soap_env_enc + 3- xsi_ns + 4- xsd_ns + 5- faultcode + 6- faultstring + 7- faultactor + 8- detail + */ +#define _SOAP_FAULT_TEMPLATE_ \ + "" \ + " "\ + " "\ + " %s"\ + " %s"\ + " %s"\ + " %s"\ + " " \ + " "\ + "" + + + +static char *fault_vm = "VersionMismatch"; +static char *fault_mu = "MustUnderstand"; +static char *fault_client = "Client"; +static char *fault_server = "Server"; + +xmlDocPtr soap_fault_build(fault_code_t fcode, + const char *faultstring, + const char *faultactor, + const char *detail) +{ + + /* variables */ + char *faultcode; + int bufferlen = 200; + char *buffer; + xmlDocPtr fault; /* result */ + + switch (fcode) { + case Fault_VersionMismatch: + faultcode = fault_vm; + break; + case Fault_MustUnderstand: + faultcode = fault_mu; + break; + case Fault_Client: + faultcode = fault_client; + break; + case Fault_Server: + faultcode = fault_server; + break; + default: + faultcode = fault_client; + } + + /* calculate buffer length */ + if (faultstring) bufferlen += strlen(faultstring); + if (faultactor) bufferlen += strlen(faultactor); + if (detail) bufferlen += strlen(detail); + + buffer = (char*)malloc(bufferlen); + + sprintf(buffer, _SOAP_FAULT_TEMPLATE_, + soap_env_ns, soap_env_enc, soap_xsi_ns, + soap_xsd_ns, faultcode, + faultstring?faultstring:"error", + faultactor?faultactor:"", + detail?detail:""); + + fault = xmlParseDoc(buffer); + free(buffer); + + if (fault == NULL) { + log_error1("Can not create xml document!"); + + return soap_fault_build(fcode, "Can not create fault object in xml", + "soap_fault_build()", NULL); + } + + return fault; + +} -- cgit v1.1-32-gdbae