Enabled CoAP/TCP on android platform
authorhyuna0213.jo <hyuna0213.jo@samsung.com>
Thu, 8 Oct 2015 08:08:19 +0000 (17:08 +0900)
committerJon A. Cruz <jonc@osg.samsung.com>
Fri, 11 Dec 2015 21:30:18 +0000 (21:30 +0000)
currently, coap/tcp can be supported on linux platform.
so I modified the code to support Android platform.

Change-Id: Ia9a9e36939f848b98393648968ddcfacfa7ce564
Signed-off-by: hyuna0213.jo <hyuna0213.jo@samsung.com>
Signed-off-by: jihwan.seo <jihwan.seo@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/3411
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Jaehong Jo <jaehong.jo@samsung.com>
Reviewed-by: Naga Ashok Jampani <jn.ashok@samsung.com>
Reviewed-by: Jon A. Cruz <jonc@osg.samsung.com>
android/android_api/base/src/main/java/org/iotivity/base/OcConnectivityType.java
resource/csdk/connectivity/SConscript
resource/csdk/connectivity/lib/libcoap-4.1.1/SConscript
resource/csdk/connectivity/samples/android/casample/sampleService/src/main/java/org/iotivity/ca/service/MainActivity.java
resource/csdk/connectivity/samples/android/casample/sampleService/src/main/jni/ResourceModel.c
resource/csdk/connectivity/src/SConscript
resource/csdk/connectivity/src/tcp_adapter/SConscript

