mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-02-11 20:49:02 +00:00
220 lines
5.5 KiB
C++
220 lines
5.5 KiB
C++
#ifndef REGISTRY_HPP_INCLUDED
|
|
#define REGISTRY_HPP_INCLUDED
|
|
|
|
#include <sys/types.h>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <list>
|
|
|
|
#include <xmlrpc-c/c_util.h>
|
|
#include <xmlrpc-c/server.h>
|
|
#include <xmlrpc-c/girmem.hpp>
|
|
#include <xmlrpc-c/base.hpp>
|
|
|
|
namespace xmlrpc_c {
|
|
|
|
|
|
class XMLRPC_DLLEXPORT callInfo {
|
|
/*----------------------------------------------------------------------------
|
|
Information about how an XML-RPC call arrived.
|
|
|
|
This base class carries no information; Servers that don't have any
|
|
call information to provide might use this. Servers that do have call
|
|
information to provide define a derived class of this that contains
|
|
information pertinent to that kind of server.
|
|
-----------------------------------------------------------------------------*/
|
|
public:
|
|
virtual ~callInfo() {}; // This makes it polymorphic
|
|
};
|
|
|
|
class XMLRPC_DLLEXPORT method : public girmem::autoObject {
|
|
/*----------------------------------------------------------------------------
|
|
An XML-RPC method.
|
|
|
|
This base class is abstract. You can't create an object in it.
|
|
Define a useful method with this as a base class, with an
|
|
execute() method.
|
|
-----------------------------------------------------------------------------*/
|
|
public:
|
|
method();
|
|
|
|
virtual ~method();
|
|
|
|
virtual void
|
|
execute(xmlrpc_c::paramList const& paramList,
|
|
xmlrpc_c::value * const resultP) = 0;
|
|
|
|
std::string signature() const { return _signature; };
|
|
std::string help() const { return _help; };
|
|
|
|
protected:
|
|
std::string _signature;
|
|
std::string _help;
|
|
};
|
|
|
|
/* Example of a specific method class:
|
|
|
|
class sample_add : public xmlrpc_c::method {
|
|
public:
|
|
sample_add() {
|
|
this->_signature = "ii";
|
|
this->_help = "This method adds two integers together";
|
|
}
|
|
void
|
|
execute(xmlrpc_c::param_list const paramList,
|
|
const xmlrpc_c::value * const retvalP) {
|
|
|
|
int const addend(paramList.getInt(0));
|
|
int const adder(paramList.getInt(1));
|
|
|
|
*retvalP = xmlrpc_c::value(addend, adder);
|
|
}
|
|
};
|
|
|
|
|
|
Example of creating such a method:
|
|
|
|
methodPtr const sampleAddMethodP(new sample_add);
|
|
|
|
You pass around, copy, etc. the handle sampleAddMethodP and when
|
|
the last copy of the handle is gone, the sample_add object itself
|
|
gets deleted.
|
|
|
|
*/
|
|
|
|
|
|
class XMLRPC_DLLEXPORT method2 : public method {
|
|
/*----------------------------------------------------------------------------
|
|
An XML-RPC method.
|
|
|
|
This base class is abstract. You can't create an object in it.
|
|
Define a useful method with this as a base class, with an
|
|
execute() method.
|
|
|
|
This differs from class 'method' in that the execute() method gets
|
|
call information ('callInfo').
|
|
-----------------------------------------------------------------------------*/
|
|
public:
|
|
method2();
|
|
|
|
virtual ~method2();
|
|
|
|
virtual void
|
|
execute(xmlrpc_c::paramList const& paramList,
|
|
const xmlrpc_c::callInfo * const callInfoP,
|
|
xmlrpc_c::value * const resultP) = 0;
|
|
|
|
void
|
|
execute(xmlrpc_c::paramList const& paramList,
|
|
xmlrpc_c::value * const resultP);
|
|
|
|
};
|
|
|
|
class XMLRPC_DLLEXPORT methodPtr : public girmem::autoObjectPtr {
|
|
|
|
public:
|
|
methodPtr(xmlrpc_c::method * const methodP);
|
|
|
|
xmlrpc_c::method *
|
|
operator->() const;
|
|
};
|
|
|
|
class XMLRPC_DLLEXPORT defaultMethod : public girmem::autoObject {
|
|
|
|
public:
|
|
virtual ~defaultMethod();
|
|
|
|
virtual void
|
|
execute(std::string const& methodName,
|
|
xmlrpc_c::paramList const& paramList,
|
|
xmlrpc_c::value * const resultP) = 0;
|
|
};
|
|
|
|
class XMLRPC_DLLEXPORT defaultMethodPtr : public girmem::autoObjectPtr {
|
|
|
|
public:
|
|
defaultMethodPtr();
|
|
|
|
defaultMethodPtr(xmlrpc_c::defaultMethod * const methodP);
|
|
|
|
xmlrpc_c::defaultMethod *
|
|
operator->() const;
|
|
|
|
xmlrpc_c::defaultMethod *
|
|
get() const;
|
|
};
|
|
|
|
struct registry_impl;
|
|
|
|
class XMLRPC_DLLEXPORT registry : public girmem::autoObject {
|
|
/*----------------------------------------------------------------------------
|
|
An Xmlrpc-c server method registry. An Xmlrpc-c server transport
|
|
(e.g. an HTTP server) uses this object to process an incoming
|
|
Xmlrpc-c call.
|
|
-----------------------------------------------------------------------------*/
|
|
|
|
public:
|
|
|
|
registry();
|
|
~registry();
|
|
|
|
void
|
|
addMethod(std::string const name,
|
|
xmlrpc_c::methodPtr const methodP);
|
|
|
|
void
|
|
setDefaultMethod(xmlrpc_c::defaultMethodPtr const methodP);
|
|
|
|
void
|
|
disableIntrospection();
|
|
|
|
class XMLRPC_DLLEXPORT shutdown {
|
|
public:
|
|
virtual ~shutdown() = 0;
|
|
virtual void
|
|
doit(std::string const& comment,
|
|
void * const callInfo) const = 0;
|
|
};
|
|
|
|
void
|
|
setShutdown(const shutdown * const shutdownP);
|
|
|
|
void
|
|
setDialect(xmlrpc_dialect const dialect);
|
|
|
|
void
|
|
processCall(std::string const& callXml,
|
|
std::string * const responseXmlP) const;
|
|
|
|
void
|
|
processCall(std::string const& callXml,
|
|
const xmlrpc_c::callInfo * const callInfoP,
|
|
std::string * const responseXmlP) const;
|
|
|
|
size_t
|
|
maxStackSize() const;
|
|
|
|
private:
|
|
|
|
registry_impl * implP;
|
|
};
|
|
|
|
|
|
class XMLRPC_DLLEXPORT registryPtr : public girmem::autoObjectPtr {
|
|
|
|
public:
|
|
registryPtr();
|
|
|
|
registryPtr(xmlrpc_c::registry * const registryP);
|
|
|
|
xmlrpc_c::registry *
|
|
operator->() const;
|
|
|
|
xmlrpc_c::registry *
|
|
get() const;
|
|
};
|
|
|
|
} // namespace
|
|
|
|
#endif
|