Imported Upstream version 1.1.0
[platform/upstream/iotivity.git] / service / resource-hosting / src / RequestObject.h
index bb18236..94fa946 100644 (file)
 #define RH_REQUESTOBJECT_H_
 
 #include "RCSRemoteResourceObject.h"
-#include "RCSResourceObject.h"
+#include "RCSRequest.h"
 
 namespace OIC
 {
-namespace Service
-{
-
-class RequestObject
-{
-public:
-    typedef std::shared_ptr<RequestObject> Ptr;
-    typedef std::shared_ptr<RCSRemoteResourceObject> RemoteObjectPtr;
-    typedef void (*SetRequestCallback)(const RCSResourceAttributes &, RCSResourceAttributes &);
-
-    enum class RequestMethod
+    namespace Service
     {
-        Getter = 0,
-        Setter,
-        Delete
-    };
+        class RequestObject
+        {
+        public:
+            typedef std::shared_ptr<RequestObject> Ptr;
+            typedef std::function<void(const RCSResourceAttributes &, int,
+                    const RCSRequest &, RequestObject::Ptr)> SetRequestCallback;
+
+            enum class RequestMethod
+            {
+                Get = 0,
+                Set,
+                Post,
+                Delete
+            };
 
-private:
-    SetRequestCallback pSetRequestCB;
+        private:
+            typedef RCSRemoteResourceObject::Ptr RemoteObjectPtr;
 
-public:
-    RequestObject();
-    RequestObject(SetRequestCallback cb);
-    ~RequestObject();
+        public:
+            RequestObject() = default;
+            ~RequestObject() = default;
 
-    void invokeRequest(RemoteObjectPtr remoteObject, RequestMethod method,
-            RCSResourceAttributes & resourceAttibutes);
+            static void invokeRequest(RCSRemoteResourceObject::Ptr remoteObject,
+                    const RCSRequest & request, RequestMethod method,
+                    const RCSResourceAttributes & resourceAttibutes,
+                    SetRequestCallback setCB = nullptr);
 
-private:
-    void setRequestCB(const RCSResourceAttributes & returnedAttributes,
-            RCSResourceAttributes & putAttibutes);
-};
+        private:
+            void setRequestCB(const RCSResourceAttributes & returnedAttributes, int eCode,
+                    const RCSRequest & request, RequestObject::Ptr this_ptr);
+        };
 
-} /* namespace Service */
+    } /* namespace Service */
 } /* namespace OIC */
 
 #endif /* RH_REQUESTOBJECT_H_ */