00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #ifndef OW_REQUESTHANDLERIFC_HPP_
00037 #define OW_REQUESTHANDLERIFC_HPP_
00038 #include "OW_config.h"
00039 #include "OW_Types.hpp"
00040 #include "OW_String.hpp"
00041 #include "OW_SharedLibraryReference.hpp"
00042 #include "OW_SortedVectorMap.hpp"
00043 #include "OW_IntrusiveReference.hpp"
00044 #include "OW_ServiceIFC.hpp"
00045 #include "OW_IfcsFwd.hpp"
00046 #include "OW_CommonFwd.hpp"
00047
00048 #include <iosfwd>
00049
00050
00051
00052
00053 namespace OW_NAMESPACE
00054 {
00055
00062 class OW_COMMON_API RequestHandlerIFC : public ServiceIFC
00063 {
00064 public:
00065 RequestHandlerIFC();
00066 virtual ~RequestHandlerIFC();
00076 void process(std::istream* istr, std::ostream* ostrEntity,
00077 std::ostream* ostrError, OperationContext& context);
00083 bool hasError(Int32& errCode, String& errDescr);
00084 bool hasError() { return m_hasError; }
00089 void options(CIMFeatures& cf, OperationContext& context)
00090 { doOptions(cf, context); }
00091 virtual RequestHandlerIFC* clone() const = 0;
00092 ServiceEnvironmentIFCRef getEnvironment() const;
00093 virtual void setEnvironment(const ServiceEnvironmentIFCRef& env);
00094 virtual StringArray getSupportedContentTypes() const = 0;
00095 virtual String getContentType() const = 0;
00096 String getCIMError() const { return m_cimError; }
00097 void setError(Int32 errorCode, const String& errorDescription)
00098 {
00099 m_hasError = true;
00100 m_errorCode = errorCode;
00101 m_errorDescription = errorDescription;
00102 }
00103 void clearError()
00104 {
00105 m_hasError = false;
00106 m_errorCode = 0;
00107 m_errorDescription.erase();
00108 }
00109 protected:
00120 virtual void doProcess(std::istream* istr, std::ostream* ostrEntity,
00121 std::ostream* ostrError, OperationContext& context) = 0;
00127 virtual void doOptions(CIMFeatures& cf, OperationContext& context) = 0;
00128 String m_cimError;
00129 String getHost();
00130 String m_cachedHost;
00131 private:
00132
00133 bool m_hasError;
00134 Int32 m_errorCode;
00135 String m_errorDescription;
00136
00137 #ifdef OW_WIN32
00138 #pragma warning (push)
00139 #pragma warning (disable: 4251)
00140 #endif
00141
00142 ServiceEnvironmentIFCRef m_env;
00143
00144 #ifdef OW_WIN32
00145 #pragma warning (pop)
00146 #endif
00147
00148 };
00149
00150 }
00151
00152
00153 #if !defined(OW_STATIC_SERVICES)
00154 #define OW_REQUEST_HANDLER_FACTORY(derived, handlerName) \
00155 extern "C" OW_EXPORT OW_NAMESPACE::RequestHandlerIFC* \
00156 createRequestHandler() \
00157 { \
00158 return new derived; \
00159 } \
00160 extern "C" OW_EXPORT const char* \
00161 getOWVersion() \
00162 { \
00163 return OW_VERSION; \
00164 }
00165 #else
00166 #define OW_REQUEST_HANDLER_FACTORY(derived, handlerName) \
00167 extern "C" OW_NAMESPACE::RequestHandlerIFC* \
00168 createRequestHandler_##handlerName() \
00169 { \
00170 return new derived; \
00171 }
00172 #endif
00173
00174 #endif