index 7d42144..04752b3 100644 (file)
@@ -41,6 +41,9 @@ public enum OcConnectivityType {
     /** Remote Access over XMPP.*/
     CT_ADAPTER_REMOTE_ACCESS(1 << 19),
 
+    /** CoAP over TCP.*/
+    CT_ADAPTER_TCP(1 << 20),
+
     /** Insecure transport is the default (subject to change).*/
 
     /** secure the transport path.*/
index 5de9342..e898bca 100644 (file)
@@ -60,7 +60,7 @@ else:
                env.AppendUnique(CPPDEFINES = ['NO_IP_ADAPTER'])
 
        if with_tcp == True:
-               if target_os in ['linux', 'tizen']:
+               if target_os in ['linux', 'tizen', 'android']:
                        env.AppendUnique(CPPDEFINES = ['TCP_ADAPTER'])
                        print "CA Transport is TCP"
                else:
index f3511c7..1aed354 100644 (file)
@@ -37,7 +37,7 @@ if target_os not in ['windows', 'winrt']:
        libcoap_env.AppendUnique(CFLAGS = ['-Wall', '-ffunction-sections',
                        '-fdata-sections', '-fno-exceptions'])
 
-if target_os in ['linux', 'tizen']:
+if target_os in ['linux', 'tizen', 'android']:
        if with_tcp == True:
                libcoap_env.AppendUnique(CPPDEFINES = ['WITH_TCP'])
 
index cdc82bd..96997b2 100755 (executable)
@@ -28,7 +28,7 @@ public class MainActivity extends Activity {
     private final static String TAG = "Sample_Service : MainActivity";
 
     private final CharSequence[] mNetworkCheckBoxItems = { Network.IP.name(),
-            Network.LE.name(), Network.EDR.name()};
+            Network.LE.name(), Network.EDR.name(), Network.TCP.name() };
 
     private final CharSequence[] mDTLSCheckBoxItems = { DTLS.UNSECURED.name(),
             DTLS.SECURED.name() };
@@ -49,7 +49,7 @@ public class MainActivity extends Activity {
     };
 
     private enum Network {
-        IP, LE, EDR
+        IP, LE, EDR, TCP
     };
 
     private enum DTLS {
@@ -69,9 +69,9 @@ public class MainActivity extends Activity {
             false, false, false, false
     };
 
-    private int mSelectedItems[] = { 0, 0, 0 };
+    private int mSelectedItems[] = { 0, 0, 0, 0, 0 };
 
-    private int mUnSelectedItems[] = { 0, 0, 0 };
+    private int mUnSelectedItems[] = { 0, 0, 0, 0, 0 };
 
     private Mode mCurrentMode = Mode.UNKNOWN;
 
@@ -132,11 +132,12 @@ public class MainActivity extends Activity {
     /**
      * Defined ConnectivityType in cacommon.c
      *
-     * CA_IP = (1 << 0) CA_LE = (1 << 2) CA_EDR = (1 << 3)
+     * CA_IP = (1 << 0) CA_LE = (1 << 1) CA_EDR = (1 << 2) CA_TCP = (1 << 4)
      */
     private int CA_IP = (1 << 0);
     private int CA_LE = (1 << 1);
     private int CA_EDR = (1 << 2);
+    private int CA_TCP = (1 << 4);
     private int isSecured = 0;
     private int msgType = 1;
     private int responseValue = 0;
@@ -250,42 +251,35 @@ public class MainActivity extends Activity {
 
     private void showModeView() {
 
+        mReceiveLayout.setVisibility(View.VISIBLE);
+        mSendRequestToAllLayout.setVisibility(View.VISIBLE);
+        mSendRequestToAllSettingLayout.setVisibility(View.VISIBLE);
+        mRequestToAllTitleLayout.setVisibility(View.VISIBLE);
+        mHandleTitleLayout.setVisibility(View.VISIBLE);
+
         if (mCurrentMode == Mode.SERVER) {
 
             mSendNotificationLayout.setVisibility(View.VISIBLE);
             mSendRequestLayout.setVisibility(View.INVISIBLE);
-            mSendRequestToAllLayout.setVisibility(View.VISIBLE);
             mSendRequestSettingLayout.setVisibility(View.INVISIBLE);
-            mSendRequestToAllSettingLayout.setVisibility(View.VISIBLE);
-            mReceiveLayout.setVisibility(View.VISIBLE);
 
             mRequestTitleLayout.setVisibility(View.INVISIBLE);
-            mRequestToAllTitleLayout.setVisibility(View.VISIBLE);
-            mHandleTitleLayout.setVisibility(View.VISIBLE);
 
             mResponseNotificationTitleLayout.setVisibility(View.VISIBLE);
             mSendResponseNotiSettingLayout.setVisibility(View.VISIBLE);
 
-            mNetwork_tv.setText("");
-
         } else if (mCurrentMode == Mode.CLIENT) {
 
             mSendNotificationLayout.setVisibility(View.INVISIBLE);
             mSendRequestLayout.setVisibility(View.VISIBLE);
-            mSendRequestToAllLayout.setVisibility(View.VISIBLE);
             mSendRequestSettingLayout.setVisibility(View.VISIBLE);
-            mSendRequestToAllSettingLayout.setVisibility(View.VISIBLE);
-            mReceiveLayout.setVisibility(View.VISIBLE);
 
             mRequestTitleLayout.setVisibility(View.VISIBLE);
-            mRequestToAllTitleLayout.setVisibility(View.VISIBLE);
-            mHandleTitleLayout.setVisibility(View.VISIBLE);
 
             mResponseNotificationTitleLayout.setVisibility(View.INVISIBLE);
             mSendResponseNotiSettingLayout.setVisibility(View.INVISIBLE);
-
-            mNetwork_tv.setText("");
         }
+        mNetwork_tv.setText("");
     }
 
     @Override
@@ -485,8 +479,13 @@ public class MainActivity extends Activity {
                             public void onClick(DialogInterface dialog,
                                     int which, boolean isChecked) {
 
+                                // in case of TCP increase value,
+                                // because CASample not support RA.
+                                // which: 0(IP), 1(BT), 2(BLE), 3(TCP)
+                                if (which == 3) {
+                                    which = 4;
+                                }
                                 if (isChecked) {
-
                                     mSelectedItems[which] = 1;
                                     mUnSelectedItems[which] = 0;
 
@@ -695,6 +694,9 @@ public class MainActivity extends Activity {
                         } else if (selectedNetworkType == Network.EDR.ordinal()) {
                             selectedNetwork = CA_EDR;
                             DLog.v(TAG, "Selected Network is EDR");
+                        } else if (selectedNetworkType == Network.TCP.ordinal()) {
+                            selectedNetwork = CA_TCP;
+                            DLog.v(TAG, "Selected Network is TCP");
                         } else {
                             DLog.v(TAG, "Selected Network is NULL");
                             selectedNetwork = -1;
index f7d9738..d7c528d 100644 (file)
@@ -60,8 +60,11 @@ static uint8_t g_lastRequestTokenLength = 0;
 
 static const char COAP_PREFIX[] =  "coap://";
 static const char COAPS_PREFIX[] = "coaps://";
+static const char COAP_TCP_PREFIX[] =  "coap+tcp://";
+
 static const uint16_t COAP_PREFIX_LEN = sizeof(COAP_PREFIX) - 1;
 static const uint16_t COAPS_PREFIX_LEN = sizeof(COAPS_PREFIX) - 1;
+static const uint16_t COAP_TCP_PREFIX_LEN = sizeof(COAP_TCP_PREFIX) - 1;
 
 static const char RECEIVED_FILE_PATH[] = "/storage/emulated/0/Download/%d%s.txt";
 
@@ -1377,31 +1380,20 @@ uint32_t get_secure_information(CAPayload_t payLoad)
 
 CAResult_t get_network_type(uint32_t selectedNetwork, CATransportFlags_t *flags)
 {
-
     uint32_t number = selectedNetwork;
 
-    if (!(number & 0xf))
-    {
-        return CA_NOT_SUPPORTED;
-    }
-    if (number & CA_ADAPTER_IP)
-    {
-        *flags = CA_IPV4;
-        g_selectedNwType = CA_ADAPTER_IP;
-        return CA_STATUS_OK;
-    }
-    if (number & CA_ADAPTER_RFCOMM_BTEDR)
+    switch (number)
     {
-        g_selectedNwType = CA_ADAPTER_RFCOMM_BTEDR;
-        return CA_STATUS_OK;
-    }
-    if (number & CA_ADAPTER_GATT_BTLE)
-    {
-        g_selectedNwType = CA_ADAPTER_GATT_BTLE;
-        return CA_STATUS_OK;
+        case CA_ADAPTER_IP:
+            *flags = CA_IPV4;
+        case CA_ADAPTER_GATT_BTLE:
+        case CA_ADAPTER_RFCOMM_BTEDR:
+        case CA_ADAPTER_TCP:
+            g_selectedNwType = number;
+            return CA_STATUS_OK;
+        default:
+            return CA_NOT_SUPPORTED;
     }
-
-    return CA_NOT_SUPPORTED;
 }
 
 void callback(char *subject, char *receivedData)
@@ -1507,6 +1499,12 @@ void parsing_coap_uri(const char* uri, addressSet_t* address, CATransportFlags_t
         LOGI("uri has '%s' prefix", COAP_PREFIX);
         startIndex = COAP_PREFIX_LEN;
     }
+    else if (strncmp(COAP_TCP_PREFIX, uri, COAP_TCP_PREFIX_LEN) == 0)
+    {
+        LOGI("uri has '%s' prefix\n", COAP_TCP_PREFIX);
+        startIndex = COAP_TCP_PREFIX_LEN;
+        *flags = CA_IPV4;
+    }
 
     // #2. copy uri for parse
     size_t len = strlen(uri) - startIndex;
index f5670b1..ec68e29 100755 (executable)
@@ -126,7 +126,7 @@ if 'BT' in ca_transport:
 if 'BLE' in ca_transport:
        env.SConscript(os.path.join(ca_path, 'bt_le_adapter/SConscript'))
 
-if ca_os in ['linux', 'tizen']:
+if ca_os in ['linux', 'tizen', 'android']:
        if with_tcp == True:
                env.SConscript(os.path.join(ca_path, 'tcp_adapter/SConscript'))
 
index d2dcf44..df48527 100644 (file)
@@ -15,7 +15,7 @@ src_dir = './tcp_adapter/'
 
 # Source files to build common for all platforms
 common_files = None
-if target_os in ['linux', 'tizen']:
+if target_os in ['linux', 'tizen', 'android']:
     common_files = [
         os.path.join(src_dir, 'catcpadapter.c'),
         os.path.join(src_dir, 'catcpserver.c') ]