comp-manager: Send NULL terminated string as data
[platform/core/api/multi-device-group.git] / README.md
1 # d2d-manager\r
2 To test d2d-manager and sample apps, you must build iotivity locally with following modifications:\r
3 \r
4 ### 1. build_common/SConscript\r
5 ```sh\r
6 defines.append('-DMULTIPLE_OWNER=1')\r
7 ```\r
8 ### 2. packaging/iotivity.spec\r
9 ```sh\r
10 --- a/packaging/iotivity.spec\r
11 +++ b/packaging/iotivity.spec\r
12 @@ -1,6 +1,6 @@\r
13  Name: iotivity\r
14  Version: 1.2.1\r
15 -Release: 0\r
16 +Release: 9\r
17  Summary: Samsung IoT Connectivity\r
18  Group: Network & Connectivity / IoT Connectivity\r
19  License: Apache-2.0\r
20 @@ -37,7 +37,7 @@ Source1002: %{name}-test.manifest\r
21  \r
22  # default is RELEASE mode.\r
23  # If DEBUG mode is needed, please use tizen_build_devel_mode\r
24 -%define RELEASE True\r
25 +%define RELEASE False\r
26  # For Example\r
27  %if %{RELEASE} == "True"\r
28  %define build_mode release\r
29 @@ -89,7 +89,7 @@ Source1002: %{name}-test.manifest\r
30  %{!?BLE_CUSTOM_ADV: %define BLE_CUSTOM_ADV False}\r
31  %{!?BLE_DIVISION: %define BLE_DIVISION VD}\r
32  %{!?BLE_TIZEN_30: %define BLE_TIZEN_30 True}\r
33 -%{!?MULTIPLE_OWNER: %define MULTIPLE_OWNER 0}\r
34 +%{!?MULTIPLE_OWNER: %define MULTIPLE_OWNER 1}\r
35  \r
36  BuildRequires:  expat-devel\r
37  BuildRequires:  python, libcurl-devel\r
38 @@ -194,7 +194,7 @@ scons %{JOB} --prefix=%{_prefix} \\r
39  mkdir -p %{buildroot}/%{_datadir}/license\r
40  cp LICENSE %{buildroot}/%{_datadir}/license/%{name}\r
41  %endif\r
42 -rm -rf %{buildroot}\r
43 +#rm -rf %{buildroot}\r
44  CFLAGS="${CFLAGS:-%optflags}" ; export CFLAGS ;\r
45  scons install --install-sandbox=%{buildroot} --prefix=%{_prefix} \\r
46      ES_TARGET_ENROLLEE=%{ES_TARGET_ENROLLEE} \\r
47 @@ -259,6 +259,14 @@ cp ./resource/csdk/security/include/*.h %{buildroot}%{_includedir}\r
48  cp ./resource/csdk/connectivity/api/*.h %{buildroot}%{_includedir}/\r
49  cp ./resource/csdk/security/include/internal/*.h %{buildroot}%{_includedir}/\r
50  cp ./resource/csdk/security/provisioning/include/oxm/*.h %{buildroot}%{_includedir}\r
51 +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/provisioningclient %{ex_install_dir}/provision-sample/\r
52 +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_client.dat %{ex_install_dir}/provision-sample/\r
53 +%if 0%{MULTIPLE_OWNER} == 1\r
54 +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/subownerclient %{ex_install_dir}/provision-sample/\r
55 +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_subowner_client.dat %{ex_install_dir}/provision-sample/\r
56 +cp out/%{TARGET_OS}/%{TARGET_ARCH}/%{build_mode}/resource/csdk/security/provisioning/sample/sampleserver_preconfpin %{ex_install_dir}/provision-sample/\r
57 +cp ./resource/csdk/security/provisioning/sample/oic_svr_db_server_preconfpin.dat %{ex_install_dir}/provision-sample/\r
58 +%endif\r
59  cp ./resource/csdk/security/provisioning/include/internal/*.h %{buildroot}%{_includedir}\r
60  cp ./resource/csdk/security/provisioning/include/*.h %{buildroot}%{_includedir}\r
61  cp ./resource/csdk/security/provisioning/sample/oic_svr_db_server_justworks.dat %{buildroot}%{_libdir}/oic_svr_db_server.dat\r
62 @@ -286,7 +294,7 @@ ln -fs ../resource %{buildroot}%{_includedir}/iotivity/\r
63 \r
64 ```\r
65 \r
66 ### 3. policyengine.c\r
67 ```sh\r
68 --- a/resource/csdk/security/src/policyengine.c\r
69 +++ b/resource/csdk/security/src/policyengine.c\r
70 @@ -192,7 +192,7 @@ static bool IsRequestFromSubOwner(PEContext_t *context)\r
71   */\r
72  static bool IsValidRequestFromSubOwner(PEContext_t *context)\r
73  {\r
74 -    bool isValidRequest = false;\r
75 +    bool isValidRequest = true;\r
76  \r
77      if(NULL == context)\r
78      {\r
79 @@ -294,7 +294,7 @@ bool IsRequestFromResourceOwner(PEContext_t *context)\r
80      {\r
81          if(OC_STACK_OK == GetSvrRownerId[(int)context->resourceType](&resourceOwner))\r
82          {\r
83 -            retVal = UuidCmp(&context->subject, &resourceOwner);\r
84 +            retVal = true;//UuidCmp(&context->subject, &resourceOwner);\r
85          }\r
86      }\r
87  \r
88 ```\r
89 \r
90 ### 4. provisioningdatabasemanager.c\r
91 \r
92 ```sh\r
93 --- a/resource/csdk/security/provisioning/src/provisioningdatabasemanager.c\r
94 +++ b/resource/csdk/security/provisioning/src/provisioningdatabasemanager.c\r
95 @@ -44,7 +44,7 @@\r
96  #define PDM_BIND_INDEX_THIRD 3\r
97  \r
98  #define PDM_CREATE_T_DEVICE_LIST "create table T_DEVICE_LIST(ID INTEGER PRIMARY KEY AUTOINCREMENT,\\r
99 -                                  UUID BLOB NOT NULL UNIQUE, STATE INT NOT NULL);"\r
100 +                                  UUID BLOB NOT NULL, STATE INT NOT NULL);"\r
101  \r
102  #define PDM_CREATE_T_DEVICE_LINK  "create table T_DEVICE_LINK_STATE(ID INT NOT NULL, ID2 INT NOT \\r
103                                     NULL,STATE INT NOT NULL, PRIMARY KEY (ID, ID2));"\r
104 \r
105 ```\r
106 \r
107 ### 5. octypes.h\r
108 ```sh\r
109 --- a/resource/csdk/stack/include/octypes.h\r
110 +++ b/resource/csdk/stack/include/octypes.h\r
111 @@ -1052,7 +1052,9 @@ typedef enum\r
112      OC_STACK_SERVICE_UNAVAILABLE,    /** 503*/\r
113      OC_STACK_GATEWAY_TIMEOUT,        /** 504*/\r
114      OC_STACK_PROXY_NOT_SUPPORTED,    /** 505*/\r
115 -\r
116 +#ifdef MULTIPLE_OWNER\r
117 +       OC_STACK_LINK_ALREADY_EXIST,\r
118 +#endif\r
119      /** ERROR in stack.*/\r
120      OC_STACK_ERROR = 255\r
121      /** Error status code - END HERE.*/\r
122 ```\r
123 \r
124 ### 6. multipleownershiptransfermanager.c\r
125 ```sh\r
126 --- a/resource/csdk/security/provisioning/src/multipleownershiptransfermanager.c\r
127 +++ b/resource/csdk/security/provisioning/src/multipleownershiptransfermanager.c\r
128 @@ -652,14 +652,14 @@ OCStackResult MOTAddPreconfigPIN(const OCProvisionDev_t *targetDeviceInfo,\r
129      VERIFY_NON_NULL(TAG, preconfPIN, ERROR);\r
130      VERIFY_SUCCESS(TAG, (0 != preconfPINLen), ERROR);\r
131      VERIFY_SUCCESS(TAG, (0 != preconfPINLen && OXM_PRECONFIG_PIN_MAX_SIZE >= preconfPINLen), ERROR);\r
132 -\r
133 +#if 0\r
134      OicSecCred_t* prevCred = GetCredResourceData(&targetDeviceInfo->doxm->deviceID);\r
135      if(NULL != prevCred)\r
136      {\r
137          OIC_LOG(INFO, TAG, "PIN/PW Credential already exist!");\r
138          return OC_STACK_OK;\r
139      }\r
140 -\r
141 +#endif\r
142      addCredRes = OC_STACK_NO_MEMORY;\r
143      //Generate PIN based credential\r
144      pinCred = (OicSecCred_t*)OICCalloc(1, sizeof(OicSecCred_t));\r
145 ```\r
146 \r
147 After iotivity build succeeds, copy the following package to GBS-ROOT.\r
148 \r
149 * iotivity-1.2.1-9.armv7l.rpm\r
150 * iotivity-devel-1.2.1-9.armv7l.rpm\r
151 \r
152 **Example**\r
153 ```sh\r
154 ~/GBS-ROOT/unified-standard/local/repos/unified_standard/armv7l/RPMS/\r
155 ```\r
156 # build script\r
157 If you want to build and install the d2d manager easily, use the following guide.\r
158 ### 1. modify git path variable in {git_path}/material/script/d2d_build.sh & d2d_install.sh script\r
159         ex) git_path="/data/workspace/d2d-manager"\r
160 ### 2. copy install script in /usr/bin\r
161         ex) sudo cp d2d_install.sh /usr/bin\r
162 ### 3. execute d2d_install.sh\r
163         ex) $ d2d_install.sh\r
164 \r
165 # How to test d2d-subowner\r
166 **Assumption)** \r
167 We have 2~3 physical devices such as TM1 or U3. Our devices are in same IP subnet.\r
168 \r
169 **Pre-conditions)** \r
170 Execute 2 sampleserver_justworks which has Preconfigured PIN security option (key. 12341234)\r
171 \r
172 **Example)**\r
173 At physical device#1, run sampleserver_justworks (ex. its uuid: 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4)\r
174 At physical device#2, run sampleserver_justworks (ex. 2nd server's uuid: e4854ed5-65d1-4cc7-8766-3fb7a35e283a)\r
175 \r
176 ## Test Method)\r
177 At physical device#2, we execute mdbus2 like below\r
178 ### 1. Enable d2d-subowner\r
179 ```sh\r
180 sh-3.2# mdbus2 -s -i\r
181 MDBUS2> net.d2ds.enabler /net/d2ds/enabler net.d2ds.enabler.enable\r
182 (0,)\r
183 ```\r
184 ```sh\r
185 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER\r
186 01-01 10:23:35.029+0900 D/D2D_SUBOWNER(14781): d2ds.c: main(40) > Enter\r
187 01-01 10:23:35.030+0900 I/D2D_SUBOWNER(14781): d2ds.c: main(53) > service mainloop start\r
188 01-01 10:23:35.030+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: d2ds_service_interface_init(455) > Enter\r
189 01-01 10:23:35.032+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: d2ds_service_interface_init(464) > Quit\r
190 01-01 10:23:35.045+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_activator_bus_acquired(370) > Enter\r
191 01-01 10:23:35.046+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_activator_bus_acquired(391) > Quit\r
192 01-01 10:23:35.056+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_on_name_acquired(305) > Acquired the name net.d2ds\r
193 01-01 10:23:35.063+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_handle_enable(315) > Enter\r
194 01-01 10:23:35.526+0900 D/D2D_SUBOWNER(14781): d2ds-service-interface.c: _d2ds_dbus_handle_enable(331) > Quit\r
195 ```\r
196 \r
197 ### 2. Get d2d-subowner's device ID\r
198 \r
199 ```sh\r
200 MDBUS2> net.d2ds /net/d2ds net.d2ds.get_ownerid\r
201 ('e5d11e8c-7e04-0e9f-fe9f-4bc362f94318', 0)\r
202 ```\r
203 \r
204 ```sh\r
205 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER\r
206 01-01 10:23:42.626+0900 D/D2D_SUBOWNER(14781): d2ds-subowner.c: d2ds_request_get_ownerid(1525) > [IPC] Get Device ID\r
207 ```\r
208 \r
209 ### 3. Find MOT enabled devices in a network\r
210 \r
211 ```sh\r
212 MDBUS2> net.d2ds /net/d2ds net.d2ds.disc_mot_enb_devs\r
213 (0,)\r
214 ```\r
215 \r
216 ```sh\r
217 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER\r
218 01-01 09:07:40.351+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: d2ds_request_disc_mot_enb_devs(1400) > [IPC] Discovery MOT enabled devices\r
219 01-01 09:07:40.351+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _disc_mot_env_devs_func(672) > Discovering Multiple Ownership Transfer enabled Devices on Network..\r
220 01-01 09:07:44.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [1] 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4\r
221 01-01 09:07:44.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [2] e4854ed5-65d1-4cc7-8766-3fb7a35e283a\r
222 01-01 09:07:44.358+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(590) > Found 2 MOT enabled devices\r
223 01-01 09:07:44.359+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(633) > ?doxms?\r
224 ```\r
225 \r
226 ```sh\r
227 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb shell dbus-monitor --system "sender='net.d2ds'"\r
228 method return time=1515149361.403747 sender=:1.50 -> destination=:1.49 serial=29 reply_serial=29\r
229    int32 0\r
230 signal time=1515149365.404783 sender=:1.50 -> destination=(null destination) serial=30 path=/net/d2ds; interface=net.d2ds; member=disc_mowned_devs_done\r
231    array [\r
232       array [\r
233          dict entry(\r
234             string "deviceId"\r
235             variant                string "e5d11e8c-7e04-0e9f-fe9f-4bc362f94318"\r
236          )\r
237          dict entry(\r
238             string "adapter"\r
239             variant                uint32 1\r
240          )\r
241          dict entry(\r
242             string "flags"\r
243             variant                int32 32\r
244          )\r
245          dict entry(\r
246             string "port"\r
247             variant                uint16 59190\r
248          )\r
249          dict entry(\r
250             string "addr"\r
251             variant                string "fe80::7edd:90ff:feb1:1c53%wlan0"\r
252          )\r
253          dict entry(\r
254             string "ifindex"\r
255             variant                int32 0\r
256          )\r
257          dict entry(\r
258             string "routeData"\r
259             variant                string ""\r
260          )\r
261          dict entry(\r
262             string "connType"\r
263             variant                uint32 65568\r
264          )\r
265          dict entry(\r
266             string "securePort"\r
267             variant                uint16 35114\r
268          )\r
269          dict entry(\r
270             string "tcpPort"\r
271             variant                uint16 49193\r
272          )\r
273          dict entry(\r
274             string "secVer"\r
275             variant                string "0.0.0"\r
276          )\r
277          dict entry(\r
278             string "devStatus"\r
279             variant                uint32 1\r
280          )\r
281       ]\r
282    ]\r
283 ```\r
284 \r
285 ### 4. MOT sampleserver_justworks in device#1\r
286 \r
287 ```sh\r
288 MDBUS2> net.d2ds /net/d2ds net.d2ds.mot 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 12341234\r
289 (0,)\r
290 ```\r
291 \r
292 ### 5. MOT sampleserver_justworks in device#2\r
293 \r
294 ```sh\r
295 MDBUS2> net.d2ds /net/d2ds net.d2ds.mot e4854ed5-65d1-4cc7-8766-3fb7a35e283a 12341234\r
296 (0,)\r
297 ```\r
298 \r
299 ### 6. Find owned devices in a network\r
300 \r
301 ```sh\r
302 MDBUS2> net.d2ds /net/d2ds net.d2ds.disc_mowned_devs\r
303 (0,)\r
304 ```\r
305 \r
306 ```sh\r
307 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER\r
308 01-01 09:08:21.418+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: d2ds_request_disc_owned_devs(1420) > [IPC] Discovery Owned devices using MOT\r
309 01-01 09:08:21.418+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: _disc_owned_devs_func(721) > Discovering Multiple Owned Devices on Network.\r
310 01-01 09:08:25.419+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_dev_list(295) > Device List is Empty..\r
311 01-01 09:08:25.419+0900 I/D2D_SUBOWNER( 4721):\r
312 01-01 09:08:30.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [1] 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4\r
313 01-01 09:08:30.358+0900 I/D2D_SUBOWNER( 4721): d2ds-subowner.c: _print_no_uuid(219) > [2] e4854ed5-65d1-4cc7-8766-3fb7a35e283a\r
314 01-01 09:08:30.358+0900 D/D2D_SUBOWNER( 4721): d2ds-subowner.c: __notify_found_devs(590) > Found 2 MOT enabled devices\r
315 ```\r
316 \r
317 ### 7. ACL Provisioning sampleserver_justworks in device#1\r
318 \r
319 ```sh\r
320 MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_acl e4854ed5-65d1-4cc7-8766-3fb7a35e283a 5c7ad9ac-836b-4ac0-92a8-ca516f9e8dd4 /a/led core.led oic.if.baseline 31\r
321 (0,)\r
322 ```\r
323 \r
324 ### 8. ACL Provisioning sampleserver_justworks in device#2\r
325 \r
326 ```sh\r
327 MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_acl 7ad10436-525b-4f4c-890b-84a0f3ad66aa e4854ed5-65d1-4cc7-8766-3fb7a35e283a /a/led core.led oic.if.baseline 31\r
328 (0,)\r
329 ```\r
330 \r
331 ### 9. Make both sampleserver_justworks pairwise\r
332 \r
333 ```sh\r
334 MDBUS2> net.d2ds /net/d2ds net.d2ds.prov_cred f9dfa1a0-f989-4c31-a08c-32b0d0178058 c520f48f-ed51-4986-8c45-47bfb7e8d8bc\r
335 (0,)\r
336 ```\r
337 \r
338 ```sh\r
339 saerome.kim@lx:~/github_sec/d2d-manager (tizen)$ sdb dlog -v time D2D_SUBOWNER\r
340 01-01 10:09:12.288+0900 D/D2D_SUBOWNER(13505): d2ds-subowner.c: d2ds_request_prov_cred(1304) > [IPC] Provisioning Credential\r
341 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 7b6a3d68-d9cb-4197-bb1f-631fb908f140\r
342 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 4dc9c08c-c20f-4cd7-9861-0a90a6d773e0\r
343 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _print_uuid(187) > 7b6a3d68-d9cb-4197-bb1f-631fb908f140\r
344 01-01 10:09:12.288+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _cred_provisioning_func(1099) >    Provisioning Selected Pairwise Devices..\r
345 01-01 10:09:12.829+0900 I/D2D_SUBOWNER(13505): d2ds-subowner.c: _cred_provisioning_func(1115) >    > Provisioned Selected Pairwise Devices\r
346 ```\r
347 \r
348 \r
349 \r