Rearrange classes for request and response processing
authorLukasz Wojciechowski <l.wojciechow@partner.samsung.com>
Fri, 20 Jun 2014 21:45:37 +0000 (23:45 +0200)
committerRafal Krypa <r.krypa@samsung.com>
Thu, 3 Jul 2014 12:19:09 +0000 (14:19 +0200)
RequestContext object is the only one passed from SocketManager
to Request execute() method.
Response object is passed to Protocol through
RequestContext::returnResponse().
Response queue is managed automaticaly in RequestContext class.
Request derivatives don't need to handle queues.
ResponseTaker::appendResponseToBuffer() methods need to take
additional queue object as parameter as it is no longer
part of response object.

Change-Id: I15af84c315a55284d4dccff670537e47c60c6b70

src/service/logic/Logic.cpp
src/service/logic/Logic.h
src/service/protocol/ResponseTaker.cpp
src/service/protocol/ResponseTaker.h
src/service/request/CheckRequest.cpp
src/service/request/CheckRequest.h
src/service/request/Request.h
src/service/request/RequestContext.cpp
src/service/request/RequestContext.h
src/service/response/CheckResponse.h
src/service/sockets/SocketManager.cpp

index 3b7f54d..df52e9f 100644 (file)
@@ -31,7 +31,7 @@ Logic::Logic() {
 Logic::~Logic() {
 }
 
-PolicyResult Logic::check(int sourceDesc UNUSED, const PolicyKey &key UNUSED) {
+PolicyResult Logic::check(const RequestContext &context UNUSED, const PolicyKey &key UNUSED) {
 //todo this is only a stub
     return PolicyResult(PredefinedPolicyType::ALLOW);
 }
index a487ac7..3f8626f 100644 (file)
@@ -26,6 +26,8 @@
 #include <types/PolicyKey.h>
 #include <types/PolicyResult.h>
 
+#include <request/RequestContext.h>
+
 namespace Cynara {
 
 class Logic {
@@ -33,7 +35,7 @@ public:
     Logic();
     ~Logic();
 
-    PolicyResult check(int sourceDesc, const PolicyKey &key);
+    PolicyResult check(const RequestContext &context, const PolicyKey &key);
 };
 
 } // namespace Cynara
index b5fb6ac..9ce248a 100644 (file)
@@ -28,7 +28,8 @@
 
 namespace Cynara {
 
-void ResponseTaker::appendResponseToBuffer(CheckResponse &&response UNUSED) {
+void ResponseTaker::appendResponseToBuffer(BinaryQueue &queue UNUSED,
+                                           CheckResponse &&response UNUSED) {
     throw NotImplementedException();
 }
 
index d8a39c5..a4305d9 100644 (file)
@@ -23,6 +23,8 @@
 #ifndef SRC_SERVICE_PROTOCOL_RESPONSETAKER_H_
 #define SRC_SERVICE_PROTOCOL_RESPONSETAKER_H_
 
+#include <common.h>
+
 #include <response/CheckResponse.h>
 
 namespace Cynara {
@@ -32,7 +34,7 @@ public:
     ResponseTaker() = default;
     virtual ~ResponseTaker() = default;
 
-    virtual void appendResponseToBuffer(CheckResponse &&response);
+    virtual void appendResponseToBuffer(BinaryQueue &queue, CheckResponse &&response);
 };
 
 } // namespace Cynara
index e5d2295..a7edfef 100644 (file)
@@ -23,7 +23,8 @@
 #include <common.h>
 #include <types/PolicyResult.h>
 
-#include <protocol/Protocol.h>
+#include <logic/Logic.h>
+#include <main/Cynara.h>
 #include <request/RequestContext.h>
 
 #include "CheckRequest.h"
@@ -33,10 +34,9 @@ namespace Cynara {
 CheckRequest::CheckRequest(const PolicyKey &key) : m_key(key) {
 }
 
-void CheckRequest::execute(Logic *logic, int sourceDesc) {
-    PolicyResult result = logic->check(sourceDesc, m_key);
-    BinaryQueue &queue = RequestContext::resultQueue(sourceDesc);
-    RequestContext::protocol(sourceDesc)->appendResponseToBuffer(CheckResponse(queue, result));
+void CheckRequest::execute(const RequestContext &context) {
+    PolicyResult result = Cynara::getLogic()->check(context, m_key);
+    context.returnResponse(CheckResponse(result));
 }
 
 } // namespace Cynara
index d7b28ab..4e1b62c 100644 (file)
@@ -25,7 +25,8 @@
 
 #include <types/PolicyKey.h>
 
-#include "Request.h"
+#include <request/Request.h>
+#include <request/RequestContext.h>
 
 namespace Cynara {
 
@@ -37,7 +38,7 @@ public:
     CheckRequest(const PolicyKey &key);
     virtual ~CheckRequest() = default;
 
-    virtual void execute(Logic *logic, int sourceDesc);
+    virtual void execute(const RequestContext &context);
 };
 
 } // namespace Cynara
index 7ab5112..9671510 100644 (file)
@@ -25,7 +25,7 @@
 
 #include <memory>
 
-#include <logic/Logic.h>
+#include "RequestContext.h"
 
 namespace Cynara {
 
@@ -34,7 +34,7 @@ public:
     Request();
     virtual ~Request();
 
-    virtual void execute(Logic *logic, int sourceDesc) = 0;
+    virtual void execute(const RequestContext &context) = 0;
 };
 
 typedef std::shared_ptr<Request> RequestPtr;
index fdadea4..9318227 100644 (file)
  */
 
 #include <main/Cynara.h>
+#include <sockets/Descriptor.h>
 #include <sockets/SocketManager.h>
 
 #include "RequestContext.h"
 
 namespace Cynara {
 
-BinaryQueue &RequestContext::resultQueue(int fd) {
-    return Cynara::getSocketManager()->descriptor(fd).writeQueue();
+RequestContext::RequestContext(int desc) : m_desc(desc) {
 }
 
-ProtocolPtr RequestContext::protocol(int fd) {
-    return Cynara::getSocketManager()->descriptor(fd).protocol();
+ResponseTaker &RequestContext::responseTaker(void) const {
+        return Cynara::getSocketManager()->descriptor(m_desc).responseTaker();
+}
+
+BinaryQueue &RequestContext::responseQueue(void) const {
+    return Cynara::getSocketManager()->descriptor(m_desc).writeQueue();
 }
 
 } // namespace Cynara
index d026e48..441bf7c 100644 (file)
 
 #include <common.h>
 
-#include <protocol/Protocol.h>
+#include <protocol/ResponseTaker.h>
 
 namespace Cynara {
 
 class RequestContext {
+private:
+    int m_desc;
+
+    ResponseTaker &responseTaker(void) const;
+    BinaryQueue &responseQueue(void) const;
 
 public:
-    static BinaryQueue &resultQueue(int fd);
-    static ProtocolPtr protocol(int fd);
+    RequestContext(int desc);
+
+    template <class T>
+    void returnResponse(T &&response) const {
+        responseTaker().appendResponseToBuffer(responseQueue(), std::move(response));
+    }
 };
 
 } // namespace Cynara
index fdef1a7..69ae983 100644 (file)
 namespace Cynara {
 
 struct CheckResponse {
-    BinaryQueue &m_queueRef;
     const PolicyResult &m_resultRef;
 
-    CheckResponse(BinaryQueue &queue, const PolicyResult &result)
-        : m_queueRef(queue), m_resultRef(result) {}
+    CheckResponse(const PolicyResult &result) : m_resultRef(result) {
+    }
 };
 
 } // namespace Cynara
index 7ce4f08..4d9e425 100644 (file)
@@ -224,7 +224,7 @@ bool SocketManager::handleRead(int fd, const RawBuffer &readbuffer) {
 
             LOGD("request extracted");
             try {
-                req->execute(Cynara::getLogic(), fd);
+                req->execute(fd);
 
                 if (desc.hasDataToWrite())
                     addWriteSocket(fd);