replace : iotivity -> iotivity-sec
[platform/upstream/iotivity.git] / resource / examples / devicediscoveryserver.cpp
index 4a7494d..1c3404a 100644 (file)
@@ -19,8 +19,8 @@
 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 
 ///
-///This sample demonstrates the device discovery feature
-///The server sets the device related info. which can
+///This sample demonstrates platform and device discovery feature
+///The server sets the platform and device related info. which can
 ///be later retrieved by a client.
 ///
 
 
 #include "OCPlatform.h"
 #include "OCApi.h"
+#include "ocpayload.h"
 
 using namespace OC;
 
-//Set of strings for each of deviceInfo fields
-std::string contentType = "myContentType";
-std::string dateOfManufacture = "myDateOfManufacture";
-std::string deviceName = "myDeviceName";
-std::string deviceUUID = "myDeviceUUID";
-std::string firmwareVersion = "myFirmwareVersion";
-std::string hostName = "myHostName";
-std::string manufacturerName = "myManufacturerNa";
-std::string manufacturerUrl = "myManufacturerUrl";
-std::string modelNumber = "myModelNumber";
-std::string platformVersion = "myPlatformVersion";
-std::string supportUrl = "mySupportUrl";
-std::string version = "myVersion";
-
-//OCDeviceInfo Contains all the device info to be stored
+// Set of strings for each of platform Info fields
+std::string  platformID = "0A3E0D6F-DBF5-404E-8719-D6880042463A";
+std::string  manufacturerName = "myName";
+std::string  manufacturerLink = "https://www.example.com";
+std::string  modelNumber = "myModelNumber";
+std::string  dateOfManufacture = "2016-01-15";
+std::string  platformVersion = "platformVersion";
+std::string  operatingSystemVersion = "myOS";
+std::string  hardwareVersion = "myHardwareVersion";
+std::string  firmwareVersion = "1.0";
+std::string  supportLink = "https://www.examplesupport.com";
+std::string  systemTime = "2016-01-15T11.01";
+
+// Set of strings for each of device info fields
+std::string  deviceName = "Bill's Battlestar";
+std::string  specVersion = "core.1.1.0";
+std::string  dataModelVersions = "res.1.1.0,sh.1.1.0";
+
+// OCPlatformInfo Contains all the platform info to be stored
+OCPlatformInfo platformInfo;
+
+// OCDeviceInfo Contains all the device info to be stored
 OCDeviceInfo deviceInfo;
 
+void DeletePlatformInfo()
+{
+    delete[] platformInfo.platformID;
+    delete[] platformInfo.manufacturerName;
+    delete[] platformInfo.manufacturerUrl;
+    delete[] platformInfo.modelNumber;
+    delete[] platformInfo.dateOfManufacture;
+    delete[] platformInfo.platformVersion;
+    delete[] platformInfo.operatingSystemVersion;
+    delete[] platformInfo.hardwareVersion;
+    delete[] platformInfo.firmwareVersion;
+    delete[] platformInfo.supportUrl;
+    delete[] platformInfo.systemTime;
+}
+
+
 void DeleteDeviceInfo()
 {
-    delete deviceInfo.contentType;
-    delete deviceInfo.dateOfManufacture;
-    delete deviceInfo.deviceName;
-    delete deviceInfo.deviceUUID;
-    delete deviceInfo.firmwareVersion;
-    delete deviceInfo.hostName;
-    delete deviceInfo.manufacturerName;
-    delete deviceInfo.manufacturerUrl;
-    delete deviceInfo.modelNumber;
-    delete deviceInfo.platformVersion;
-    delete deviceInfo.supportUrl;
-    delete deviceInfo.version;
+    delete[] deviceInfo.deviceName;
+    delete[] deviceInfo.specVersion;
+    OCFreeOCStringLL(deviceInfo.dataModelVersions);
 }
 
 void DuplicateString(char ** targetString, std::string sourceString)
@@ -71,52 +86,45 @@ void DuplicateString(char ** targetString, std::string sourceString)
     strncpy(*targetString, sourceString.c_str(), (sourceString.length() + 1));
 }
 
