Skip to content

Commit 619f1a2

Browse files
authored
Merge pull request #3 from iotivity/v3.1.0
v3.1.0
2 parents 5b351c7 + e088c5f commit 619f1a2

28 files changed

+306
-69
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ cd <iotivity-lite>/port/android
5959
```
6060
3. Execute the command to build the library.
6161
```
62-
make NDK_HOME=<ndk-directory> ANDROID_API=21 DEBUG=1 SECURE=1 IPV4=1 TCP=0 PKI=1 DYNAMIC=1 CLOUD=0 JAVA=1 IDD=1
62+
make NDK_HOME=<ndk-directory> ANDROID_API=21 DEBUG=1 SECURE=1 IPV4=1 TCP=1 PKI=1 DYNAMIC=1 CLOUD=1 JAVA=1 IDD=1
6363
```
6464

6565
Once built, the library can be found at:

otgc/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ android {
3030
minSdkVersion 21
3131
targetSdkVersion 28
3232
versionCode 13
33-
versionName "3.0.0"
33+
versionName "3.1.0"
3434
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
3535

3636
compileOptions {

otgc/src/main/assets/cloudca.pem

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIBhDCCASmgAwIBAgIQdAMxveYP9Nb48xe9kRm3ajAKBggqhkjOPQQDAjAxMS8w
3+
LQYDVQQDEyZPQ0YgQ2xvdWQgUHJpdmF0ZSBDZXJ0aWZpY2F0ZXMgUm9vdCBDQTAe
4+
Fw0xOTExMDYxMjAzNTJaFw0yOTExMDMxMjAzNTJaMDExLzAtBgNVBAMTJk9DRiBD
5+
bG91ZCBQcml2YXRlIENlcnRpZmljYXRlcyBSb290IENBMFkwEwYHKoZIzj0CAQYI
6+
KoZIzj0DAQcDQgAEaNJi86t5QlZiLcJ7uRMNlcwIpmFiJf9MOqyz2GGnGVBypU6H
7+
lwZHY2/l5juO/O4EH2s9h3HfcR+nUG2/tFzFEaMjMCEwDgYDVR0PAQH/BAQDAgEG
8+
MA8GA1UdEwEB/wQFMAMBAf8wCgYIKoZIzj0EAwIDSQAwRgIhAM7gFe39UJPIjIDE
9+
KrtyPSIGAk0OAO8txhow1BAGV486AiEAqszg1fTfOHdE/pfs8/9ZP5gEVVkexRHZ
10+
JCYVaa2Spbg=
11+
-----END CERTIFICATE-----
Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11
-----BEGIN CERTIFICATE-----
2-
MIIEEzCCA7mgAwIBAgIJAI0K+3tTsk07MAoGCCqGSM49BAMCMFsxDDAKBgNVBAoM
2+
MIID/jCCA6OgAwIBAgIJAI0K+3tTslNtMAoGCCqGSM49BAMCMFsxDDAKBgNVBAoM
33
A09DRjEiMCAGA1UECwwZS3lyaW8gVGVzdCBJbmZyYXN0cnVjdHVyZTEnMCUGA1UE
4-
AwweS3lyaW8gVEVTVCBJbnRlcm1lZGlhdGUgQ0EwMDAyMB4XDTE5MTEyODEzMzYw
5-
OVoXDTE5MTIyODEzMzYwOVowYTEMMAoGA1UECgwDT0NGMSIwIAYDVQQLDBlLeXJp
6-
byBUZXN0IEluZnJhc3RydWN0dXJlMS0wKwYDVQQDDCQxZTFiZWJmYi04ZjAzLTQ3
7-
ODUtNWZhNy0xYjcwNGU2NTQzNjAwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQS
8-
rNS0ha8XBiRD+Q7nL+R3uX7f5FPgQO75Wh9PqaiVLhMFewF/Yrbr+KhCdj8e6MNz
9-
WGDbVtMVc59RBHyvgzbho4ICXjCCAlowCQYDVR0TBAIwADAOBgNVHQ8BAf8EBAMC
10-
A4gwKQYDVR0lBCIwIAYIKwYBBQUHAwIGCCsGAQUFBwMBBgorBgEEAYLefAEGMB0G
11-
A1UdDgQWBBR1GbdeJoLZj6iMx9ZDNEv+aoECrjAfBgNVHSMEGDAWgBQZc2oEGgsH
12-
cE9TeVM2h/wMunyuCzCBlgYIKwYBBQUHAQEEgYkwgYYwXQYIKwYBBQUHMAKGUWh0
13-
dHA6Ly90ZXN0cGtpLmt5cmlvLmNvbS9vY2YvY2FjZXJ0cy9CQkU2NEY5QTdFRTM3
14-
RDI5QTA1RTRCQjc3NTk1RjMwOEJFNDFFQjA3LmNydDAlBggrBgEFBQcwAYYZaHR0
15-
cDovL3Rlc3RvY3NwLmt5cmlvLmNvbTBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8v
16-
dGVzdHBraS5reXJpby5jb20vb2NmL2NybHMvQkJFNjRGOUE3RUUzN0QyOUEwNUU0
17-
QkI3NzU5NUYzMDhCRTQxRUIwNy5jcmwwGAYDVR0gBBEwDzANBgsrBgEEAYORVgAB
18-
AjBgBgorBgEEAYORVgEABFIwUDAJAgECAgEAAgEAMDYMGTEuMy42LjEuNC4xLjUx
19-
NDE0LjAuMC4xLjAMGTEuMy42LjEuNC4xLjUxNDE0LjAuMC4yLjAMBE9UR0MMBURF
20-
S1JBMCoGCisGAQQBg5FWAQEEHDAaBgsrBgEEAYORVgEBAAYLKwYBBAGDkVYBAQEw
21-
MAYKKwYBBAGDkVYBAgQiMCAMDjEuMy42LjEuNC4xLjcxDAlEaXNjb3ZlcnkMAzEu
22-
MDAKBggqhkjOPQQDAgNIADBFAiAP9ttApmZfcFoipNra7ZqFa1kdD7JxmD84fuMH
23-
XXyTBgIhAIIrpiVkOxAQqTlfDpJZk3F8byz/x2c9xpNeQEZTllMc
4+
AwweS3lyaW8gVEVTVCBJbnRlcm1lZGlhdGUgQ0EwMDAyMB4XDTIxMTAwNjA5Mjcz
5+
NVoXDTIxMTEwNTA5MjczNVowRjEMMAoGA1UECgwDT0NGMSIwIAYDVQQLDBlLeXJp
6+
byBUZXN0IEluZnJhc3RydWN0dXJlMRIwEAYDVQQDDAlwa2lfY2VydHMwWTATBgcq
7+
hkjOPQIBBggqhkjOPQMBBwNCAARPhgvrI3VG5KDAy4QQnPndI4en9yoIIQWO9PY7
8+
gT60mfwIElH2PbeEFJwS+6RmNtSnGeo1Vb2UQx3bgpEgULMBo4ICYzCCAl8wCQYD
9+
VR0TBAIwADAOBgNVHQ8BAf8EBAMCA4gwKQYDVR0lBCIwIAYIKwYBBQUHAwIGCCsG
10+
AQUFBwMBBgorBgEEAYLefAEGMB0GA1UdDgQWBBRDsU3IcO3AHYvyWp0NjWm4ob6a
11+
uzAfBgNVHSMEGDAWgBQZc2oEGgsHcE9TeVM2h/wMunyuCzCBlgYIKwYBBQUHAQEE
12+
gYkwgYYwXQYIKwYBBQUHMAKGUWh0dHA6Ly90ZXN0cGtpLmt5cmlvLmNvbS9vY2Yv
13+
Y2FjZXJ0cy9CQkU2NEY5QTdFRTM3RDI5QTA1RTRCQjc3NTk1RjMwOEJFNDFFQjA3
14+
LmNydDAlBggrBgEFBQcwAYYZaHR0cDovL3Rlc3RvY3NwLmt5cmlvLmNvbTBfBgNV
15+
HR8EWDBWMFSgUqBQhk5odHRwOi8vdGVzdHBraS5reXJpby5jb20vb2NmL2NybHMv
16+
QkJFNjRGOUE3RUUzN0QyOUEwNUU0QkI3NzU5NUYzMDhCRTQxRUIwNy5jcmwwGAYD
17+
VR0gBBEwDzANBgsrBgEEAYORVgABAjBlBgorBgEEAYORVgEABFcwVTAJAgECAgEA
18+
AgEAMDYMGTEuMy42LjEuNC4xLjUxNDE0LjAuMC4xLjAMGTEuMy42LjEuNC4xLjUx
19+
NDE0LjAuMC4yLjAMC0RldmljZU5hbWUxDANPQ0YwKgYKKwYBBAGDkVYBAQQcMBoG
20+
CysGAQQBg5FWAQEABgsrBgEEAYORVgEBATAwBgorBgEEAYORVgECBCIwIAwOMS4z
21+
LjYuMS40LjEuNzEMCURpc2NvdmVyeQwDMS4wMAoGCCqGSM49BAMCA0kAMEYCIQCn
22+
bJELNfcNIMF/o7fD1GMVo5bipfBgKe45TkUTFxHqJAIhAJocMkb89i5l1htY6Zxh
23+
6IrWOduBtpU7LaNfhLyWQZA0
2424
-----END CERTIFICATE-----

otgc/src/main/assets/kyrio-ee-key.pem

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
BggqhkjOPQMBBw==
33
-----END EC PARAMETERS-----
44
-----BEGIN EC PRIVATE KEY-----
5-
MHcCAQEEIDFeXNSayEnCQIlEjbV+4vGKeqRAmjnspnA8ICW0FnAwoAoGCCqGSM49
6-
AwEHoUQDQgAEEqzUtIWvFwYkQ/kO5y/kd7l+3+RT4EDu+VofT6molS4TBXsBf2K2
7-
6/ioQnY/HujDc1hg21bTFXOfUQR8r4M24Q==
5+
MHcCAQEEIDKAzV1vjeRU1ET9HVHcQVTjr6ClMoGt1Yhjrky2MYyaoAoGCCqGSM49
6+
AwEHoUQDQgAET4YL6yN1RuSgwMuEEJz53SOHp/cqCCEFjvT2O4E+tJn8CBJR9j23
7+
hBScEvukZjbUpxnqNVW9lEMd24KRIFCzAQ==
88
-----END EC PRIVATE KEY-----

otgc/src/main/java/org/openconnectivity/otgc/data/repository/CmsRepository.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,26 @@ public Completable provisionRoleCertificate(String deviceId, String roleId, Stri
142142
});
143143
}
144144

145+
public Completable provisionTrustAnchor(byte[] certificate, String sid, String deviceId) {
146+
return Completable.create(emitter -> {
147+
OCUuid di = OCUuidUtil.stringToUuid(deviceId);
148+
149+
OCObtStatusHandler handler = (int status) -> {
150+
if (status >= 0) {
151+
Timber.d("Provision trust anchor succeeded");
152+
emitter.onComplete();
153+
} else {
154+
emitter.onError(new Exception("Provision trust anchor error"));
155+
}
156+
};
157+
158+
int ret = OCObt.provisionTrustAnchor(certificate, sid, di, handler);
159+
if (ret < 0) {
160+
emitter.onError(new Exception("Provision trust anchor error"));
161+
}
162+
});
163+
}
164+
145165
public Completable provisionPairwiseCredential(String clientId, String serverId) {
146166
return Completable.create(emitter -> {
147167
OCUuid cliendDi = OCUuidUtil.stringToUuid(clientId);
@@ -250,4 +270,31 @@ public Completable removeTrustAnchor(long credid) {
250270
}
251271
});
252272
}
273+
274+
public Completable registerDeviceCloud(String deviceId, String deviceURL, String authProvider, String cloudUrl, String cloudUuid, String accessToken) {
275+
return Completable.create(emitter -> {
276+
OCCloudContext ctx = OCCloud.getContext(0);
277+
278+
OCUuid uuid = OCUuidUtil.stringToUuid(deviceId);
279+
280+
OCResponseHandler handler = (OCClientResponse response) -> {
281+
if (response.getCode() == OCStatus.OC_STATUS_CHANGED) {
282+
Timber.d("Register device on cloud success");
283+
emitter.onComplete();
284+
} else if (response.getCode() == OCStatus.OC_STATUS_CREATED) {
285+
Timber.d("Register device on cloud success");
286+
emitter.onComplete();
287+
} else {
288+
String error = "Register device on cloud error";
289+
Timber.e(error + ": " + response.getCode());
290+
emitter.onError(new Exception(error));
291+
}
292+
};
293+
294+
if (ctx != null) {
295+
OCObt.UpdateCloudConfDevice(uuid, deviceURL, accessToken, authProvider, cloudUrl, cloudUuid, handler);
296+
}
297+
emitter.onComplete();
298+
});
299+
}
253300
}

otgc/src/main/java/org/openconnectivity/otgc/data/repository/IotivityRepository.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -353,6 +353,22 @@ public Observable<Device> scanOwnedByOtherDevices() {
353353
.filter(device -> !device.getDeviceId().equals(getDeviceId().blockingGet()));
354354
}
355355

356+
public Single<String> getEndpoint(Device device) {
357+
return Single.create(emitter -> {
358+
String endpoint = device.getIpv6Host() != null ? device.getIpv6Host() : device.getIpv6TcpHost();
359+
if (endpoint == null) {
360+
endpoint = device.getIpv4Host() != null ? device.getIpv4Host() : device.getIpv4TcpHost();
361+
if (endpoint == null) {
362+
endpoint = device.getIpv6SecureHost() != null ? device.getIpv6SecureHost() : device.getIpv6TcpSecureHost();
363+
if (endpoint == null) {
364+
endpoint = device.getIpv4SecureHost() != null ? device.getIpv4SecureHost() : device.getIpv4TcpSecureHost();
365+
}
366+
}
367+
}
368+
emitter.onSuccess(endpoint);
369+
});
370+
}
371+
356372
public Single<String> getNonSecureEndpoint(Device device) {
357373
return Single.create(emitter -> {
358374
String endpoint = device.getIpv6Host() != null ? device.getIpv6Host() : device.getIpv6TcpHost();

otgc/src/main/java/org/openconnectivity/otgc/domain/model/resource/secure/cred/OcCredential.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,9 +134,13 @@ public void parseOCRepresentation(OCCred cred) {
134134
this.setPublicData(publicData);
135135
}
136136
/* privatedata */
137+
// Reading Private Data fails sometimes on Android. As it not used, it has been commented
138+
/*
137139
OcCredPrivateData privateData = new OcCredPrivateData();
138140
privateData.parseOCRepresentation(cred.getPrivateData());
139141
this.setPrivateData(privateData);
142+
*/
143+
140144
/* roleid */
141145
if (cred.getRole() != null) {
142146
OcCredRole roleid = new OcCredRole();

otgc/src/main/java/org/openconnectivity/otgc/domain/model/resource/secure/doxm/OcDoxm.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ public void parseOCRepresentation(OCRepresentation rep) {
130130
this.setRowneruuid(rowneruuid);
131131
/* rt */
132132
String[] resourceTypes = OCRep.getStringArray(rep, OcfResourceAttributeKey.RESOURCE_TYPES_KEY);
133-
this.setResourceTypes(Arrays.asList(resourceTypes));
133+
this.setResourceTypes(resourceTypes != null ? Arrays.asList(resourceTypes) : null);
134134
/* if */
135135
String[] interfaces = OCRep.getStringArray(rep, OcfResourceAttributeKey.INTERFACES_KEY);
136-
this.setResourceTypes(Arrays.asList(interfaces));
136+
this.setInterfaces(interfaces != null ? Arrays.asList(interfaces) : null);
137137
}
138138

139139
public CborEncoder parseToCbor() {

otgc/src/main/java/org/openconnectivity/otgc/domain/usecase/GetDeviceInfoUseCase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public GetDeviceInfoUseCase(IotivityRepository iotivityRepository,
5252
}
5353

5454
public Single<OcDeviceInfo> execute(Device device) {
55-
return iotivityRepository.getNonSecureEndpoint(device)
55+
return iotivityRepository.getEndpoint(device)
5656
.flatMap(iotivityRepository::getDeviceInfo)
5757
.delay(preferencesRepository.getRequestsDelay(), TimeUnit.SECONDS, schedulersFacade.ui());
5858
}

0 commit comments

Comments
 (0)