diff --git a/uppsrc/Core/XML.h b/uppsrc/Core/XML.h index c7814ccbd..95872ff14 100644 --- a/uppsrc/Core/XML.h +++ b/uppsrc/Core/XML.h @@ -191,7 +191,7 @@ enum { XML_IGNORE_COMMENTS = 0x04, }; - XmlNode ParseXML(XmlParser& p, dword style = XML_IGNORE_DECLS|XML_IGNORE_PIS|XML_IGNORE_COMMENTS); +XmlNode ParseXML(XmlParser& p, dword style = XML_IGNORE_DECLS|XML_IGNORE_PIS|XML_IGNORE_COMMENTS); XmlNode ParseXML(const char *s, dword style = XML_IGNORE_DECLS|XML_IGNORE_PIS|XML_IGNORE_COMMENTS); enum { diff --git a/uppsrc/Core/XmlRpc/XmlRpc.h b/uppsrc/Core/XmlRpc/XmlRpc.h index 54677683e..9d1957e2a 100644 --- a/uppsrc/Core/XmlRpc/XmlRpc.h +++ b/uppsrc/Core/XmlRpc/XmlRpc.h @@ -250,9 +250,6 @@ String FormatXmlRpcParams(const ValueArray& params); String FormatXmlRpcError(int code, const char *text); void Register(const char *name, void (*method)(XmlRpcData&), const char *group = NULL); -void SetXmlRpcMethodFilter(String (*filter)(const String& methodname)); -bool XmlRpcPerform(TcpSocket& http, const char *group); -bool XmlRpcServerLoop(int port, const char *group); #define XMLRPC_METHOD(x) \ void xmlrpc##x(XmlRpcData& rpc); \ @@ -269,6 +266,11 @@ struct XmlRpcError { String text; }; +void SetXmlRpcMethodFilter(String (*filter)(const String& methodname)); +String XmlRpcExecute(const String& request, const char *group, const char *peeraddr); +bool XmlRpcPerform(TcpSocket& http, const char *group); +bool XmlRpcServerLoop(int port, const char *group); + void ThrowXmlRpcError(int code, const char *s); void ThrowXmlRpcError(const char *s); diff --git a/uppsrc/XmlRpc/Client.cpp b/uppsrc/XmlRpc/Client.cpp index 6929ac000..a33acb865 100644 --- a/uppsrc/XmlRpc/Client.cpp +++ b/uppsrc/XmlRpc/Client.cpp @@ -2,6 +2,8 @@ #define LLOG(x) // LOG(x) +NAMESPACE_UPP + static bool sLogRpcCalls; void LogXmlRpcCalls(bool b) @@ -115,3 +117,5 @@ void XmlRpcCall::ClearError() faultString.Clear(); error.Clear(); } + +END_UPP_NAMESPACE diff --git a/uppsrc/XmlRpc/Server.cpp b/uppsrc/XmlRpc/Server.cpp index 853520e0a..57756e117 100644 --- a/uppsrc/XmlRpc/Server.cpp +++ b/uppsrc/XmlRpc/Server.cpp @@ -3,112 +3,7 @@ #define LLOG(x) // DLOG(x) -typedef void (*XmlRpcFnPtr)(XmlRpcData&); - -static StaticMutex XmlRpcMapMutex; - -VectorMap& XmlRpcMap(const char *group) -{ - static VectorMap > mm; - return mm.GetAdd(group); -} - -void Register(const char *name, void (*method)(XmlRpcData&), const char *group) -{ - Mutex::Lock __(XmlRpcMapMutex); - XmlRpcMap(group).Add(name, method); -} - -XmlRpcFnPtr XmlRpcMapGet(const char *group, const char *name) -{ - Mutex::Lock __(XmlRpcMapMutex); - return XmlRpcMap(group).Get(name, NULL); -} - -String (*sXmlRpcMethodFilter)(const String& methodname); - -void SetXmlRpcMethodFilter(String (*filter)(const String& methodname)) -{ - sXmlRpcMethodFilter = filter; -} - -static Stream *xmlrpc_trace; -static int xmlrpc_trace_level; - -void SetXmlRpcServerTrace(Stream& s, int level) -{ - xmlrpc_trace = &s; - xmlrpc_trace_level = level; -} - -String XmlRpcExecute(const String& request, const char *group, const char *peeraddr) -{ - if(xmlrpc_trace && xmlrpc_trace_level == 1) - *xmlrpc_trace << "XmlRpcRequest:\n" << request << '\n'; - XmlParser p(request); - XmlRpcData data; - String methodname; - try { - String r = XmlHeader(); - r << "\r\n"; - p.ReadPI(); - p.PassTag("methodCall"); - p.PassTag("methodName"); - methodname = p.ReadText(); - LLOG("method name: " << methodname); - if(xmlrpc_trace && xmlrpc_trace_level == 0) - *xmlrpc_trace << "XmlRpcRequest method:\n" << methodname << '\n'; - p.PassEnd(); - data.peeraddr = peeraddr; - data.in = ParseXmlRpcParams(p); - XmlRpcMapMutex.Enter(); - if(sXmlRpcMethodFilter) - methodname = (*sXmlRpcMethodFilter)(methodname); - void (*fn)(XmlRpcData&) = XmlRpcMapGet(group, methodname); - if(fn) { - (*fn)(data); - if(IsValueArray(data.out)) { - ValueArray va = data.out; - if(va.GetCount() && IsError(va[0])) { - LLOG("ProcessingError"); - return FormatXmlRpcError(XMLRPC_SERVER_PROCESSING_ERROR, "Processing error: " + GetErrorText(data.out[0])); - } - r << FormatXmlRpcParams(data.out); - } - r << "\r\n\r\n"; - } - else { - XmlRpcMapMutex.Leave(); - return FormatXmlRpcError(XMLRPC_UNKNOWN_METHOD_ERROR, "\'" + methodname + "\' method is unknown"); - } - p.PassEnd(); - if(xmlrpc_trace) - if(xmlrpc_trace_level == 0) - *xmlrpc_trace << "XmlRpc finished OK\n"; - else - *xmlrpc_trace << "Server response:\n" << r << '\n'; - return r; - } - catch(XmlRpcError e) { - LLOG("Client error: " << e.text); - if(xmlrpc_trace) - *xmlrpc_trace << "Client error: " << e.text << '\n'; - return FormatXmlRpcError(e.code, e.text); - } - catch(XmlError e) { - LLOG("XmlError " << e << ": " << p.GetPtr()); - if(xmlrpc_trace) - *xmlrpc_trace << "XmlError: " << e << '\n'; - return FormatXmlRpcError(XMLRPC_SERVER_XML_ERROR, "XML Error: " + e); - } - catch(ValueTypeMismatch) { - LLOG("ValueTypeMismatch at parameter " << data.ii); - if(xmlrpc_trace) - *xmlrpc_trace << "ValueTypeMismatch at parameter " << data.ii << '\n'; - return FormatXmlRpcError(XMLRPC_SERVER_PARAM_ERROR, "Parameter mismatch at parameter " + AsString(data.ii)); - } - return Null; -} +NAMESPACE_UPP int CharFilterNoCr(int c) { @@ -176,3 +71,5 @@ bool XmlRpcServer(int port, const char *group) XmlRpcPerform(http, group); } } + +END_UPP_NAMESPACE diff --git a/uppsrc/XmlRpc/XmlRpc.h b/uppsrc/XmlRpc/XmlRpc.h index 6b1b39eca..aa8370148 100644 --- a/uppsrc/XmlRpc/XmlRpc.h +++ b/uppsrc/XmlRpc/XmlRpc.h @@ -4,7 +4,7 @@ #include #include -using namespace Upp; +NAMESPACE_UPP bool XmlRpcPerform(Socket& http, const char *group); bool XmlRpcServer(int port = 80, const char *group = NULL); @@ -75,8 +75,8 @@ public: void LogXmlRpcCalls(bool b = true); -void SetXmlRpcServerTrace(Stream& s, int level = 1); - int CharFilterNoCr(int c); +END_UPP_NAMESPACE + #endif diff --git a/uppsrc/XmlRpc/XmlRpc.upp b/uppsrc/XmlRpc/XmlRpc.upp index ee330c91e..7693758ff 100644 --- a/uppsrc/XmlRpc/XmlRpc.upp +++ b/uppsrc/XmlRpc/XmlRpc.upp @@ -1,7 +1,8 @@ description "XML-RPC support package (both server and client stuff)\377"; uses - Web; + Web, + Core\XmlRpc; file XmlRpc.h, diff --git a/uppsrc/XmlRpc/init b/uppsrc/XmlRpc/init index cc1468a4a..bbe891463 100644 --- a/uppsrc/XmlRpc/init +++ b/uppsrc/XmlRpc/init @@ -1,4 +1,5 @@ #ifndef _XmlRpc_icpp_init_stub #define _XmlRpc_icpp_init_stub #include "Web/init" +#include "Core\XmlRpc/init" #endif