-OCStackResult SetDeviceInfo(std::string contentType, std::string dateOfManufacture,
-                std::string deviceName, std::string deviceUUID, std::string firmwareVersion,
-                std::string hostName, std::string manufacturerName, std::string manufacturerUrl,
-                std::string modelNumber, std::string platformVersion, std::string supportUrl,
-                std::string version)
+OCStackResult SetPlatformInfo(std::string platformID, std::string manufacturerName,
+    std::string manufacturerUrl, std::string modelNumber, std::string dateOfManufacture,
+    std::string platformVersion, std::string operatingSystemVersion, std::string hardwareVersion,
+    std::string firmwareVersion, std::string supportUrl, std::string systemTime)
 {
-    if(manufacturerName.length() > MAX_MANUFACTURER_NAME_LENGTH)
-    {
-        return OC_STACK_INVALID_PARAM;
+    DuplicateString(&platformInfo.platformID, platformID);
+    DuplicateString(&platformInfo.manufacturerName, manufacturerName);
+    DuplicateString(&platformInfo.manufacturerUrl, manufacturerUrl);
+    DuplicateString(&platformInfo.modelNumber, modelNumber);
+    DuplicateString(&platformInfo.dateOfManufacture, dateOfManufacture);
+    DuplicateString(&platformInfo.platformVersion, platformVersion);
+    DuplicateString(&platformInfo.operatingSystemVersion, operatingSystemVersion);
+    DuplicateString(&platformInfo.hardwareVersion, hardwareVersion);
+    DuplicateString(&platformInfo.firmwareVersion, firmwareVersion);
+    DuplicateString(&platformInfo.supportUrl, supportUrl);
+    DuplicateString(&platformInfo.systemTime, systemTime);
 
-    }
+    return OC_STACK_OK;
+}
 
-    if(manufacturerUrl.length() > MAX_MANUFACTURER_URL_LENGTH)
-    {
-        return OC_STACK_INVALID_PARAM;
+OCStackResult SetDeviceInfo(std::string deviceName, std::string specVersion, std::string dataModelVersions)
+{
+    DuplicateString(&deviceInfo.deviceName, deviceName);
 
+    if (!specVersion.empty())
+    {
+        DuplicateString(&deviceInfo.specVersion, specVersion);
     }
 
-    try
+    if (!dataModelVersions.empty())
     {
-        DuplicateString(&deviceInfo.contentType, contentType);
-        DuplicateString(&deviceInfo.dateOfManufacture, dateOfManufacture);
-        DuplicateString(&deviceInfo.deviceName, deviceName);
-        DuplicateString(&deviceInfo.deviceUUID, deviceUUID);
-        DuplicateString(&deviceInfo.firmwareVersion, firmwareVersion);
-        DuplicateString(&deviceInfo.hostName, hostName);
-        DuplicateString(&deviceInfo.manufacturerName, manufacturerName);
-        DuplicateString(&deviceInfo.manufacturerUrl, manufacturerUrl);
-        DuplicateString(&deviceInfo.modelNumber, modelNumber);
-        DuplicateString(&deviceInfo.platformVersion, platformVersion);
-        DuplicateString(&deviceInfo.supportUrl, supportUrl);
-        DuplicateString(&deviceInfo.version, version);
-    }catch(exception &e)
-    {
-        std::cout<<"String Copy failed!!\n";
-        return OC_STACK_ERROR;
+        OCResourcePayloadAddStringLL(&deviceInfo.dataModelVersions, dataModelVersions.c_str());
     }
 
     return OC_STACK_OK;
 }
 
-
-
 int main()
 {
-
     // Create PlatformConfig object
     PlatformConfig cfg {
         OC::ServiceType::InProc,
@@ -128,18 +136,25 @@ int main()
 
     OCPlatform::Configure(cfg);
 
-    std::cout<<"Starting server & setting device info\n";
+    std::cout<<"Starting server & setting platform info\n";
+
+    OCStackResult result = SetPlatformInfo(platformID, manufacturerName, manufacturerLink,
+            modelNumber, dateOfManufacture, platformVersion,  operatingSystemVersion,
+            hardwareVersion, firmwareVersion,  supportLink, systemTime);
 
-    OCStackResult result = SetDeviceInfo(contentType, dateOfManufacture, deviceName,
-            deviceUUID, firmwareVersion, hostName, manufacturerName, manufacturerUrl,
-            modelNumber, platformVersion, supportUrl, version);
+    result = OCPlatform::registerPlatformInfo(platformInfo);
 
     if(result != OC_STACK_OK)
     {
-        std::cout << "Device Registration failed\n";
+        std::cout << "Platform Registration failed\n";
         return -1;
     }
 
+
+    result = SetDeviceInfo(deviceName, specVersion, dataModelVersions);
+    OCResourcePayloadAddStringLL(&deviceInfo.types, "oic.wk.d");
+    OCResourcePayloadAddStringLL(&deviceInfo.types, "oic.d.tv");
+
     result = OCPlatform::registerDeviceInfo(deviceInfo);
 
     if(result != OC_STACK_OK)
@@ -148,6 +163,7 @@ int main()
         return -1;
     }
 
+    DeletePlatformInfo();
     DeleteDeviceInfo();
 
     // A condition variable will free the mutex it is given, then do a non-
@@ -157,7 +173,7 @@ int main()
     std::mutex blocker;
     std::condition_variable cv;
     std::unique_lock<std::mutex> lock(blocker);
-    cv.wait(lock);
+    cv.wait(lock, []{return false;});
 
     // No explicit call to stop the platform.
     // When OCPlatform::destructor is invoked, internally we do platform cleanup
@@ -165,6 +181,3 @@ int main()
     return 0;
 
 }
-
-
-