summaryrefslogtreecommitdiffstats
path: root/libcsoap/soap-router.h
blob: ff449889aa4c22f69eab152c6bc70a8b64c6fda4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/******************************************************************
 *  $Id: soap-router.h,v 1.7 2006/03/07 16:22:24 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
 ******************************************************************/
#ifndef cSOAP_ROUTER_H
#define cSOAP_ROUTER_H

#include <libcsoap/soap-service.h>

/**
   The router object. A router can store a set of 
   services. A service is a C function. 
 */
typedef struct _SoapRouter
{
  SoapServiceNode *service_head;
  SoapServiceNode *service_tail;
  SoapService *default_service;
  xmlDocPtr wsdl;
} SoapRouter;


#ifdef __cplusplus
extern "C" {
#endif

/**
   Creates a new router object. Create a router if
   you are implementing a soap server. Then register
   the services to this router. 
   <P>A router points also to http url context.

   @returns Soap router 
   @see soap_router_free
 */
SoapRouter *soap_router_new(void);


/**
   Registers a SOAP service (in this case a C function)
   to the router.
   
   @param router The router object
   @param func Function to register as a soap service
   @param method Method name to call the function from 
    the client side.
   @param urn The urn for this service
 */
void soap_router_register_service(SoapRouter * router,
                                  SoapServiceFunc func,
                                  const char *method, const char *urn);

void soap_router_register_default_service(SoapRouter * router, SoapServiceFunc func, const char *method, const char *urn);


void soap_router_register_description(SoapRouter *router, xmlDocPtr doc);

/**
   Searches for a registered soap service.

   @param router The router object
   @param urn URN of the service
   @param method The name under which the service was registered.

   @return The service if found, NULL otherwise.
 */
SoapService *soap_router_find_service(SoapRouter * router,
                                      const char *urn, const char *method);


/**
   Frees the router object.

   @param router The router object to free
 */
void soap_router_free(SoapRouter * router);

#ifdef __cplusplus
}
#endif

#endif