Update Snapshot(2018-03-21)
[platform/upstream/iotivity.git] / examples / OICMiddle / Server.cpp
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Corporation.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #include "Server.h"
22 #include "OCPlatform.h"
23 #include "OCApi.h"
24
25 namespace PH = std::placeholders;
26
27 MiddleServer *serverObject = nullptr;   // to be filled in by object
28
29 MiddleServer::MiddleServer()
30 {
31     cb = std::bind(&MiddleServer::entityHandler, this, std::placeholders::_1);
32     serverObject = this;
33 }
34
35 bool MiddleServer::init() {
36     return true;
37 }
38
39 OCEntityHandlerResult MiddleServer::entityHandler(const std::shared_ptr<OCResourceRequest> request) {
40     if (!request) {
41         return OC_EH_OK;
42     }
43
44     std::string requestType = request->getRequestType();
45     int requestFlag = request->getRequestHandlerFlag();
46     bool responseNeeded = false;
47
48     if (requestFlag && RequestHandlerFlag::RequestFlag) {
49         if (requestType == "PUT") {
50             responseNeeded = true;
51         } else if (requestType == "GET") {
52             responseNeeded = true;
53         } else if (requestType == "POST") {     // handle post requests here
54         } else if (requestType == "DELETE") {   // handle delete requests here
55         }
56     }
57
58     if (requestFlag && RequestHandlerFlag::ObserverFlag) {
59     }
60
61     if (responseNeeded) {
62         auto response = std::make_shared<OC::OCResourceResponse>();
63         response->setRequestHandle(request->getRequestHandle());
64         response->setResourceHandle(request->getResourceHandle());
65         response->setErrorCode(200);
66         response->setResponseResult(OC_EH_OK);
67         if (OC_STACK_OK != OCPlatform::sendResponse(response)) {
68             return OC_EH_ERROR;
69         }
70     }
71     return OC_EH_OK;
72 }
73
74 // for debug purposes - to see if the result of registerResource is valid or not
75 void MiddleServer::printRegisterResourceResult(OCStackResult &result) {
76     switch (result) {
77     case OC_STACK_OK:
78         cout << "OC_STACK_OK\n";
79         break;
80     case OC_STACK_INVALID_URI:
81         cout << "OC_STACK_INVALID_URI\n";
82         break;
83     case OC_STACK_INVALID_QUERY:
84         cout << "OC_STACK_INVALID_QUERY\n";
85         break;
86     case OC_STACK_INVALID_IP:
87         cout << "OC_STACK_INVALID_IP\n";
88         break;
89     case OC_STACK_INVALID_PORT:
90         cout << "OC_STACK_INVALID_PORT\n";
91         break;
92     case OC_STACK_INVALID_CALLBACK:
93         cout << "OC_STACK_INVALID_CALLBACK\n";
94         break;
95     case OC_STACK_INVALID_METHOD:
96         cout << "OC_STACK_INVALID_METHOD\n";
97         break;
98     case OC_STACK_NO_MEMORY:
99         cout << "OC_STACK_NO_MEMORY\n";
100         break;
101     case OC_STACK_COMM_ERROR:
102         cout << "OC_STACK_COMM_ERROR\n";
103         break;
104     case OC_STACK_INVALID_PARAM:
105         cout << "OC_STACK_INVALID_PARAM\n";
106         break;
107     case OC_STACK_NOTIMPL:
108         cout << "OC_STACK_NOTIMPL\n";
109         break;
110     case OC_STACK_NO_RESOURCE:
111         cout << "OC_STACK_NO_RESOURCE\n";
112         break;
113     case OC_STACK_RESOURCE_ERROR:
114         cout << "OC_STACK_RESOURCE_ERROR\n";
115         break;
116     case OC_STACK_SLOW_RESOURCE:
117         cout << "OC_STACK_SLOW_RESOURCE\n";
118         break;
119     case OC_STACK_NO_OBSERVERS:
120         cout << "OC_STACK_NO_OBSERVERS\n";
121         break;
122     case OC_STACK_ERROR:
123         cout << "OC_STACK_ERROR\n";
124         break;
125     default:
126             cout << "UNKNOWN\n";
127         break;
128     }
129 }
130
131 bool MiddleServer::registerResource(std::string & resourceUrl, const std::string& resourceTypeName, const std::string& resourceInterface)
132 {
133     OCResourceHandle resourceHandle;
134     // OCResourceProperty is defined ocstack.h
135     uint8_t resourceProperty = OC_DISCOVERABLE | OC_OBSERVABLE;
136
137     //uncomment to enable debugging
138
139     // This will internally create and register the resource.
140     OCStackResult result = OC::OCPlatform::registerResource(
141                            resourceHandle, resourceUrl, resourceTypeName,
142                            resourceInterface,
143                            cb,
144                            resourceProperty);
145     // enable this to see the result of registerResource
146     //printRegisterResourceResult_(result);
147     if (result != OC_STACK_OK) {
148         return false;
149     }
150     return true;
151 }