diff options
| author | 2006-11-23 13:20:46 +0000 | |
|---|---|---|
| committer | 2006-11-23 13:20:46 +0000 | |
| commit | 06906cd337028c9e42e10916d08db64e1e22d0f1 (patch) | |
| tree | a4b72062d6b93796db997bc08fd0c72669faac1e | |
| parent | c3fd98b25607d0f7f5977586d188f88ab226a9b8 (diff) | |
| download | csoap-06906cd337028c9e42e10916d08db64e1e22d0f1.tar.gz csoap-06906cd337028c9e42e10916d08db64e1e22d0f1.tar.bz2 | |
Automatic generation of a WSIL document
| -rw-r--r-- | libcsoap/soap-wsil.c | 141 | ||||
| -rw-r--r-- | libcsoap/soap-wsil.h | 49 | 
2 files changed, 190 insertions, 0 deletions
| diff --git a/libcsoap/soap-wsil.c b/libcsoap/soap-wsil.c new file mode 100644 index 0000000..ac4add8 --- /dev/null +++ b/libcsoap/soap-wsil.c @@ -0,0 +1,141 @@ +/****************************************************************** +*  $Id: soap-wsil.c,v 1.1 2006/11/23 13:20:46 m0gg 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 +******************************************************************/ +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef HAVE_STDIO_H +#include <stdio.h> +#endif + +#ifdef HAVE_STRING_H +#include <string.h> +#endif + +#include <libxml/tree.h> +#include <libxml/uri.h> + +#include <nanohttp/nanohttp-common.h> +#include <nanohttp/nanohttp-request.h> +#include <nanohttp/nanohttp-server.h> + +#include "soap-fault.h" +#include "soap-env.h" +#include "soap-ctx.h" +#include "soap-service.h" +#include "soap-router.h" +#include "soap-server.h" +#include "soap-wsil.h" + +static void +_soap_wsil_list_services(httpd_conn_t *conn, struct SoapRouter *router) +{ +  SoapServiceNode *node; + +  for (node=router->service_head; node; node=node->next) +  { +    http_output_stream_write_string(conn->out, +      "<service>" +        "<description " +          "referencedNamespace=\"http://schemas.xmlsoap.org/wsdl/\" " +	  "location=\""); +    http_output_stream_write_string(conn->out, soap_transport_get_name()); +    http_output_stream_write_string(conn->out, node->service->method); +    http_output_stream_write_string(conn->out, +          "\" />" +      "</service>\n"); +  } +  return; +} + +static void +_soap_wsil_list_routers(httpd_conn_t *conn) +{ +  SoapRouterNode *node; + +  for (node=soap_server_get_routers(); node; node=node->next) +    _soap_wsil_list_services(conn, node->router); + +  return; +} + +static void +_soap_wsil_handle_get(httpd_conn_t * conn, struct hrequest_t * req) +{ +  httpd_set_header(conn, HEADER_CONTENT_TYPE, "text/xml"); +  httpd_send_header(conn, 200, "OK"); + +  http_output_stream_write_string(conn->out, +    "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +    "<wsil:inspection xmlns:wsil=\"http://schemas.xmlsoap.org/ws/2001/10/inspection/\">" +  ); + +  _soap_wsil_list_routers(conn); + +  http_output_stream_write_string(conn->out, +    "</wsil:inspection>\n"); + +  return; +} + +static void +_soap_wsil_entry(httpd_conn_t * conn, struct hrequest_t * req) +{ +  if (req->method == HTTP_REQUEST_GET) +  { +    _soap_wsil_handle_get(conn, req); +  } +  else +  { +    httpd_send_header(conn, 200, "OK"); +    http_output_stream_write_string(conn->out, +      "<html>" +        "<head>" +        "</head>" +        "<body>" +          "<h1>Sorry!</h1>" +          "<hr />" +          "<div>POST Service is not implemented now. Use your browser</div>" +        "</body>" +      "</html>"); +  } +  return; +} + +herror_t +soap_wsil_init_args(int argc, char **argv) +{ +  int i; + +  for (i=0; i<argc; i++) { + +    if (!strcmp(argv[i], CSOAP_ENABLE_WSIL)) { + +      httpd_register("/inspection.wsil", _soap_wsil_entry); +      break; +    } +  } + +  return H_OK; +} diff --git a/libcsoap/soap-wsil.h b/libcsoap/soap-wsil.h new file mode 100644 index 0000000..3acaf42 --- /dev/null +++ b/libcsoap/soap-wsil.h @@ -0,0 +1,49 @@ +/****************************************************************** + *  $Id: soap-wsil.h,v 1.1 2006/11/23 13:20:46 m0gg 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: ferhatayaz@yahoo.com + ******************************************************************/ +#ifndef __csoap_wsil_h +#define __csoap_wsil_h + +#define CSOAP_ENABLE_WSIL	"-CSOAPwsil" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * + * Initializes the WSIL HTTP interface with commandline arguments. + * + * @param argc commandline arg count + * @param argv commandline arg vector + * + * @returns H_OK on success + * + */ +extern herror_t soap_wsil_init_args(int argc, char *argv[]); + +#ifdef __cplusplus +} +#endif + +#endif | 
