From 4d75242c68c8efc8c7501712d8a3a64b3f01947f Mon Sep 17 00:00:00 2001 From: Aaron Date: Tue, 15 May 2018 17:19:37 -0700 Subject: [PATCH 1/7] 0.26.0 Path concat fix. Fix NPE in DSLink.shutdown(). --- build.gradle | 2 +- .../src/main/java/org/iot/dsa/dslink/DSLink.java | 13 +++++++------ .../src/main/java/org/iot/dsa/node/DSPath.java | 5 ++--- .../org/iot/dsa/dslink/{test => poc}/MainNode.java | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) rename dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/{test => poc}/MainNode.java (99%) diff --git a/build.gradle b/build.gradle index c2f5d3a6..749e83ba 100644 --- a/build.gradle +++ b/build.gradle @@ -2,7 +2,7 @@ apply plugin: 'java' apply plugin: 'maven' group 'org.iot.dsa' -version '0.25.0' +version '0.26.0' sourceCompatibility = 1.6 targetCompatibility = 1.6 diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java b/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java index 57e48bb6..d9df32d5 100644 --- a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java +++ b/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java @@ -356,15 +356,16 @@ public void save() { */ public void shutdown() { stop(); - if (runThread == null) { + Thread thread = runThread; + if (thread == null) { return; } - synchronized (runThread) { - try { - runThread.join(); - } catch (Exception x) { - fine(x); + try { + synchronized (thread) { + thread.join(); } + } catch (Exception x) { + fine(x); } } diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java b/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java index 6052bcbb..12ce4b01 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java +++ b/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java @@ -56,15 +56,14 @@ public static StringBuilder concat(String leading, String trailing, StringBuilde } if (leading.charAt(leading.length() - 1) == '/') { if (trailing.charAt(0) == '/') { - bucket.append(trailing.substring(1)); + return bucket.append(trailing.substring(1)); } } else { if (trailing.charAt(0) != '/') { bucket.append('/'); - bucket.append(trailing); } } - return bucket; + return bucket.append(trailing); } /** diff --git a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/test/MainNode.java b/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java similarity index 99% rename from dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/test/MainNode.java rename to dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java index b65a014e..246005ac 100644 --- a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/test/MainNode.java +++ b/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java @@ -1,4 +1,4 @@ -package org.iot.dsa.dslink.test; +package org.iot.dsa.dslink.poc; import org.iot.dsa.DSRuntime; import org.iot.dsa.dslink.DSMainNode; From 444fcc8dd85cbc47628abfa9322b2748c1abbdb9 Mon Sep 17 00:00:00 2001 From: Julian Villalva Date: Fri, 18 May 2018 15:55:19 -0700 Subject: [PATCH 2/7] Set up push and release to maven central --- build.gradle | 29 ++++++++++++- ci/secring.gpg.enc | Bin 0 -> 4976 bytes dslink-core/build.gradle | 51 ++++++++++++++++++++++ dslink-websocket-standalone/build.gradle | 53 ++++++++++++++++++++++- 4 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 ci/secring.gpg.enc diff --git a/build.gradle b/build.gradle index 749e83ba..16964d05 100644 --- a/build.gradle +++ b/build.gradle @@ -1,12 +1,31 @@ +buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath 'com.adaptc.gradle:nexus-workflow:0.6' + } +} + +apply plugin: 'nexus-workflow' apply plugin: 'java' apply plugin: 'maven' +apply plugin: 'signing' -group 'org.iot.dsa' +group 'org.iot-dsa' version '0.26.0' sourceCompatibility = 1.6 targetCompatibility = 1.6 +install { + repositories.mavenInstaller { + pom.project { + artifactId 'dslink-v2' + } + } +} + repositories { mavenLocal() mavenCentral() @@ -16,7 +35,7 @@ repositories { } dependencies { - testCompile 'junit:junit:+' + testCompile 'junit:junit:[4.12,)' } task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { @@ -24,6 +43,12 @@ task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { from sourceSets.main.allJava } +task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir +} + artifacts { archives sourcesJar + archives javadocJar } diff --git a/ci/secring.gpg.enc b/ci/secring.gpg.enc new file mode 100644 index 0000000000000000000000000000000000000000..b6130bd1ce2daf43b230368ae26d79a7ffe449a2 GIT binary patch literal 4976 zcmV-$6OZguVQh3|WM5y0CM!s>%?ze>$y1%?1Fw@6sxUEqx|<>q-Kh3|Rp;ng2JA}! zg7-B83Kqhs<|5?^%anVTx(3CN*C#$TDMs&F;Wa4wABF>k6t-Fv?RTL-iq7=FSz><( z9Kx}C6>Fi{i>nJyd57qa{a=&piWE~kd(Z9#)F<8?33@No$t_k@0Wm;~Ao_7W+qtFw zGqPnJzeSUYLOT#&icP;WepgVv(wV_72k8|}#-m@2cBUdUwU6^@Prh)i@}(}Iu3$07 zZj-3d?zhX4*RI{%=rfmh=vm;1&^DKz2NoCyk&Zca-J@FuZrdx-;;KRKdCB>$WoFHv zgdNkC-gv8%#g}5>@L-Y$`NoZqtDT)wM2D}trU57fWCA0U?r&D_N}fIbjuGr><~Rcyif#s-J)w6$S+bPS!batg7`kuZUi@b7;0Bu?6O0 zAOb#C1Y3d-|Ix9#kdHLhNApPHyP+l{%4YR`_MxoN+fl%F2?XlX$`~d(B{JV3!A$=< zg;uBH*Wd$5wC&={cKkk|t1?+Q{CKXt^8J}evIG#jlEI3S28(otY#r)Da7>@ZY_aU! zs)ggIEWi72;}B29h*v*yF66j|>@s1({FpYF*($_Fk}F~h5E&?TxF@gSe=KEdA9`xS z(xd%Y>>AXqk~0qFoS@mfhyBBVY4`R1dMaIWkPhdZF)?;rr>r_u`$snEjhZCtgMGGn zXPhg=X-8Gz+S0$Lxru+jRt9(c4a>7IMH*i1u7Zz4Y=KkQRNa+5j=ba+!=$J{_wLEx zyxuzstB0$U`H?(GF^ec_DWVhGNQhVI+@fCY9J2f`W((;_`MJrVd4K^=ob~dZ6{-WO zPePllOP~peD8kHlu{DP`taNvGKrU4guc=t2uzp0-&c-?=bH%Jl1OUaYvVCDPsBEF^ zR73{jZ=LN-QbtV1h4z ztt*sW#aT+;%-|D`2Gwm|1a&6t;aiQJU!jgFmiqyo#e?CaY}>wTsCUG%8IAs|!1>3x zR7J5-CXWn=h3ZWcPZj>IxRAieZif{_!{nkp*?*S$+y7bTDq=z|s8Tqxqt81Ew*G8$T?e&;H0K5(n)@vRI@P5$e(7x)8wn=3 z(4z&1`6}lxO6W#0%M+etBwyWjn5~uEtr1@dp)q;^+jD~NY-;kmP*SbYv6-8aMh5u7 zIbx6bsvMpuG_#gc|GoDn?|19#h>r@^y`dH&W^%Hl4JZ-ff+=&wXS_knaG)llG445K zV;qUvV4-}%)hCgEJ+vrYB+_-LG%yi`8t1akp|BL3ZnDeB- z=oZ+0xeZN!p&aKqrP%>}Ivr`&DH_+NU$&_yf{JEAo%C3~Y-|OubD=IrCBz}}Yt1Ht zbG!Qwn}EFS+V{zfVJ#et%8+vHY-65vN}Gka<14;3Vw%V@hlXt|se0Ryd`1()_;7u{2 zouNIme5pa9FsNj|nwQp6y!Lw{S=%FozF|;k7P+>6LoBk0r%cue#%uPP4^b?!C0r-; ze2M~-%t^n0w5oyE*;c~tuyM)U*P)F1=cHt7;=07uOp3(S5z=%LDBZfShI|LdOZK;G zekmgO86uZfToJS4Pi`7vwD#}7N#nYW>dv{Q@>syQ_x-!w^tp`E{hy9_awTI zNO%w&^ty!8PGmMoaqa_mZ_CAb0hs*FX&YZNJ)K(ZB**MUAo?c#jNeka{x)DTHTGM( z%xm&fe4W7NUM?k*f&T|Mh8r`vY!XDFA@fuYtkj>rr%if2#<`1%X!{aSywXriRoIH3 zO5ZV$g3YUS;L|#yZ?^oUxWG*7hSxz1lzLHsHL1}ZaB-H#gWD@dxHJ{&rZ3L$+h{u_ zm^?z*_8@-`Pk79|y5eMkXTraDxxyL&441lvlrf$4lb0cszdOtckvU1O09)umV2&R> zk}%^;wgC>YE2VTG-lC*pnASOigo05Di#BPc`_?6s68JFAV5ZPe?V;I_52zV^m(xY) z1>%dh__lys&|*H&WbcYYPsPC=HF~iEk}~Iy9I7=b<^7K@E6z#EW$Q=U@>cjbuos0} zB!{Rw_Lo%H;?V=?G@pO5l(iUhK~=ZFrv0W^(SXY|mT6f0eJu_W=;LH`IE`I- z3ZeDZbXXxzAuezQFpfl){_0E;4g{R%t)Sh`UmJdeyY0OXuYnEMOBK-pvP9vyLAXCK zJj7VFcv>;TJ-y7+UD_yYo)Br0Z?Txa@;xOMq!Bet$|_;)jVwtB^cOzN!h97>TaRo< zGBqV*KiqT&pnmMjRELTvya%QbrzU0{Nr!9{bW@7p)Sm`i*z^Oev+=72p&QT8B=*A?ad;%k{DynP_{7Sy9NCNSb_l8N?I%^Bno@H`g(CI#^x)5e!R zua^%yv(qto$lf+<^ItXh8EHYUdRLC=KI7Et=3eVX&0#8f)ON5&xMSN^<=5g#QX*2| zohTTARD16bAa&*$Sbg7sx%VuR*wlq-R@CB`#nGO^T^2My9_p+WEv4-y9yxehu5snN zW;LBC1Cc7)k#I806a?z02(XNAaw^Jt{pCpO3g?z$GI^p?=DcB%i4ZzTC}#WW;Lv%R z1FdEy>P1LTcb@)``t?w{1ZPhH=f*=x*l`HaN06+hJ6|6<*hKZG#H$)Ig9!|0Ews42 zP@(RV0N~bSvdOnS8PeyM{Wzp)^u*$c2;}kiKCjA z=%eA_dwXEGMm^byYdI9!D z)2yYsn&Yu2aSi{J^+xnGT5;oDu#D5(%jPTrph$3EN4!ol4SW%C#o^ZntVnMGsnYt3 zc7Z**YxSztp`c{#YC}eqva!*R8esyxGIA#E3^%{pA)T`x4Au#Pfe?C(CA6&Zgo{z& zwNRz9FItX%irHQ;(96*Ox($_c$3Scp%MyWfp@1UZ9!=qLl5&8%apT1~KR5s@%j|X9Aln#Vf#7 zFn;!IBV*Z&I=D}~j3eIgZjfgp+z9|?tLqAO!DRuTo)m)Q6ym<&+vB@nfKoH^GJs3E~*lY&6+}c@`P%@2NaYch4A^c;! zzR`|1ZQ)0VpFXK(z%Ho&33m@=8{6;XV*#bwISk$)s0rUjGGMM71H;Ofd^@Dbqq1#H z&7-$T1!~dy|Cu9alB2&5l3rngNO{@8jz)o&OsZ3{)ykN-&$M zl1X|DC5D~2kqRLSe09{jbFe#c`<>4R`>hW=gMLt$q%DkkR^lGNV;9Gre1~t`l~$HW z?zs-LNQ8?j7z1fMn8Xgp9l_nMe*fG~7EFJC5Dy~0N3Fv# z&0a`(;8p?_(gh>9F?)`1K&VoR9EJo^J=R0xxtBQl_#|BO$ z!cnvWS~WqTnkR}x!T4C-i_!L;Q+F6N^TXV;P)|2Yn&yY~S)}Zb zP+{eIVeybfo-0-X*pYS&g#o427~5Znyo#QJ+EL7fB#}Rm4whuDTTf)AkKT)Sbkwms zKp|d?ek4%|aY;p%dFs%*4hNzCq}sTJJLOs{ zba7M*ujvFVt{AfCMo+_`!jhN|hTC^xhzGmUz=N<7MX`1yGe?-pyXpDhYi^g&n?QE^ z&k{TKlpcm2C&zOOae{uVA1*?vrYkZE#I8Vze~Cwc+*C7`E2ih(F}-9?DMN(f$--bZ zpI+5vfem zF0#y3OpZxQum2J~aZU?sXyFsNQ6GZo)SanlB~{%^(`lQXy7^z<9&|M&&@!$f4!6N5 zoiaBiJY@amFy_Tb-1zP7c73d7UQ{|a=?B@dV=aJwH)-6}8pOgAN+IPZ=vNl+}gtsj7P9Y(d{>M%Dl zhEFP~L7pSfON77=5ynOp>dC)zM5AlI6ndg2|LMn3WuK^2!E#D(WzJ0uHF-j2EMQP2 zD1Ph|hcyPC)>q=Cpb1)c^UP13Dz_}7ODd*>b3WUizLCGo;7Ze#O`wq;6pcPTSFB7X zn`++W|CSK!9(8oA;|hp+jYrX^g-zkcjay*xqUQ*(3%M@hr%!zFHhP$?_r_%i9ma&& z7AtS+%!uH&Jl6i4@uKCg-?v@Pyb03~a7AM=MDIN6148F#Qq!(+Bq2M^EI;x^sNL`2&U}NwrI6u zlBe?txr@X(X8bawXEJJQoDF_8>EJbPOtLs_=vY!u=zLP+9rq=~=8c>{0v-EJ z_^Yo^Ak-Q8>-z{4-uwmQZOEnuX5rs4&rVpjEdUUNwC@g6 zZbod2y0ye66CBl{mRH#PE!qF1>nWkq4JR-dA%Bz2R6}RuCJoetl|j)aBV^E6*YF-7 z!lW_WAeb{`(_%2e0`5T4iKXZMxPzvu6vxiYSsU;hdFApPC}(IF)ytgbINgr7g@p7N z!c@vL_rIg6)p0d6f#?f+W=dk|<6*cJ(qI4YY(;~LdM6uv)-DQepirmfq*2#}83+TV z$tfJiiGJ++T~c!opBA_X&0+++Aobt2dWUx8ryIV|BYfH*h!`rTTY9yVLqD>ts>u#B z=@7GWvmrwvJQRHQiQ+n9d1!ppU7MnNPXm+!LGyv>mXVSD*3b6g>{qgbI`9{M(H=Ft zsh0<3bt7*BYr1D4I>7iXD{Mbs(Y3t?1gOMH;2qYCj~F=4HSUNZYt8TE^YR{)$WXyR zgDGPpY`=8!Nb`a{=Br6q@!QP$Pi_DS;_(PREN}r^NgngbF@xxOgzr`#lL8Qi%4i9+A_SCBD08S{&C7HE literal 0 HcmV?d00001 diff --git a/dslink-core/build.gradle b/dslink-core/build.gradle index dd25f220..8396041e 100644 --- a/dslink-core/build.gradle +++ b/dslink-core/build.gradle @@ -3,3 +3,54 @@ apply from: '../build.gradle' javadoc { exclude("**/com/**") } + +signing { + required { gradle.taskGraph.hasTask("uploadArchives") } + sign configurations.archives +} + +uploadArchives { + repositories { + mavenDeployer { + beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } + + repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2") { + authentication(userName: ossrhUsername, password: ossrhPassword) + } + + snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots") { + authentication(userName: ossrhUsername, password: ossrhPassword) + } + + pom.project { + name = 'DSLink SDK V2' + artifactId = 'dslink-core-v2' + description = 'V2 Java SDK for the IoT DSA protocol' + + packaging = 'jar' + url = 'http://iot-dsa.org' + + scm { + connection = 'scm:git:https://github.com/iot-dsa-v2/sdk-dslink-java-v2.git' + developerConnection = 'scm:git:git@github.com:iot-dsa-v2/sdk-dslink-java-v2.git' + url = 'https://github.com/iot-dsa-v2/sdk-dslink-java-v2' + } + + licenses { + license { + name = 'The Apache License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + + developers { + developer { + id = 'samrg472' + name = 'Samuel Grenier' + email = 'samrg472@gmail.com' + } + } + } + } + } +} diff --git a/dslink-websocket-standalone/build.gradle b/dslink-websocket-standalone/build.gradle index 2b8d354f..d61d3d39 100644 --- a/dslink-websocket-standalone/build.gradle +++ b/dslink-websocket-standalone/build.gradle @@ -2,5 +2,56 @@ apply from: '../build.gradle' dependencies { compile project(':dslink-core') - compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:+' + compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:[1.12,)' +} + +signing { + required { gradle.taskGraph.hasTask("uploadArchives") } + sign configurations.archives +} + +uploadArchives { + repositories { + mavenDeployer { + beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } + + repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2") { + authentication(userName: ossrhUsername, password: ossrhPassword) + } + + snapshotRepository(url: "https://oss.sonatype.org/content/repositories/snapshots") { + authentication(userName: ossrhUsername, password: ossrhPassword) + } + + pom.project { + name = 'DSLink SDK V2 Websocket Implementation' + artifactId = 'dslink-websocket-standalone-v2' + description = 'V2 Implementation of Websockets for IoT DSA protocol' + + packaging = 'jar' + url = 'http://iot-dsa.org' + + scm { + connection = 'scm:git:https://github.com/iot-dsa-v2/sdk-dslink-java-v2.git' + developerConnection = 'scm:git:git@github.com:iot-dsa-v2/sdk-dslink-java-v2.git' + url = 'https://github.com/iot-dsa-v2/sdk-dslink-java-v2' + } + + licenses { + license { + name = 'The Apache License, Version 2.0' + url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' + } + } + + developers { + developer { + id = 'samrg472' + name = 'Samuel Grenier' + email = 'samrg472@gmail.com' + } + } + } + } + } } From 59d9f2da12cd36212909ca3b9e4ff028ab264f27 Mon Sep 17 00:00:00 2001 From: Julian Villalva Date: Mon, 21 May 2018 13:08:56 -0700 Subject: [PATCH 3/7] Make gradlew runnable. Add gradle.properties with defaults for ossrhUsername and ossrhPassword --- gradle.properties | 2 ++ gradlew | 0 2 files changed, 2 insertions(+) create mode 100644 gradle.properties mode change 100644 => 100755 gradlew diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..3858cc1d --- /dev/null +++ b/gradle.properties @@ -0,0 +1,2 @@ +ossrhUsername="" +ossrhPassword="" diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 From 5acbaca3bd9bb3037ddf2ebeba4230a5c8ec8125 Mon Sep 17 00:00:00 2001 From: Aaron Date: Mon, 25 Jun 2018 10:20:38 -0700 Subject: [PATCH 4/7] 0.27.0 AES 256 SHA 256 Lenient salt update --- build.gradle | 2 +- .../dsa/dslink/protocol/v1/DS1Session.java | 8 ++--- .../dsa/dslink/sys/cert/SysCertManager.java | 6 ++-- .../main/java/org/iot/dsa/node/DSPath.java | 2 +- .../main/java/org/iot/dsa/node/DSString.java | 17 +---------- ...PasswordAes.java => DSPasswordAes256.java} | 28 +++++++++--------- .../iot/dsa/security/DSPasswordSha256.java | 2 +- .../org/iot/dsa/dslink/DSPasswordTests.java | 8 ++--- dslink-java-v2-poc/dslink.json | 4 +-- .../java/org/iot/dsa/dslink/poc/MainNode.java | 3 +- .../dslink/websocket/WsBinaryTransport.java | 12 ++------ .../dsa/dslink/websocket/WsTextTransport.java | 12 ++------ gradle/wrapper/gradle-wrapper.jar | Bin 54708 -> 54329 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- 14 files changed, 39 insertions(+), 67 deletions(-) rename dslink-core/src/main/java/org/iot/dsa/security/{DSPasswordAes.java => DSPasswordAes256.java} (85%) diff --git a/build.gradle b/build.gradle index 16964d05..eb16131f 100644 --- a/build.gradle +++ b/build.gradle @@ -13,7 +13,7 @@ apply plugin: 'maven' apply plugin: 'signing' group 'org.iot-dsa' -version '0.26.0' +version '0.27.0' sourceCompatibility = 1.6 targetCompatibility = 1.6 diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java b/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java index 9bc2b335..ea3f6d30 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java +++ b/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java @@ -287,11 +287,9 @@ protected void processEnvelope(DSIReader reader) { getConnection().setRequesterAllowed(); } } else if (key.equals("salt")) { - if (reader.next() != Token.STRING) { - throw new IllegalStateException("Salt not a string"); - } - fine(fine() ? "Next salt: " + reader.getString() : null); - getConnection().updateSalt(reader.getString()); + String s = reader.getElement().toString(); + fine(fine() ? "Next salt: " + s : null); + getConnection().updateSalt(s); } next = reader.next(); } while (next != END_MAP); diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java b/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java index d36cd727..29148606 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java +++ b/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java @@ -5,7 +5,7 @@ import org.iot.dsa.node.DSInfo; import org.iot.dsa.node.DSNode; import org.iot.dsa.node.DSString; -import org.iot.dsa.security.DSPasswordAes; +import org.iot.dsa.security.DSPasswordAes256; /** * Certificate management for the whole process. This is basically a stub for future @@ -57,11 +57,11 @@ public void declareDefaults() { declareDefault(ALLOW_SERVERS, DSBool.TRUE); declareDefault(CERTFILE, DSString.valueOf("dslink.jks")); declareDefault(CERTFILE_TYPE, DSString.valueOf("JKS")); - declareDefault(CERTFILE_PASS, DSPasswordAes.valueOf("dsarocks")); + declareDefault(CERTFILE_PASS, DSPasswordAes256.valueOf("dsarocks")); } private String getCertFilePass() { - DSPasswordAes pass = (DSPasswordAes) keystorePass.getObject(); + DSPasswordAes256 pass = (DSPasswordAes256) keystorePass.getObject(); return pass.decode(); } diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java b/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java index 12ce4b01..48cc0f3f 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java +++ b/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java @@ -16,7 +16,7 @@ public class DSPath { /////////////////////////////////////////////////////////////////////////// private static final int caseDiff = ('a' - 'A'); - private static final Charset utf8 = Charset.forName("UTF-8"); + private static final Charset utf8 = DSString.UTF8; /////////////////////////////////////////////////////////////////////////// // Fields diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSString.java b/dslink-core/src/main/java/org/iot/dsa/node/DSString.java index 1ce354bd..5a0baebc 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSString.java +++ b/dslink-core/src/main/java/org/iot/dsa/node/DSString.java @@ -1,8 +1,6 @@ package org.iot.dsa.node; import java.nio.charset.Charset; -import java.util.logging.Level; -import org.iot.dsa.logging.DSLogging; /** * String wrapper. @@ -24,7 +22,7 @@ public class DSString extends DSElement { /** * The standard UTF8 charset, can be used with string.getBytes(Charset). */ - public static final Charset UTF8 = utf8(); + public static final Charset UTF8 = Charset.forName("UTF-8"); // Fields // ------ @@ -84,16 +82,12 @@ public boolean isString() { public boolean toBoolean() { if (value.equalsIgnoreCase("true")) { return true; - } else if (value.equalsIgnoreCase("false")) { - return true; } else if (value.equals("0")) { return false; } else if (value.equals("1")) { return true; } else if (value.equalsIgnoreCase("on")) { return true; - } else if (value.equalsIgnoreCase("off")) { - return false; } return false; } @@ -106,15 +100,6 @@ public String toString() { return value; } - private static Charset utf8() { - try { - return Charset.forName("UTF-8"); - } catch (Exception x) { - DSLogging.getDefaultLogger().log(Level.SEVERE, "UTF-8 unknown", x); - } - return Charset.defaultCharset(); - } - @Override public DSString valueOf(DSElement arg) { return valueOf(arg.toString()); diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes.java b/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java similarity index 85% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes.java rename to dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java index 93755015..053c25ce 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes.java +++ b/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java @@ -14,14 +14,14 @@ * * @author Aaron Hansen */ -public class DSPasswordAes extends DSValue implements DSIPassword, DSIStorable { +public class DSPasswordAes256 extends DSValue implements DSIPassword, DSIStorable { // Constants // --------- private static Cipher cipher; private static Key key; - public static final DSPasswordAes NULL = new DSPasswordAes(DSString.NULL); + public static final DSPasswordAes256 NULL = new DSPasswordAes256(DSString.NULL); // Fields // ------ @@ -31,11 +31,11 @@ public class DSPasswordAes extends DSValue implements DSIPassword, DSIStorable { // Constructors // ------------ - private DSPasswordAes(DSString encrypted) { + private DSPasswordAes256(DSString encrypted) { this.value = encrypted; } - private DSPasswordAes(String encrypted) { + private DSPasswordAes256(String encrypted) { this(DSString.valueOf(encrypted)); } @@ -86,7 +86,7 @@ public static String encode(String arg) { @Override public boolean equals(Object obj) { - if (obj instanceof DSPasswordAes) { + if (obj instanceof DSPasswordAes256) { return value.equals(obj.toString()); } return false; @@ -148,11 +148,11 @@ public DSString store() { } @Override - public DSPasswordAes restore(DSElement element) { + public DSPasswordAes256 restore(DSElement element) { if (element.isNull()) { return NULL; } - return new DSPasswordAes(element.toString()); + return new DSPasswordAes256(element.toString()); } /** @@ -178,7 +178,7 @@ public String toString() { * @return Returns the NULL instance if the arg is null, isNull() or the empty string. */ @Override - public DSPasswordAes valueOf(DSElement arg) { + public DSPasswordAes256 valueOf(DSElement arg) { if ((arg == null) || arg.isNull()) { return NULL; } @@ -195,13 +195,13 @@ public DSPasswordAes valueOf(DSElement arg) { * @param arg The text to hash. * @return Returns the NULL instance if the arg is null or the empty string. */ - public static DSPasswordAes valueOf(String arg) { + public static DSPasswordAes256 valueOf(String arg) { if (arg == null) { return NULL; } else if (arg.isEmpty()) { return NULL; } - return new DSPasswordAes(encode(arg)); + return new DSPasswordAes256(encode(arg)); } // Initialization @@ -210,14 +210,14 @@ public static DSPasswordAes valueOf(String arg) { static { try { cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); - byte[] nameBytes = DSPasswordAes.class.getName().getBytes(DSString.UTF8); - byte[] keyBytes = new byte[16]; - System.arraycopy(nameBytes, 0, keyBytes, 0, 16); + byte[] nameBytes = DSPasswordAes256.class.getName().getBytes(DSString.UTF8); + byte[] keyBytes = new byte[32]; + System.arraycopy(nameBytes, 0, keyBytes, 0, 32); key = new SecretKeySpec(keyBytes, "AES"); } catch (Exception x) { Logger.getLogger("security").log(Level.SEVERE, "AES problem", x); } - DSRegistry.registerDecoder(DSPasswordAes.class, NULL); + DSRegistry.registerDecoder(DSPasswordAes256.class, NULL); } } diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java b/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java index 4f3b7433..30200ebe 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java +++ b/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java @@ -55,7 +55,7 @@ public static String encode(String arg) { @Override public boolean equals(Object obj) { - if (obj instanceof DSPasswordAes) { + if (obj instanceof DSPasswordAes256) { return value.equals(obj.toString()); } return false; diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java b/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java index 37736d27..0b649e3e 100644 --- a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java +++ b/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java @@ -2,7 +2,7 @@ import org.iot.dsa.node.DSElement; import org.iot.dsa.node.DSString; -import org.iot.dsa.security.DSPasswordAes; +import org.iot.dsa.security.DSPasswordAes256; import org.iot.dsa.security.DSPasswordSha256; import org.junit.Assert; import org.junit.Test; @@ -25,15 +25,15 @@ public class DSPasswordTests { // ------- @Test - public void testAes() throws Exception { - DSPasswordAes pass = DSPasswordAes.valueOf("myPass"); + public void testAes256() throws Exception { + DSPasswordAes256 pass = DSPasswordAes256.valueOf("myPass"); String encrypted = pass.toString(); Assert.assertFalse(pass.toString().equals("myPass")); Assert.assertTrue(pass.decode().equals("myPass")); Assert.assertTrue(pass.isValid(DSString.valueOf("myPass"))); Assert.assertFalse(pass.isValid(DSString.valueOf("asdf"))); DSElement e = pass.store(); - pass = DSPasswordAes.NULL.restore(e); + pass = DSPasswordAes256.NULL.restore(e); Assert.assertFalse(pass.toString().equals("myPass")); Assert.assertTrue(pass.decode().equals("myPass")); Assert.assertTrue(pass.toString().equals(encrypted)); diff --git a/dslink-java-v2-poc/dslink.json b/dslink-java-v2-poc/dslink.json index 95681e4d..bef28535 100644 --- a/dslink-java-v2-poc/dslink.json +++ b/dslink-java-v2-poc/dslink.json @@ -7,12 +7,12 @@ "configs": { "handler_class": { "type": "string", - "value": "org.iot.dsa.dslink.test.MainNode" + "value": "org.iot.dsa.dslink.poc.MainNode" }, "log": { "desc": "all, trace, debug, fine, warn, info, error, admin, fatal, none", "type": "enum", - "value": "info" + "value": "all" }, "token": { "desc": "Authentication token for the broker.", diff --git a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java b/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java index 246005ac..351fa78a 100644 --- a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java +++ b/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java @@ -96,7 +96,8 @@ public void onRemove(String name) { @Override public void onUpdate(String name, DSElement value) { - System.out.println("list update " + name); + System.out.print(name); + System.out.print(": "); System.out.println(String.valueOf(value)); } diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java b/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java index 916d40b5..82eae3bc 100644 --- a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java +++ b/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java @@ -5,15 +5,9 @@ import java.io.IOException; import java.net.URI; import java.nio.ByteBuffer; -import javax.websocket.ClientEndpoint; -import javax.websocket.CloseReason; -import javax.websocket.EndpointConfig; -import javax.websocket.OnClose; -import javax.websocket.OnError; -import javax.websocket.OnMessage; -import javax.websocket.OnOpen; -import javax.websocket.RemoteEndpoint; -import javax.websocket.Session; +import java.util.List; +import java.util.Map; +import javax.websocket.*; import org.glassfish.tyrus.client.ClientManager; import org.iot.dsa.util.DSException; diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java b/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java index 842b95a9..1c14e0e2 100644 --- a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java +++ b/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java @@ -8,15 +8,9 @@ import java.io.Reader; import java.io.Writer; import java.net.URI; -import javax.websocket.ClientEndpoint; -import javax.websocket.CloseReason; -import javax.websocket.EndpointConfig; -import javax.websocket.OnClose; -import javax.websocket.OnError; -import javax.websocket.OnMessage; -import javax.websocket.OnOpen; -import javax.websocket.RemoteEndpoint; -import javax.websocket.Session; +import java.util.List; +import java.util.Map; +import javax.websocket.*; import org.glassfish.tyrus.client.ClientManager; import org.iot.dsa.util.DSException; diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7a3265ee94c0ab25cf079ac8ccdf87f41d455d42..f6b961fd5a86aa5fbfe90f707c3138408be7c718 100644 GIT binary patch delta 15814 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ea720f98..2d80b69a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-4.8.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-bin.zip From 4d6c9355dd92c40f905701a6f0202c80249d834d Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 5 Jul 2018 16:11:56 -0700 Subject: [PATCH 5/7] 0.28.0 * Fix lenient handling of salt. * Fix leading byte in binary output debugging. * AES128 & SHA-1 * Fix subscription responder. * Repo changes. --- .gitignore | 37 +-- build.gradle | 55 ++-- .../README.md | 0 .../build.gradle | 10 +- .../dslink.json | 0 .../java/org/iot/dsa/dslink/poc/MainNode.java | 0 .../build.gradle | 25 +- .../websocket/StandaloneTransportFactory.java | 0 .../dslink/websocket/WsBinaryTransport.java | 0 .../dsa/dslink/websocket/WsTextTransport.java | 0 {dslink-core => dslink-v2}/build.gradle | 26 +- .../com/acuity/iot/dsa/dslink/Template.java | 0 .../iot/dsa/dslink/io/DSByteBuffer.java | 0 .../iot/dsa/dslink/io/DSCharBuffer.java | 0 .../iot/dsa/dslink/io/DSIoException.java | 0 .../dslink/io/msgpack/MsgpackConstants.java | 0 .../dsa/dslink/io/msgpack/MsgpackReader.java | 0 .../dsa/dslink/io/msgpack/MsgpackWriter.java | 0 .../dslink/protocol/DSProtocolException.java | 0 .../iot/dsa/dslink/protocol/DSSession.java | 207 +++++++-------- .../iot/dsa/dslink/protocol/DSStream.java | 0 .../protocol/message/AbstractMessage.java | 0 .../protocol/message/MessageReader.java | 0 .../protocol/message/MessageWriter.java | 0 .../protocol/message/OutboundMessage.java | 0 .../dslink/protocol/message/RequestPath.java | 0 .../requester/DSOutboundInvokeStub.java | 0 .../requester/DSOutboundListStub.java | 0 .../requester/DSOutboundRemoveStub.java | 0 .../protocol/requester/DSOutboundSetStub.java | 0 .../protocol/requester/DSOutboundStub.java | 0 .../requester/DSOutboundSubscribeStub.java | 0 .../requester/DSOutboundSubscribeStubs.java | 0 .../requester/DSOutboundSubscriptions.java | 0 .../protocol/requester/DSRequester.java | 0 .../protocol/responder/DSInboundInvoke.java | 0 .../protocol/responder/DSInboundList.java | 0 .../protocol/responder/DSInboundRequest.java | 0 .../protocol/responder/DSInboundSet.java | 0 .../responder/DSInboundSubscription.java | 210 +++++++++------- .../responder/DSInboundSubscriptions.java | 0 .../protocol/responder/DSResponder.java | 0 .../dsa/dslink/protocol/v1/CloseMessage.java | 0 .../dslink/protocol/v1/DS1ConnectionInit.java | 24 +- .../dslink/protocol/v1/DS1LinkConnection.java | 0 .../dsa/dslink/protocol/v1/DS1Session.java | 237 ++++++++++-------- .../protocol/v1/requester/DS1Requester.java | 0 .../protocol/v1/responder/DS1Responder.java | 0 .../protocol/v1/responder/ErrorMessage.java | 0 .../dsa/dslink/protocol/v2/AckMessage.java | 0 .../dsa/dslink/protocol/v2/CloseMessage.java | 0 .../dslink/protocol/v2/DS2LinkConnection.java | 0 .../dsa/dslink/protocol/v2/DS2Message.java | 0 .../dslink/protocol/v2/DS2MessageReader.java | 0 .../dslink/protocol/v2/DS2MessageWriter.java | 0 .../dsa/dslink/protocol/v2/DS2Session.java | 163 ++++++------ .../dslink/protocol/v2/MessageConstants.java | 0 .../dslink/protocol/v2/MultipartReader.java | 0 .../dslink/protocol/v2/MultipartWriter.java | 0 .../dsa/dslink/protocol/v2/PingMessage.java | 0 .../v2/requester/DS2OutboundInvokeStub.java | 0 .../v2/requester/DS2OutboundListStub.java | 0 .../v2/requester/DS2OutboundRemoveStub.java | 0 .../v2/requester/DS2OutboundSetStub.java | 0 .../v2/requester/DS2OutboundStub.java | 0 .../requester/DS2OutboundSubscriptions.java | 0 .../protocol/v2/requester/DS2Requester.java | 0 .../v2/responder/DS2InboundInvoke.java | 0 .../protocol/v2/responder/DS2InboundList.java | 0 .../protocol/v2/responder/DS2InboundSet.java | 0 .../v2/responder/DS2InboundSubscription.java | 4 +- .../v2/responder/DS2InboundSubscriptions.java | 0 .../protocol/v2/responder/DS2Responder.java | 0 .../protocol/v2/responder/ErrorMessage.java | 0 .../sys/cert/AnonymousTrustFactory.java | 0 .../dsa/dslink/sys/cert/SysCertManager.java | 0 .../dslink/sys/profiler/ClassLoadingNode.java | 0 .../dslink/sys/profiler/CompilationNode.java | 0 .../sys/profiler/GarbageCollectorNode.java | 0 .../dsa/dslink/sys/profiler/MXBeanNode.java | 0 .../sys/profiler/MemoryManagerNode.java | 0 .../dsa/dslink/sys/profiler/MemoryNode.java | 0 .../dslink/sys/profiler/MemoryPoolNode.java | 0 .../sys/profiler/OperatingSystemNode.java | 0 .../dslink/sys/profiler/ProfilerUtils.java | 0 .../dsa/dslink/sys/profiler/RuntimeNode.java | 0 .../dsa/dslink/sys/profiler/SysProfiler.java | 0 .../dslink/sys/profiler/ThreadInfoNode.java | 0 .../dsa/dslink/sys/profiler/ThreadNode.java | 0 .../acuity/iot/dsa/dslink/test/TestLink.java | 2 +- .../iot/dsa/dslink/test/TestTransport.java | 0 .../iot/dsa/dslink/test/V1TestLink.java | 6 +- .../iot/dsa/dslink/test/V2TestLink.java | 6 +- .../transport/BufferedBinaryTransport.java | 4 +- .../dslink/transport/DSBinaryTransport.java | 0 .../dsa/dslink/transport/DSTextTransport.java | 0 .../iot/dsa/dslink/transport/DSTransport.java | 0 .../dsa/dslink/transport/SocketTransport.java | 0 .../transport/StreamBinaryTransport.java | 0 .../src/main/java/org/iot/dsa/DSRuntime.java | 0 .../main/java/org/iot/dsa/DSThreadPool.java | 0 .../java/org/iot/dsa/dslink/DSIRequester.java | 0 .../java/org/iot/dsa/dslink/DSIResponder.java | 0 .../dsa/dslink/DSInternalErrorException.java | 0 .../dsa/dslink/DSInvalidPathException.java | 0 .../main/java/org/iot/dsa/dslink/DSLink.java | 0 .../java/org/iot/dsa/dslink/DSLinkConfig.java | 0 .../org/iot/dsa/dslink/DSLinkConnection.java | 0 .../java/org/iot/dsa/dslink/DSMainNode.java | 0 .../iot/dsa/dslink/DSPermissionException.java | 0 .../iot/dsa/dslink/DSRequestException.java | 0 .../java/org/iot/dsa/dslink/DSSysNode.java | 0 .../dsa/dslink/DSUnsupportedException.java | 0 .../java/org/iot/dsa/dslink/package-info.java | 0 .../requester/AbstractInvokeHandler.java | 0 .../dslink/requester/AbstractListHandler.java | 0 .../requester/AbstractSubscribeHandler.java | 0 .../iot/dsa/dslink/requester/ErrorType.java | 0 .../requester/OutboundInvokeHandler.java | 0 .../dslink/requester/OutboundListHandler.java | 0 .../requester/OutboundRequestHandler.java | 0 .../dsa/dslink/requester/OutboundStream.java | 0 .../requester/OutboundSubscribeHandler.java | 5 +- .../dslink/requester/SimpleInvokeHandler.java | 0 .../requester/SimpleRequestHandler.java | 0 .../dsa/dslink/requester/package-info.java | 0 .../iot/dsa/dslink/responder/ApiObject.java | 0 .../responder/InboundInvokeRequest.java | 0 .../dslink/responder/InboundListRequest.java | 0 .../dsa/dslink/responder/InboundRequest.java | 0 .../dslink/responder/InboundSetRequest.java | 0 .../responder/InboundSubscribeRequest.java | 0 .../responder/OutboundListResponse.java | 0 .../responder/SubscriptionCloseHandler.java | 0 .../dsa/dslink/responder/package-info.java | 0 .../java/org/iot/dsa/io/AbstractReader.java | 0 .../java/org/iot/dsa/io/AbstractWriter.java | 0 .../main/java/org/iot/dsa/io/DSBase64.java | 0 .../main/java/org/iot/dsa/io/DSIReader.java | 0 .../main/java/org/iot/dsa/io/DSIWriter.java | 0 .../main/java/org/iot/dsa/io/NodeDecoder.java | 0 .../main/java/org/iot/dsa/io/NodeEncoder.java | 0 .../iot/dsa/io/json/AbstractJsonWriter.java | 0 .../iot/dsa/io/json/CharSequenceInput.java | 0 .../org/iot/dsa/io/json/JsonAppender.java | 0 .../org/iot/dsa/io/json/JsonConstants.java | 0 .../java/org/iot/dsa/io/json/JsonInput.java | 0 .../java/org/iot/dsa/io/json/JsonReader.java | 0 .../java/org/iot/dsa/io/json/JsonWriter.java | 0 .../java/org/iot/dsa/io/package-info.java | 0 .../org/iot/dsa/logging/AsyncLogHandler.java | 0 .../java/org/iot/dsa/logging/DSILevels.java | 0 .../java/org/iot/dsa/logging/DSLevel.java | 0 .../java/org/iot/dsa/logging/DSLogger.java | 0 .../java/org/iot/dsa/logging/DSLogging.java | 0 .../org/iot/dsa/logging/FileLogHandler.java | 0 .../dsa/logging/PrintStreamLogHandler.java | 0 .../org/iot/dsa/logging/package-info.java | 0 .../main/java/org/iot/dsa/node/DSBool.java | 0 .../main/java/org/iot/dsa/node/DSBytes.java | 0 .../main/java/org/iot/dsa/node/DSDouble.java | 0 .../main/java/org/iot/dsa/node/DSElement.java | 0 .../java/org/iot/dsa/node/DSElementType.java | 0 .../java/org/iot/dsa/node/DSFlexEnum.java | 0 .../main/java/org/iot/dsa/node/DSFloat.java | 0 .../main/java/org/iot/dsa/node/DSGroup.java | 0 .../java/org/iot/dsa/node/DSIBoolean.java | 0 .../main/java/org/iot/dsa/node/DSIEnum.java | 0 .../java/org/iot/dsa/node/DSIMetadata.java | 0 .../main/java/org/iot/dsa/node/DSINumber.java | 0 .../main/java/org/iot/dsa/node/DSIObject.java | 0 .../main/java/org/iot/dsa/node/DSIStatus.java | 0 .../java/org/iot/dsa/node/DSIStorable.java | 0 .../main/java/org/iot/dsa/node/DSIValue.java | 0 .../main/java/org/iot/dsa/node/DSInfo.java | 24 +- .../java/org/iot/dsa/node/DSInfoProxy.java | 0 .../src/main/java/org/iot/dsa/node/DSInt.java | 0 .../java/org/iot/dsa/node/DSJavaEnum.java | 0 .../main/java/org/iot/dsa/node/DSList.java | 0 .../main/java/org/iot/dsa/node/DSLong.java | 0 .../src/main/java/org/iot/dsa/node/DSMap.java | 0 .../java/org/iot/dsa/node/DSMetadata.java | 0 .../main/java/org/iot/dsa/node/DSNode.java | 26 +- .../main/java/org/iot/dsa/node/DSNull.java | 0 .../main/java/org/iot/dsa/node/DSPath.java | 28 ++- .../java/org/iot/dsa/node/DSRegistry.java | 0 .../main/java/org/iot/dsa/node/DSStatus.java | 0 .../main/java/org/iot/dsa/node/DSString.java | 0 .../main/java/org/iot/dsa/node/DSValue.java | 0 .../java/org/iot/dsa/node/DSValueNode.java | 0 .../java/org/iot/dsa/node/DSValueType.java | 0 .../iot/dsa/node/action/ActionInvocation.java | 0 .../org/iot/dsa/node/action/ActionResult.java | 0 .../org/iot/dsa/node/action/ActionSpec.java | 0 .../org/iot/dsa/node/action/ActionTable.java | 0 .../org/iot/dsa/node/action/ActionValues.java | 0 .../iot/dsa/node/action/DSAbstractAction.java | 10 +- .../org/iot/dsa/node/action/DSAction.java | 0 .../iot/dsa/node/action/DSActionValues.java | 0 .../java/org/iot/dsa/node/event/DSIEvent.java | 0 .../org/iot/dsa/node/event/DSISubscriber.java | 0 .../org/iot/dsa/node/event/DSInfoTopic.java | 0 .../java/org/iot/dsa/node/event/DSTopic.java | 0 .../org/iot/dsa/node/event/DSValueTopic.java | 0 .../java/org/iot/dsa/node/package-info.java | 0 .../main/java/org/iot/dsa/package-info.java | 0 .../org/iot/dsa/security/DSIPassword.java | 0 .../java/org/iot/dsa/security/DSKeys.java | 0 .../iot/dsa/security/DSPasswordAes128.java | 230 +++++++++++++++++ .../iot/dsa/security/DSPasswordAes256.java | 5 +- .../org/iot/dsa/security/DSPasswordSha1.java | 204 +++++++++++++++ .../iot/dsa/security/DSPasswordSha256.java | 9 +- .../org/iot/dsa/security/DSPermission.java | 0 .../java/org/iot/dsa/time/DSDateTime.java | 0 .../java/org/iot/dsa/time/DSInterval.java | 0 .../main/java/org/iot/dsa/time/DSTime.java | 0 .../java/org/iot/dsa/util/DSException.java | 0 .../main/java/org/iot/dsa/util/DSUtil.java | 0 .../org/iot/dsa/dslink/DSByteBufferTest.java | 0 .../org/iot/dsa/dslink/DSElementTest.java | 0 .../org/iot/dsa/dslink/DSFlexEnumTest.java | 0 .../org/iot/dsa/dslink/DSJavaEnumTest.java | 0 .../java/org/iot/dsa/dslink/DSKeysTest.java | 0 .../org/iot/dsa/dslink/DSLinkConfigTest.java | 0 .../org/iot/dsa/dslink/DSPasswordTests.java | 0 .../java/org/iot/dsa/dslink/DSPathTest.java | 0 .../java/org/iot/dsa/dslink/DSTimeTest.java | 0 .../java/org/iot/dsa/dslink/DSUtilTest.java | 0 .../java/org/iot/dsa/dslink/IntCacheTest.java | 0 .../java/org/iot/dsa/dslink/JsonTest.java | 0 .../java/org/iot/dsa/dslink/LoggingTest.java | 0 .../java/org/iot/dsa/dslink/MetadataTest.java | 0 .../java/org/iot/dsa/dslink/MsgpackTest.java | 0 .../java/org/iot/dsa/dslink/NodeTest.java | 0 .../java/org/iot/dsa/dslink/PerfTest.java | 0 .../iot/dsa/dslink/RequesterInvokeTest.java | 0 .../dsa/dslink/RequesterSubscribeTest.java | 0 .../org/iot/dsa/dslink/SerializationTest.java | 0 .../org/iot/dsa/dslink/V2HandshakeTest.java | 0 settings.gradle | 6 +- 240 files changed, 1065 insertions(+), 498 deletions(-) rename {dslink-java-v2-poc => dslink-v2-poc}/README.md (100%) rename {dslink-java-v2-poc => dslink-v2-poc}/build.gradle (68%) rename {dslink-java-v2-poc => dslink-v2-poc}/dslink.json (100%) rename {dslink-java-v2-poc => dslink-v2-poc}/src/main/java/org/iot/dsa/dslink/poc/MainNode.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/build.gradle (72%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java (100%) rename {dslink-core => dslink-v2}/build.gradle (76%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/Template.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java (98%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java (82%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java (98%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java (92%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java (90%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java (94%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java (86%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java (94%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java (93%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java (99%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/DSRuntime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/DSThreadPool.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSIRequester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSIResponder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLink.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSMainNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSPermissionException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSRequestException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSSysNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java (80%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/AbstractReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/AbstractWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSBase64.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSIReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSIWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/NodeDecoder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/NodeEncoder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonAppender.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonInput.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSILevels.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLevel.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLogger.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLogging.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/FileLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSBool.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSBytes.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSDouble.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSElement.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSElementType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSFlexEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSFloat.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSGroup.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIBoolean.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIMetadata.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSINumber.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIObject.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIStatus.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIStorable.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIValue.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInfo.java (93%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInfoProxy.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInt.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSJavaEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSLong.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSMap.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSMetadata.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSNode.java (98%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSNull.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSPath.java (91%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSRegistry.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSStatus.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSString.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValue.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValueNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValueType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionInvocation.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionResult.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionSpec.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionTable.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionValues.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java (96%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSAction.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSActionValues.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSIEvent.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSISubscriber.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSValueTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSIPassword.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSKeys.java (100%) create mode 100644 dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPasswordAes256.java (96%) create mode 100644 dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPasswordSha256.java (93%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPermission.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSDateTime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSInterval.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSTime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/util/DSException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/util/DSUtil.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSElementTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSKeysTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSPathTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSTimeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSUtilTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/IntCacheTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/JsonTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/LoggingTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/MetadataTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/MsgpackTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/NodeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/PerfTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/SerializationTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java (100%) diff --git a/.gitignore b/.gitignore index a63aebd1..337b8731 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,34 @@ # Tooling -**/.classpath -**/.idea -**/.metadata -**/.project -**/.settings -**/eclipseBin +**.classpath +**.idea +**.metadata +**.project +**.settings +**eclipseBin # Build artifacts **.class **.iml +**build +**classes +**libJar +**out +**target **/.gradle -**/build -**/out -**/libJar -**/target +**javadoc +**repository # Misc **.bak **.old **.log -**/.DS_Store +**.DS_Store # Runtime files -**/dslink.jks -**/.key -**/db -**/nodes.json -**/nodes*.zip -**/test.json +**.jks +**.key +**db +**nodes.json +**nodes*.zip +**test.json **/*.log.*.zip diff --git a/build.gradle b/build.gradle index eb16131f..d59edfad 100644 --- a/build.gradle +++ b/build.gradle @@ -7,48 +7,33 @@ buildscript { } } -apply plugin: 'nexus-workflow' -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'signing' +subprojects { -group 'org.iot-dsa' -version '0.27.0' + apply plugin: 'java' + apply plugin: 'maven' -sourceCompatibility = 1.6 -targetCompatibility = 1.6 + group 'org.iot-dsa' + version '0.28.0' -install { - repositories.mavenInstaller { - pom.project { - artifactId 'dslink-v2' + sourceCompatibility = 1.6 + targetCompatibility = 1.6 + + repositories { + mavenLocal() + mavenCentral() + maven { + url 'https://oss.sonatype.org/content/repositories/snapshots/' } } -} -repositories { - mavenLocal() - mavenCentral() - maven { - url 'https://oss.sonatype.org/content/repositories/snapshots/' + task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allJava } -} -dependencies { - testCompile 'junit:junit:[4.12,)' -} - -task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allJava -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } -artifacts { - archives sourcesJar - archives javadocJar } diff --git a/dslink-java-v2-poc/README.md b/dslink-v2-poc/README.md similarity index 100% rename from dslink-java-v2-poc/README.md rename to dslink-v2-poc/README.md diff --git a/dslink-java-v2-poc/build.gradle b/dslink-v2-poc/build.gradle similarity index 68% rename from dslink-java-v2-poc/build.gradle rename to dslink-v2-poc/build.gradle index e1942a33..e887cb7b 100644 --- a/dslink-java-v2-poc/build.gradle +++ b/dslink-v2-poc/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'application' sourceCompatibility = 1.6 targetCompatibility = 1.6 -group 'org.iot.dsa' +group 'org.iot-dsa' mainClassName = 'org.iot.dsa.dslink.DSLink' applicationDefaultJvmArgs = [ @@ -12,15 +12,11 @@ applicationDefaultJvmArgs = [ repositories { mavenLocal() mavenCentral() - maven { - url 'https://oss.sonatype.org/content/repositories/snapshots/' - } } dependencies { - compile project(':dslink-core') - compile project(':dslink-websocket-standalone') - testCompile 'junit:junit:+' + compile project(':dslink-v2') + compile project(':dslink-v2-websocket') } applicationDistribution.from(new File(project.projectDir, "/dslink.json")) diff --git a/dslink-java-v2-poc/dslink.json b/dslink-v2-poc/dslink.json similarity index 100% rename from dslink-java-v2-poc/dslink.json rename to dslink-v2-poc/dslink.json diff --git a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java b/dslink-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java similarity index 100% rename from dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java rename to dslink-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java diff --git a/dslink-websocket-standalone/build.gradle b/dslink-v2-websocket/build.gradle similarity index 72% rename from dslink-websocket-standalone/build.gradle rename to dslink-v2-websocket/build.gradle index d61d3d39..57b52b4f 100644 --- a/dslink-websocket-standalone/build.gradle +++ b/dslink-v2-websocket/build.gradle @@ -1,8 +1,13 @@ -apply from: '../build.gradle' +apply plugin: 'nexus-workflow' +apply plugin: 'signing' + +artifacts { + archives sourcesJar +} dependencies { - compile project(':dslink-core') - compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:[1.12,)' + compile project(':dslink-v2') + compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:[1.13.1,)' } signing { @@ -24,9 +29,9 @@ uploadArchives { } pom.project { - name = 'DSLink SDK V2 Websocket Implementation' - artifactId = 'dslink-websocket-standalone-v2' - description = 'V2 Implementation of Websockets for IoT DSA protocol' + name = 'V2 DSLink SDK Websockets' + artifactId = 'dslink-v2-websocket' + description = 'Default Implementation of Websockets for V2 DSLink SDK' packaging = 'jar' url = 'http://iot-dsa.org' @@ -43,14 +48,6 @@ uploadArchives { url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } - - developers { - developer { - id = 'samrg472' - name = 'Samuel Grenier' - email = 'samrg472@gmail.com' - } - } } } } diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java diff --git a/dslink-core/build.gradle b/dslink-v2/build.gradle similarity index 76% rename from dslink-core/build.gradle rename to dslink-v2/build.gradle index 8396041e..d124ff1d 100644 --- a/dslink-core/build.gradle +++ b/dslink-v2/build.gradle @@ -1,4 +1,14 @@ -apply from: '../build.gradle' +apply plugin: 'nexus-workflow' +apply plugin: 'signing' + +artifacts { + archives sourcesJar + archives javadocJar +} + +dependencies { + testCompile 'junit:junit:[4.12,)' +} javadoc { exclude("**/com/**") @@ -23,9 +33,9 @@ uploadArchives { } pom.project { - name = 'DSLink SDK V2' - artifactId = 'dslink-core-v2' - description = 'V2 Java SDK for the IoT DSA protocol' + name = 'V2 DSLink SDK' + artifactId = 'dslink-v2' + description = 'V2 DSLink SDK for IoT DSA' packaging = 'jar' url = 'http://iot-dsa.org' @@ -42,14 +52,6 @@ uploadArchives { url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } - - developers { - developer { - id = 'samrg472' - name = 'Samuel Grenier' - email = 'samrg472@gmail.com' - } - } } } } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/Template.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/Template.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/Template.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/Template.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java similarity index 98% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java index fdb56c2c..737c2428 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java @@ -18,22 +18,22 @@ public abstract class DSSession extends DSNode { /////////////////////////////////////////////////////////////////////////// - // Constants + // Class Fields /////////////////////////////////////////////////////////////////////////// private static final int MAX_MSG_ID = 2147483647; private static final long MSG_TIMEOUT = 60000; /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// + private boolean connected = false; + private DSLinkConnection connection; private long lastRecv; private long lastSend; private int nextAck = -1; private int nextMessage = 1; - private boolean connected = false; - private DSLinkConnection connection; private Object outgoingMutex = new Object(); private List outgoingRequests = new LinkedList(); private List outgoingResponses = new LinkedList(); @@ -69,42 +69,6 @@ public void disconnect() { info(getPath() + " locally closed"); } - /** - * The subclass should read and process a single message. Throw an exception to indicate - * an error. - */ - protected abstract void doRecvMessage() throws Exception; - - /** - * The subclass should send a single message. Throw an exception to indicate - * an error. - */ - protected abstract void doSendMessage() throws Exception; - - /** - * Can return null. - */ - protected OutboundMessage dequeueOutgoingResponse() { - synchronized (outgoingMutex) { - if (!outgoingResponses.isEmpty()) { - return outgoingResponses.remove(0); - } - } - return null; - } - - /** - * Can return null. - */ - protected OutboundMessage dequeueOutgoingRequest() { - synchronized (outgoingMutex) { - if (!outgoingRequests.isEmpty()) { - return outgoingRequests.remove(0); - } - } - return null; - } - /** * Add a message to the outgoing request queue. */ @@ -136,10 +100,10 @@ public DSLinkConnection getConnection() { return connection; } - @Override - protected String getLogName() { - return "Session"; - } + /** + * Last ack received from the broker. + */ + public abstract long getLastAckRcvd(); /** * The next ack id, or -1. @@ -167,47 +131,6 @@ public DSTransport getTransport() { return getConnection().getTransport(); } - protected boolean hasAckToSend() { - return nextAck > 0; - } - - protected boolean hasOutgoingRequests() { - return !outgoingRequests.isEmpty(); - } - - protected boolean hasOutgoingResponses() { - return !outgoingResponses.isEmpty(); - } - - /** - * Override point, this returns the result of hasMessagesToSend. - */ - protected boolean hasSomethingToSend() { - if (nextAck > 0) { - return true; - } - if (!outgoingResponses.isEmpty()) { - return true; - } - if (!outgoingRequests.isEmpty()) { - return true; - } - return false; - } - - protected boolean isConnected() { - return connected; - } - - /** - * Can be used to waking up a sleeping writer. - */ - protected void notifyOutgoing() { - synchronized (outgoingMutex) { - outgoingMutex.notify(); - } - } - /** * Override point, called when the previous connection can be resumed. The the transport will * have already been set. @@ -233,6 +156,28 @@ public void onDisconnect() { } } + /** + * Called by the connection, this manages the running state and calls doRun for the specific + * implementation. A separate thread is spun off to manage writing. + */ + public void run() { + lastRecv = lastSend = System.currentTimeMillis(); + new WriteThread(getConnection().getLink().getLinkName() + " Writer").start(); + while (connected) { + try { + verifyLastSend(); + doRecvMessage(); + lastRecv = System.currentTimeMillis(); + } catch (Exception x) { + getTransport().close(); + if (connected) { + connected = false; + error(getPath(), x); + } + } + } + } + /** * Call for each incoming message id that needs to be acked. */ @@ -253,25 +198,85 @@ public void setRequesterAllowed() { public abstract boolean shouldEndMessage(); /** - * Called by the connection, this manages the running state and calls doRun for the specific - * implementation. A separate thread is spun off to manage writing. + * Can return null. */ - public void run() { - lastRecv = lastSend = System.currentTimeMillis(); - new WriteThread(getConnection().getLink().getLinkName() + " Writer").start(); - while (connected) { - try { - verifyLastSend(); - doRecvMessage(); - lastRecv = System.currentTimeMillis(); - } catch (Exception x) { - getTransport().close(); - if (connected) { - connected = false; - error(getPath(), x); - } + protected OutboundMessage dequeueOutgoingRequest() { + synchronized (outgoingMutex) { + if (!outgoingRequests.isEmpty()) { + return outgoingRequests.remove(0); } } + return null; + } + + /** + * Can return null. + */ + protected OutboundMessage dequeueOutgoingResponse() { + synchronized (outgoingMutex) { + if (!outgoingResponses.isEmpty()) { + return outgoingResponses.remove(0); + } + } + return null; + } + + /** + * The subclass should read and process a single message. Throw an exception to indicate + * an error. + */ + protected abstract void doRecvMessage() throws Exception; + + /** + * The subclass should send a single message. Throw an exception to indicate + * an error. + */ + protected abstract void doSendMessage() throws Exception; + + @Override + protected String getLogName() { + return "Session"; + } + + protected boolean hasAckToSend() { + return nextAck > 0; + } + + protected boolean hasOutgoingRequests() { + return !outgoingRequests.isEmpty(); + } + + protected boolean hasOutgoingResponses() { + return !outgoingResponses.isEmpty(); + } + + /** + * Override point, this returns the result of hasMessagesToSend. + */ + protected boolean hasSomethingToSend() { + if (nextAck > 0) { + return true; + } + if (!outgoingResponses.isEmpty()) { + return true; + } + if (!outgoingRequests.isEmpty()) { + return true; + } + return false; + } + + protected boolean isConnected() { + return connected; + } + + /** + * Can be used to waking up a sleeping writer. + */ + protected void notifyOutgoing() { + synchronized (outgoingMutex) { + outgoingMutex.notify(); + } } private void verifyLastRead() throws IOException { diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java similarity index 82% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java index 18968df1..4bf07402 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java @@ -1,12 +1,18 @@ package com.acuity.iot.dsa.dslink.protocol.responder; +import com.acuity.iot.dsa.dslink.protocol.DSSession; import com.acuity.iot.dsa.dslink.protocol.message.MessageWriter; import com.acuity.iot.dsa.dslink.protocol.message.RequestPath; import org.iot.dsa.dslink.DSIResponder; import org.iot.dsa.dslink.responder.InboundSubscribeRequest; import org.iot.dsa.dslink.responder.SubscriptionCloseHandler; import org.iot.dsa.io.DSIWriter; -import org.iot.dsa.node.*; +import org.iot.dsa.node.DSIObject; +import org.iot.dsa.node.DSIStatus; +import org.iot.dsa.node.DSIValue; +import org.iot.dsa.node.DSInfo; +import org.iot.dsa.node.DSNode; +import org.iot.dsa.node.DSStatus; import org.iot.dsa.node.event.DSIEvent; import org.iot.dsa.node.event.DSISubscriber; import org.iot.dsa.node.event.DSTopic; @@ -22,7 +28,7 @@ public class DSInboundSubscription extends DSInboundRequest implements DSISubscriber, InboundSubscribeRequest { /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// private DSInfo child; @@ -32,8 +38,8 @@ public class DSInboundSubscription extends DSInboundRequest private DSInboundSubscriptions manager; private DSNode node; private boolean open = true; - private Integer sid; private int qos = 0; + private Integer sid; private Update updateHead; private Update updateTail; @@ -41,10 +47,14 @@ public class DSInboundSubscription extends DSInboundRequest // Constructors /////////////////////////////////////////////////////////////////////////// - protected DSInboundSubscription(DSInboundSubscriptions manager, Integer sid, String path, + protected DSInboundSubscription(DSInboundSubscriptions manager, + Integer sid, + String path, int qos) { this.manager = manager; this.sid = sid; + setResponder(manager.getResponder()); + setSession(manager.getResponder().getSession()); setPath(path); this.qos = qos; setLink(manager.getLink()); @@ -52,7 +62,7 @@ protected DSInboundSubscription(DSInboundSubscriptions manager, Integer sid, Str } /////////////////////////////////////////////////////////////////////////// - // Methods in alphabetical order + // Public Methods /////////////////////////////////////////////////////////////////////////// @Override @@ -60,24 +70,6 @@ public void close() { manager.unsubscribe(sid); } - /** - * Remove an update from the queue. - */ - protected synchronized Update dequeue() { - if (updateHead == null) { - return null; - } - Update ret = null; - ret = updateHead; - if (updateHead == updateTail) { - updateHead = updateTail = null; - } else { - updateHead = updateHead.next; - } - ret.next = null; - return ret; - } - /** * Unique subscription id for this path. */ @@ -86,30 +78,6 @@ public Integer getSubscriptionId() { return sid; } - protected void init() { - RequestPath path = new RequestPath(getPath(), getLink()); - if (path.isResponder()) { - DSIResponder responder = (DSIResponder) path.getTarget(); - setPath(path.getPath()); - closeHandler = responder.onSubscribe(this); - } else { - DSIObject obj = path.getTarget(); - if (obj instanceof DSNode) { - node = (DSNode) obj; - node.subscribe(DSNode.VALUE_TOPIC, null, this); - onEvent(DSNode.VALUE_TOPIC, Event.NODE_CHANGED, node, null, - (Object[]) null); - } else { - DSInfo info = path.getInfo(); - node = path.getParent(); - child = info; - node.subscribe(DSNode.VALUE_TOPIC, info, this); - onEvent(DSNode.VALUE_TOPIC, Event.CHILD_CHANGED, node, info, - (Object[]) null); - } - } - } - /** * For v2 only. */ @@ -117,32 +85,6 @@ public boolean isCloseAfterUpdate() { return closeAfterUpdate; } - /** - * Called no matter how closed. - */ - void onClose() { - synchronized (this) { - if (!open) { - return; - } - open = false; - } - try { - if (closeHandler != null) { - closeHandler.onClose(getSubscriptionId()); - } - } catch (Exception x) { - manager.warn(manager.getPath(), x); - } - try { - if (node != null) { - node.unsubscribe(DSNode.VALUE_TOPIC, child, this); - } - } catch (Exception x) { - manager.warn(manager.getPath(), x); - } - } - @Override public void onEvent(DSTopic topic, DSIEvent event, DSNode node, DSInfo child, Object... params) { @@ -152,11 +94,11 @@ public void onEvent(DSTopic topic, DSIEvent event, DSNode node, DSInfo child, } else { value = (DSIValue) node; } - DSStatus quality = DSStatus.ok; + DSStatus status = DSStatus.ok; if (value instanceof DSIStatus) { - quality = ((DSIStatus) value).toStatus(); + status = ((DSIStatus) value).toStatus(); } - update(System.currentTimeMillis(), value, quality); + update(System.currentTimeMillis(), value, status); } @Override @@ -164,11 +106,21 @@ public void onUnsubscribed(DSTopic topic, DSNode node, DSInfo info) { close(); } + public DSInboundSubscription setCloseAfterUpdate(boolean closeAfterUpdate) { + this.closeAfterUpdate = closeAfterUpdate; + return this; + } + + @Override + public String toString() { + return "Subscription (" + getSubscriptionId() + ") " + getPath(); + } + /** * The responder should call this whenever the value or status changes. */ @Override - public void update(long timestamp, DSIValue value, DSStatus quality) { + public void update(long timestamp, DSIValue value, DSStatus status) { if (!open) { return; } @@ -176,21 +128,22 @@ public void update(long timestamp, DSIValue value, DSStatus quality) { if (qos == 0) { synchronized (this) { if (updateHead == null) { - updateHead = updateTail = new Update(); + updateHead = new Update(); } - updateHead.set(timestamp, value, quality); + updateHead.set(timestamp, value, status); if (enqueued) { return; } enqueued = true; } } else { - Update update = new Update().set(timestamp, value, quality); + Update update = new Update().set(timestamp, value, status); synchronized (this) { if (updateHead == null) { updateHead = updateTail = update; } else { updateTail.next = update; + updateTail = update; } if (enqueued) { return; @@ -201,9 +154,49 @@ public void update(long timestamp, DSIValue value, DSStatus quality) { manager.enqueue(this); } - public DSInboundSubscription setCloseAfterUpdate(boolean closeAfterUpdate) { - this.closeAfterUpdate = closeAfterUpdate; - return this; + /////////////////////////////////////////////////////////////////////////// + // Protected Methods + /////////////////////////////////////////////////////////////////////////// + + /** + * Remove an update from the queue. + */ + protected synchronized Update dequeue() { + if (updateHead == null) { + return null; + } + Update ret = updateHead; + if (updateHead == updateTail) { + updateHead = updateTail = null; + } else { + updateHead = updateHead.next; + } + ret.next = null; + return ret; + } + + protected void init() { + RequestPath path = new RequestPath(getPath(), getLink()); + if (path.isResponder()) { + DSIResponder responder = (DSIResponder) path.getTarget(); + setPath(path.getPath()); + closeHandler = responder.onSubscribe(this); + } else { + DSIObject obj = path.getTarget(); + if (obj instanceof DSNode) { + node = (DSNode) obj; + node.subscribe(DSNode.VALUE_TOPIC, null, this); + onEvent(DSNode.VALUE_TOPIC, Event.NODE_CHANGED, node, null, + (Object[]) null); + } else { + DSInfo info = path.getInfo(); + node = path.getParent(); + child = info; + node.subscribe(DSNode.VALUE_TOPIC, info, this); + onEvent(DSNode.VALUE_TOPIC, Event.CHILD_CHANGED, node, info, + (Object[]) null); + } + } } protected DSInboundSubscription setQos(int qos) { @@ -211,12 +204,6 @@ protected DSInboundSubscription setQos(int qos) { return this; } - @Override - public String toString() { - return "Subscription (" + getSubscriptionId() + ") " + getPath(); - } - - /** * Encodes one or more updates. * @@ -224,19 +211,20 @@ public String toString() { * @param buf For encoding timestamps. */ protected void write(MessageWriter writer, StringBuilder buf) { - DSResponder session = getResponder(); + DSSession session = getSession(); Update update = dequeue(); while (update != null) { write(update, writer, buf); if ((qos == 0) || session.shouldEndMessage()) { break; } + update = dequeue(); } synchronized (this) { if (updateHead == null) { if (qos == 0) { //reuse instance - updateHead = updateTail = update; + updateHead = update; } enqueued = false; return; @@ -261,12 +249,42 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { DSTime.encode(update.timestamp, true, buf); out.key("ts").value(buf.toString()); out.key("value").value(update.value.toElement()); - if ((update.quality != null) && !update.quality.isOk()) { - out.key("quality").value(update.quality.toString()); + if ((update.status != null) && !update.status.isOk()) { + out.key("status").value(update.status.toString()); } out.endMap(); } + /////////////////////////////////////////////////////////////////////////// + // Package / Private Methods + /////////////////////////////////////////////////////////////////////////// + + /** + * Called no matter how closed. + */ + void onClose() { + synchronized (this) { + if (!open) { + return; + } + open = false; + } + try { + if (closeHandler != null) { + closeHandler.onClose(getSubscriptionId()); + } + } catch (Exception x) { + manager.warn(manager.getPath(), x); + } + try { + if (node != null) { + node.unsubscribe(DSNode.VALUE_TOPIC, child, this); + } + } catch (Exception x) { + manager.warn(manager.getPath(), x); + } + } + /////////////////////////////////////////////////////////////////////////// // Inner Classes /////////////////////////////////////////////////////////////////////////// @@ -274,14 +292,14 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { protected class Update { Update next; + public DSStatus status; public long timestamp; public DSIValue value; - public DSStatus quality; - Update set(long timestamp, DSIValue value, DSStatus quality) { + Update set(long timestamp, DSIValue value, DSStatus status) { this.timestamp = timestamp; this.value = value; - this.quality = quality; + this.status = status; return this; } } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java similarity index 98% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java index d9acd5e6..a7c9b274 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java @@ -25,7 +25,7 @@ public class DS1ConnectionInit extends DSNode { /////////////////////////////////////////////////////////////////////////// - // Constants + // Class Fields /////////////////////////////////////////////////////////////////////////// private static final String DSA_VERSION = "1.1.2"; @@ -36,7 +36,7 @@ public class DS1ConnectionInit extends DSNode { private String BROKER_RES = "Broker Response"; /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// private String authToken; @@ -46,11 +46,19 @@ public class DS1ConnectionInit extends DSNode { private DSMap response; /////////////////////////////////////////////////////////////////////////// - // Constructors + // Public Methods /////////////////////////////////////////////////////////////////////////// + @Override + public void onStable() { + this.connection = (DS1LinkConnection) getParent(); + this.link = connection.getLink(); + this.authToken = link.getConfig().getToken(); + this.brokerUri = link.getConfig().getBrokerUri(); + } + /////////////////////////////////////////////////////////////////////////// - // Methods + // Package / Private Methods /////////////////////////////////////////////////////////////////////////// DSLink getLink() { @@ -177,14 +185,6 @@ String makeWsUrl(String wsPath) { return buf.toString(); } - @Override - public void onStable() { - this.connection = (DS1LinkConnection) getParent(); - this.link = connection.getLink(); - this.authToken = link.getConfig().getToken(); - this.brokerUri = link.getConfig().getBrokerUri(); - } - /** * Throws an exception with a useful error message. */ diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java similarity index 92% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java index ea3f6d30..f2899bbf 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java @@ -1,5 +1,11 @@ package com.acuity.iot.dsa.dslink.protocol.v1; +import static org.iot.dsa.io.DSIReader.Token.BEGIN_LIST; +import static org.iot.dsa.io.DSIReader.Token.BEGIN_MAP; +import static org.iot.dsa.io.DSIReader.Token.END_LIST; +import static org.iot.dsa.io.DSIReader.Token.END_MAP; +import static org.iot.dsa.io.DSIReader.Token.NULL; + import com.acuity.iot.dsa.dslink.protocol.DSProtocolException; import com.acuity.iot.dsa.dslink.protocol.DSSession; import com.acuity.iot.dsa.dslink.protocol.message.MessageWriter; @@ -15,7 +21,6 @@ import org.iot.dsa.node.DSInfo; import org.iot.dsa.node.DSInt; import org.iot.dsa.node.DSMap; -import static org.iot.dsa.io.DSIReader.Token.*; /** * Implements DSA 1.1.2 @@ -29,7 +34,7 @@ public class DS1Session extends DSSession { /////////////////////////////////////////////////////////////////////////// static final int END_MSG_THRESHOLD = 48000; - static final String LAST_ACK_RECV = "Last Ack Recv"; + static final String LAST_ACK_RCVD = "Last Ack Rcvd"; static final String LAST_ACK_SENT = "Last Ack Sent"; static final int MAX_MSG_IVL = 45000; @@ -38,12 +43,12 @@ public class DS1Session extends DSSession { // Fields /////////////////////////////////////////////////////////////////////////// - private DSInfo lastAckRecv = getInfo(LAST_ACK_RECV); + private DSInfo lastAckRcvd = getInfo(LAST_ACK_RCVD); private DSInfo lastAckSent = getInfo(LAST_ACK_SENT); private long lastMessageSent; private MessageWriter messageWriter; - private boolean requestsNext = false; private DS1Requester requester = new DS1Requester(this); + private boolean requestsNext = false; private DS1Responder responder = new DS1Responder(this); ///////////////////////////////////////////////////////////////// @@ -58,7 +63,80 @@ public DS1Session(DS1LinkConnection connection) { } ///////////////////////////////////////////////////////////////// - // Methods + // Public Methods + ///////////////////////////////////////////////////////////////// + + @Override + public DS1LinkConnection getConnection() { + return (DS1LinkConnection) super.getConnection(); + } + + @Override + public long getLastAckRcvd() { + return lastAckRcvd.getElement().toLong(); + } + + public DSIReader getReader() { + return getConnection().getReader(); + } + + @Override + public DSIRequester getRequester() { + return requester; + } + + @Override + public void onConnect() { + super.onConnect(); + requester.onConnect(); + responder.onConnect(); + } + + @Override + public void onConnectFail() { + super.onConnectFail(); + requester.onConnectFail(); + responder.onConnectFail(); + } + + @Override + public void onDisconnect() { + super.onDisconnect(); + requester.onDisconnect(); + responder.onDisconnect(); + } + + /** + * Returns true if the current message size has crossed a message size threshold. + */ + public boolean shouldEndMessage() { + return (getWriter().length() + getTransport().messageSize()) > END_MSG_THRESHOLD; + } + + /** + * Write a request in the current message. Can be called multiple times after beginRequests() is + * called. endRequests() will be called once the request part of the message is complete. + * + * @see #beginRequests() + * @see #endRequests() + */ + public void writeRequest(OutboundMessage message) { + message.write(getMessageWriter()); + } + + /** + * Write a response in the current message. Can be called multiple times after beginResponses() + * is called. endResponses() will be called once the response part of the message is complete. + * + * @see #beginResponses() + * @see #endResponses() + */ + public void writeResponse(OutboundMessage message) { + message.write(getMessageWriter()); + } + + ///////////////////////////////////////////////////////////////// + // Protected Methods ///////////////////////////////////////////////////////////////// /** @@ -81,39 +159,39 @@ protected void beginMessage() { } /** - * Prepare for the response portion of the message. This will be followed by one or more calls - * to writeResponse(). When there are no more responses, endResponses() will be called. + * Prepare for the request portion of the message. This will be followed by one or more calls + * to writeRequest(). When there are no more responses, endRequests() will be called. * * @see #writeResponse(OutboundMessage) * @see #endResponses() */ - protected void beginResponses() { - getWriter().key("responses").beginList(); + protected void beginRequests() { + getWriter().key("requests").beginList(); } /** - * Prepare for the request portion of the message. This will be followed by one or more calls - * to writeRequest(). When there are no more responses, endRequests() will be called. + * Prepare for the response portion of the message. This will be followed by one or more calls + * to writeResponse(). When there are no more responses, endResponses() will be called. * * @see #writeResponse(OutboundMessage) * @see #endResponses() */ - protected void beginRequests() { - getWriter().key("requests").beginList(); + protected void beginResponses() { + getWriter().key("responses").beginList(); } @Override protected void declareDefaults() { - declareDefault(LAST_ACK_RECV, DSInt.NULL).setReadOnly(true); + declareDefault(LAST_ACK_RCVD, DSInt.NULL).setReadOnly(true); declareDefault(LAST_ACK_SENT, DSInt.NULL).setReadOnly(true); } @Override protected void doRecvMessage() throws IOException { DSIReader reader = getReader(); + getTransport().beginRecvMessage(); switch (reader.next()) { case BEGIN_MAP: - getTransport().beginRecvMessage(); processEnvelope(reader); getTransport().endRecvMessage(); break; @@ -155,15 +233,13 @@ protected void endMessage() { getWriter().endMap().flush(); } - /** - * Complete the outgoing responses part of the message. - * - * @see #beginResponses() - * @see #writeResponse(OutboundMessage) - */ - protected void endResponses() { - getWriter().endList(); + /* + @Override + protected void onStable() { + put("Requester Session", requesterSession); + put("Responder Session", responderSession); } + */ /** * Complete the outgoing requests part of the message. @@ -175,33 +251,14 @@ protected void endRequests() { getWriter().endList(); } - @Override - public DS1LinkConnection getConnection() { - return (DS1LinkConnection) super.getConnection(); - } - - private MessageWriter getMessageWriter() { - if (messageWriter == null) { - messageWriter = new MyMessageWriter(getConnection().getWriter()); - } - return messageWriter; - } - - public DSIReader getReader() { - return getConnection().getReader(); - } - - @Override - public DSIRequester getRequester() { - return requester; - } - - private DSIWriter getWriter() { - return getMessageWriter().getWriter(); - } - - private boolean hasPingToSend() { - return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; + /** + * Complete the outgoing responses part of the message. + * + * @see #beginResponses() + * @see #writeResponse(OutboundMessage) + */ + protected void endResponses() { + getWriter().endList(); } /** @@ -214,35 +271,6 @@ protected boolean hasSomethingToSend() { return super.hasSomethingToSend(); } - /* - @Override - protected void onStable() { - put("Requester Session", requesterSession); - put("Responder Session", responderSession); - } - */ - - @Override - public void onConnect() { - super.onConnect(); - requester.onConnect(); - responder.onConnect(); - } - - @Override - public void onConnectFail() { - super.onConnectFail(); - requester.onConnectFail(); - responder.onConnectFail(); - } - - @Override - public void onDisconnect() { - super.onDisconnect(); - requester.onDisconnect(); - responder.onDisconnect(); - } - /** * Decomposes and processes a complete envelope which can contain multiple requests and * responses. @@ -277,7 +305,7 @@ protected void processEnvelope(DSIReader reader) { msg = (int) reader.getLong(); } else if (key.equals("ack")) { reader.next(); - put(lastAckRecv, DSInt.valueOf((int) reader.getLong())); + put(lastAckRcvd, DSInt.valueOf((int) reader.getLong())); } else if (key.equals("allowed")) { if (reader.next() != Token.BOOLEAN) { throw new IllegalStateException("Allowed not a boolean"); @@ -287,6 +315,7 @@ protected void processEnvelope(DSIReader reader) { getConnection().setRequesterAllowed(); } } else if (key.equals("salt")) { + reader.next(); String s = reader.getElement().toString(); fine(fine() ? "Next salt: " + s : null); getConnection().updateSalt(s); @@ -332,6 +361,25 @@ protected void processMessages(DSIReader reader, boolean areRequests) { } } + ///////////////////////////////////////////////////////////////// + // Package / Private Methods + ///////////////////////////////////////////////////////////////// + + private MessageWriter getMessageWriter() { + if (messageWriter == null) { + messageWriter = new MyMessageWriter(getConnection().getWriter()); + } + return messageWriter; + } + + private DSIWriter getWriter() { + return getMessageWriter().getWriter(); + } + + private boolean hasPingToSend() { + return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; + } + /** * Send messages from one of the queues. * @@ -371,35 +419,6 @@ private void send(boolean requests, long endTime) { } } - /** - * Returns true if the current message size has crossed a message size threshold. - */ - public boolean shouldEndMessage() { - return (getWriter().length() + getTransport().messageSize()) > END_MSG_THRESHOLD; - } - - /** - * Write a request in the current message. Can be called multiple times after beginRequests() is - * called. endRequests() will be called once the request part of the message is complete. - * - * @see #beginRequests() - * @see #endRequests() - */ - public void writeRequest(OutboundMessage message) { - message.write(getMessageWriter()); - } - - /** - * Write a response in the current message. Can be called multiple times after beginResponses() - * is called. endResponses() will be called once the response part of the message is complete. - * - * @see #beginResponses() - * @see #endResponses() - */ - public void writeResponse(OutboundMessage message) { - message.write(getMessageWriter()); - } - ///////////////////////////////////////////////////////////////// // Inner Classes ///////////////////////////////////////////////////////////////// diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java similarity index 90% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java index 88d813af..9e7fb10e 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java @@ -25,20 +25,20 @@ public class DS2Session extends DSSession implements MessageConstants { /////////////////////////////////////////////////////////////////////////// static final int END_MSG_THRESHOLD = 48 * 1024; - static final String LAST_ACK_RECV = "Last Ack Recv"; + static final String LAST_ACK_RCVD = "Last Ack Rcvd"; static final int MAX_MSG_IVL = 45000; /////////////////////////////////////////////////////////////////////////// // Fields /////////////////////////////////////////////////////////////////////////// - private DSInfo lastAckRecv = getInfo(LAST_ACK_RECV); + private DSInfo lastAckRcvd = getInfo(LAST_ACK_RCVD); private long lastMessageSent; private DS2MessageReader messageReader; private DS2MessageWriter messageWriter; private Map multiparts = new HashMap(); - private boolean requestsNext = false; private DS2Requester requester = new DS2Requester(this); + private boolean requestsNext = false; private DS2Responder responder = new DS2Responder(this); ///////////////////////////////////////////////////////////////// @@ -53,12 +53,74 @@ public DS2Session(DS2LinkConnection connection) { } ///////////////////////////////////////////////////////////////// - // Methods + // Public Methods + ///////////////////////////////////////////////////////////////// + + @Override + public DS2LinkConnection getConnection() { + return (DS2LinkConnection) super.getConnection(); + } + + @Override + public long getLastAckRcvd() { + return lastAckRcvd.getElement().toLong(); + } + + @Override + public DSIRequester getRequester() { + return requester; + } + + public DSBinaryTransport getTransport() { + return (DSBinaryTransport) super.getTransport(); + } + + @Override + public void onConnect() { + super.onConnect(); + messageReader = null; + messageWriter = null; + requester.onConnect(); + responder.onConnect(); + } + + @Override + public void onConnectFail() { + super.onConnectFail(); + messageReader = null; + messageWriter = null; + multiparts.clear(); + requester.onConnectFail(); + responder.onConnectFail(); + } + + @Override + public void onDisconnect() { + super.onDisconnect(); + messageReader = null; + messageWriter = null; + multiparts.clear(); + requester.onDisconnect(); + responder.onDisconnect(); + } + + /** + * Returns true if the current message size has crossed a message size threshold. + */ + public boolean shouldEndMessage() { + if (getMessageWriter().getBodyLength() > END_MSG_THRESHOLD) { + return true; + } + return (System.currentTimeMillis() - lastMessageSent) > 1000; + } + + ///////////////////////////////////////////////////////////////// + // Protected Methods ///////////////////////////////////////////////////////////////// @Override protected void declareDefaults() { - declareDefault(LAST_ACK_RECV, DSInt.NULL).setReadOnly(true); + declareDefault(LAST_ACK_RCVD, DSInt.NULL).setReadOnly(true); } @Override @@ -69,7 +131,7 @@ protected void doRecvMessage() { reader.init(transport.getInput()); int ack = reader.getAckId(); if (ack > 0) { - put(lastAckRecv, DSInt.valueOf(ack)); + put(lastAckRcvd, DSInt.valueOf(ack)); } if (reader.isMultipart()) { MultipartReader multi = multiparts.get(reader.getRequestId()); @@ -87,7 +149,7 @@ protected void doRecvMessage() { responder.handleRequest(reader); setNextAck(reader.getRequestId()); } else if (reader.isAck()) { - put(lastAckRecv, DSInt.valueOf(DSBytes.readInt(reader.getBody(), false))); + put(lastAckRcvd, DSInt.valueOf(DSBytes.readInt(reader.getBody(), false))); } else if (reader.isPing()) { ; } else if (reader.isResponse()) { @@ -109,10 +171,27 @@ protected void doSendMessage() { } } + /* @Override - public DS2LinkConnection getConnection() { - return (DS2LinkConnection) super.getConnection(); + protected void onStable() { + put("Requester Session", requesterSession); + put("Responder Session", responderSession); } + */ + + /** + * Override point, returns true if there are any pending acks or outbound messages queued up. + */ + protected boolean hasSomethingToSend() { + if (hasPingToSend()) { + return true; + } + return super.hasSomethingToSend(); + } + + ///////////////////////////////////////////////////////////////// + // Package / Private Methods + ///////////////////////////////////////////////////////////////// private DS2MessageReader getMessageReader() { if (messageReader == null) { @@ -128,66 +207,10 @@ private DS2MessageWriter getMessageWriter() { return messageWriter; } - @Override - public DSIRequester getRequester() { - return requester; - } - - public DSBinaryTransport getTransport() { - return (DSBinaryTransport) super.getTransport(); - } - private boolean hasPingToSend() { return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; } - /** - * Override point, returns true if there are any pending acks or outbound messages queued up. - */ - protected boolean hasSomethingToSend() { - if (hasPingToSend()) { - return true; - } - return super.hasSomethingToSend(); - } - - /* - @Override - protected void onStable() { - put("Requester Session", requesterSession); - put("Responder Session", responderSession); - } - */ - - @Override - public void onConnect() { - super.onConnect(); - messageReader = null; - messageWriter = null; - requester.onConnect(); - responder.onConnect(); - } - - @Override - public void onConnectFail() { - super.onConnectFail(); - messageReader = null; - messageWriter = null; - multiparts.clear(); - requester.onConnectFail(); - responder.onConnectFail(); - } - - @Override - public void onDisconnect() { - super.onDisconnect(); - messageReader = null; - messageWriter = null; - multiparts.clear(); - requester.onDisconnect(); - responder.onDisconnect(); - } - /** * Send messages from one of the queues. * @@ -220,14 +243,4 @@ private void send(boolean requests) { } } - /** - * Returns true if the current message size has crossed a message size threshold. - */ - public boolean shouldEndMessage() { - if (getMessageWriter().getBodyLength() > END_MSG_THRESHOLD) { - return true; - } - return (System.currentTimeMillis() - lastMessageSent) > 1000; - } - } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java similarity index 94% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java index adb26490..0a710899 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java @@ -39,8 +39,8 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { buf.setLength(0); DSTime.encode(update.timestamp, true, buf); dsiWriter.key("timestamp").value(buf.toString()); - if (!update.quality.isOk()) { - dsiWriter.key("status").value(update.quality.toElement()); + if (!update.status.isOk()) { + dsiWriter.key("status").value(update.status.toElement()); } dsiWriter.endMap(); int end = byteBuffer.length(); diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java similarity index 86% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java index 696b0300..6f831c9c 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java @@ -7,7 +7,7 @@ * * @author Aaron Hansen */ -public class TestLink extends V2TestLink { +public class TestLink extends V1TestLink { public TestLink() { } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java similarity index 94% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java index 675f532e..06b6bf70 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java @@ -26,7 +26,7 @@ public V1TestLink(DSMainNode MainNode) { DSLinkConfig cfg = new DSLinkConfig(); cfg.setDslinkJson(new DSMap().put("configs", new DSMap())); cfg.setLinkName("dslink-java-testing"); - cfg.setLogLevel(Level.FINEST); + //cfg.setLogLevel(Level.FINEST); cfg.setConfig(DSLinkConfig.CFG_CONNECTION_TYPE, TestConnection.class.getName()); cfg.setConfig(DSLinkConfig.CFG_STABLE_DELAY, 1); init(cfg); @@ -34,6 +34,10 @@ public V1TestLink(DSMainNode MainNode) { public static class TestConnection extends DS1LinkConnection { + public String getPathInBroker() { + return ""; + } + protected DS1ConnectionInit initializeConnection() { return new DS1ConnectionInit(); } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java similarity index 93% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java index b4ae270f..4e49629d 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java @@ -26,7 +26,7 @@ public V2TestLink(DSMainNode MainNode) { DSLinkConfig cfg = new DSLinkConfig(); cfg.setDslinkJson(new DSMap().put("configs", new DSMap())); cfg.setLinkName("dslink-java-testing"); - cfg.setLogLevel(Level.FINEST); + //cfg.setLogLevel(Level.FINEST); cfg.setConfig(DSLinkConfig.CFG_CONNECTION_TYPE, TestConnection.class.getName()); cfg.setConfig(DSLinkConfig.CFG_STABLE_DELAY, 1); init(cfg); @@ -34,6 +34,10 @@ public V2TestLink(DSMainNode MainNode) { public static class TestConnection extends DS2LinkConnection { + public String getPathInBroker() { + return ""; + } + @Override protected DSBinaryTransport makeTransport() { TestTransport transport = new TestTransport(); diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java similarity index 99% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java index bf39e6b0..1bec107a 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java @@ -40,7 +40,6 @@ public void beginRecvMessage() { if (traceIn == null) { traceIn = new StringBuilder(); } - traceInSize = 0; traceIn.append("Recv:\n"); } } @@ -51,7 +50,6 @@ public void beginSendMessage() { if (traceOut == null) { traceOut = new StringBuilder(); } - traceOutSize = 0; traceOut.append("Send:\n"); } } @@ -86,6 +84,7 @@ public void endRecvMessage() { trace(traceIn.toString()); } traceIn.setLength(0); + traceInSize = 0; } } else if (traceIn != null) { traceIn = null; @@ -100,6 +99,7 @@ public void endSendMessage() { trace(traceOut.toString()); } traceOut.setLength(0); + traceOutSize = 0; } } else if (traceOut != null) { traceOut = null; diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java diff --git a/dslink-core/src/main/java/org/iot/dsa/DSRuntime.java b/dslink-v2/src/main/java/org/iot/dsa/DSRuntime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/DSRuntime.java rename to dslink-v2/src/main/java/org/iot/dsa/DSRuntime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/DSThreadPool.java b/dslink-v2/src/main/java/org/iot/dsa/DSThreadPool.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/DSThreadPool.java rename to dslink-v2/src/main/java/org/iot/dsa/DSThreadPool.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSIRequester.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSIRequester.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSIRequester.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSIRequester.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSIResponder.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSIResponder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSIResponder.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSIResponder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLink.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLink.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSMainNode.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSMainNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSMainNode.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSMainNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSPermissionException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSPermissionException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSPermissionException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSPermissionException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSRequestException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSRequestException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSRequestException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSRequestException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSSysNode.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSSysNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSSysNode.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSSysNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java similarity index 80% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java index d483f906..54b69580 100644 --- a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java +++ b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java @@ -12,7 +12,10 @@ public interface OutboundSubscribeHandler extends OutboundRequestHandler { /** - * Called by the requester before returning from the subscribe method. + * Called by the requester before returning from the subscribe method. The actual subscribe + * message will not have sent yet. If there is a problem with the subscription + * onError will be called, otherwise onUpdate will be called whenever the responder sends + * an update. * * @param path Who is being subscribed. * @param qos Quality of service, 0-3. diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/AbstractReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/AbstractReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/AbstractReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/AbstractReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/AbstractWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/AbstractWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/AbstractWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/AbstractWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSBase64.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSBase64.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSBase64.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSBase64.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSIReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSIReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSIReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSIReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSIWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSIWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSIWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSIWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/NodeDecoder.java b/dslink-v2/src/main/java/org/iot/dsa/io/NodeDecoder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/NodeDecoder.java rename to dslink-v2/src/main/java/org/iot/dsa/io/NodeDecoder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/NodeEncoder.java b/dslink-v2/src/main/java/org/iot/dsa/io/NodeEncoder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/NodeEncoder.java rename to dslink-v2/src/main/java/org/iot/dsa/io/NodeEncoder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonAppender.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonAppender.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonAppender.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonAppender.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonConstants.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonConstants.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonConstants.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonConstants.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonInput.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonInput.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonInput.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonInput.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/io/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/io/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSILevels.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSILevels.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSILevels.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSILevels.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLevel.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLevel.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLevel.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLevel.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLogger.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLogger.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLogger.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLogger.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLogging.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLogging.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLogging.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLogging.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/FileLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/FileLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/FileLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/FileLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/logging/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSBool.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSBool.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSBool.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSBool.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSBytes.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSBytes.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSBytes.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSBytes.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSDouble.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSDouble.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSDouble.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSDouble.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSElement.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSElement.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSElement.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSElement.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSElementType.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSElementType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSElementType.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSElementType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSFlexEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSFlexEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSFlexEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSFlexEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSFloat.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSFloat.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSFloat.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSFloat.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSGroup.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSGroup.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSGroup.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSGroup.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIBoolean.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIBoolean.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIBoolean.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIBoolean.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIMetadata.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIMetadata.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIMetadata.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIMetadata.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSINumber.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSINumber.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSINumber.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSINumber.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIObject.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIObject.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIObject.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIObject.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIStatus.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIStatus.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIStatus.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIStatus.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIStorable.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIStorable.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIStorable.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIStorable.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIValue.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIValue.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIValue.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIValue.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java similarity index 93% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java index 64fd1457..2cf4050b 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java @@ -3,7 +3,6 @@ import java.util.Iterator; import org.iot.dsa.dslink.responder.ApiObject; import org.iot.dsa.node.action.DSAbstractAction; -import org.iot.dsa.node.action.DSAction; import org.iot.dsa.node.event.DSInfoTopic; import org.iot.dsa.util.DSUtil; @@ -215,6 +214,16 @@ public DSNode getParent() { return parent; } + /** + * Concatenates and encodes the path of the parent node and the name of this info. + * + * @param buf Can be null in which case a new one will be created. + * @return The given buf, or the newly created one. + */ + public StringBuilder getPath(StringBuilder buf) { + return DSPath.append(DSPath.encodePath(parent, buf), name); + } + /** * A convenience that casts getObject(). */ @@ -398,6 +407,10 @@ public DSInfo nextValue() { return cur; } + /** + * False by default, set to true if you don't want the child to require admin level + * permissions. + */ public DSInfo setAdmin(boolean admin) { setFlag(ADMIN, admin); return this; @@ -409,6 +422,9 @@ DSInfo setFlag(int position, boolean on) { return this; } + /** + * False by default, set to true if you don't want the child to be sent to clients. + */ public DSInfo setHidden(boolean hidden) { setFlag(HIDDEN, hidden); return this; @@ -434,11 +450,17 @@ DSInfo setPermanent(boolean arg) { return this; } + /** + * False by default, set to true if you don't want the child to be written by clients. + */ public DSInfo setReadOnly(boolean readOnly) { setFlag(READONLY, readOnly); return this; } + /** + * False by default, set to true if you don't want the child persisted. + */ public DSInfo setTransient(boolean trans) { setFlag(TRANSIENT, trans); return this; diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInfoProxy.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfoProxy.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInfoProxy.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInfoProxy.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInt.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInt.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInt.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInt.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSJavaEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSJavaEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSJavaEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSJavaEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSList.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSList.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSList.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSList.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSLong.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSLong.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSLong.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSLong.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSMap.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSMap.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSMap.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSMap.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSMetadata.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSMetadata.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSMetadata.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSMetadata.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSNode.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java similarity index 98% rename from dslink-core/src/main/java/org/iot/dsa/node/DSNode.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java index bde9c286..0bd046c2 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSNode.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java @@ -8,7 +8,11 @@ import org.iot.dsa.logging.DSLogger; import org.iot.dsa.node.action.ActionInvocation; import org.iot.dsa.node.action.ActionResult; -import org.iot.dsa.node.event.*; +import org.iot.dsa.node.event.DSIEvent; +import org.iot.dsa.node.event.DSISubscriber; +import org.iot.dsa.node.event.DSInfoTopic; +import org.iot.dsa.node.event.DSTopic; +import org.iot.dsa.node.event.DSValueTopic; import org.iot.dsa.util.DSException; import org.iot.dsa.util.DSUtil; @@ -324,6 +328,9 @@ public DSNode copy() { ret.add(myInfo.copy()); } else { hisInfo.copy(myInfo); + if (hisInfo.isNode()) { + hisInfo.getNode().infoInParent = hisInfo; + } } myInfo = myInfo.next(); } @@ -441,6 +448,23 @@ public DSIObject get(String name) { return null; } + /** + * Ascends the tree looking for a ancestral node that is an instance of the parameter. + * + * @param clazz Can be a class, interface or super class. + * @return Possibly null. + * @see java.lang.Class#isAssignableFrom(Class) + */ + public DSNode getAncestor(Class clazz) { + DSNode node = getParent(); + while (node != null) { + if (clazz.isAssignableFrom(node.getClass())) { + return node; + } + } + return node; + } + /** * A convenience for (DSElement) get(name). */ diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSNull.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSNull.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSNull.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSNull.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java similarity index 91% rename from dslink-core/src/main/java/org/iot/dsa/node/DSPath.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java index 48cc0f3f..15d0d49e 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java @@ -37,6 +37,32 @@ public DSPath(String path) { // Methods in alphabetical order /////////////////////////////////////////////////////////////////////////// + /** + * Concatenates the two paths into the leading bucket. Insures a single forward slash + * character separates them. The bucket will not be cleared, the path will be appended to it. + * + * @param leading Can be null, in which case a new buffer will be created. + * @return The given bucket, or a new one if that was null, with the complete path appended. + */ + public static StringBuilder append(StringBuilder leading, String trailing) { + if (leading == null) { + leading = new StringBuilder(); + } + if ((trailing == null) || trailing.isEmpty()) { + return leading; + } + if ((leading.length() > 0) && leading.charAt(leading.length() - 1) == '/') { + if (trailing.charAt(0) == '/') { + return leading.append(trailing.substring(1)); + } + } else { + if (trailing.charAt(0) != '/') { + leading.append('/'); + } + } + return leading.append(trailing); + } + /** * Concatenates the two paths into the given bucket. Insures a single forward slash character * separates them. The bucket will not be cleared, the path will be appended to it. @@ -54,7 +80,7 @@ public static StringBuilder concat(String leading, String trailing, StringBuilde if ((trailing == null) || trailing.isEmpty()) { return bucket; } - if (leading.charAt(leading.length() - 1) == '/') { + if (!leading.isEmpty() && leading.charAt(leading.length() - 1) == '/') { if (trailing.charAt(0) == '/') { return bucket.append(trailing.substring(1)); } diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSRegistry.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSRegistry.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSRegistry.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSRegistry.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSStatus.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSStatus.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSStatus.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSStatus.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSString.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSString.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSString.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSString.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValue.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValue.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValue.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValue.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValueNode.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValueNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValueNode.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValueNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValueType.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValueType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValueType.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValueType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionInvocation.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionInvocation.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionInvocation.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionInvocation.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionResult.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionResult.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionResult.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionResult.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionSpec.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionSpec.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionSpec.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionSpec.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionTable.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionTable.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionTable.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionTable.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionValues.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionValues.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionValues.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionValues.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java similarity index 96% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java index ac0eabdd..33a2d000 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java @@ -221,16 +221,18 @@ public Iterator getValueResults() { } /** - * Use info.getParent(), not the outer 'this' to access the node on which the - * action is being invoked. This is because actions instances can be status / reused - * on multiple nodes. + * Use info.getParent(), not the outer 'this' to access the node on which the action is being + * invoked. This is because actions instances can (should) be reused on multiple nodes. + *

+ * To report an error, simply throw a runtime exception from this method, or call + * ActionInvocation.close(Exception). * * @param info The info about the action in the node being being invoked. * Do not use the outer 'this'. * @param invocation Details about the incoming invoke as well as the mechanism to * send updates over an open stream. * @return Can be null if the result type is void. - * @throws IllegalStateException If the target node has not overridden onInvoke. + * @throws RuntimeException Throw a runtime exception to report an error. */ public abstract ActionResult invoke(DSInfo info, ActionInvocation invocation); diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAction.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAction.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSAction.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSAction.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSActionValues.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSActionValues.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSActionValues.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSActionValues.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSIEvent.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSIEvent.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSIEvent.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSIEvent.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSISubscriber.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSISubscriber.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSISubscriber.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSISubscriber.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSValueTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSValueTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSValueTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSValueTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/node/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/node/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSIPassword.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSIPassword.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSIPassword.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSIPassword.java diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSKeys.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSKeys.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSKeys.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSKeys.java diff --git a/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java new file mode 100644 index 00000000..7c8c2720 --- /dev/null +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java @@ -0,0 +1,230 @@ +package org.iot.dsa.security; + +import java.security.Key; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import org.iot.dsa.io.DSBase64; +import org.iot.dsa.node.DSElement; +import org.iot.dsa.node.DSIStorable; +import org.iot.dsa.node.DSRegistry; +import org.iot.dsa.node.DSString; +import org.iot.dsa.node.DSValue; +import org.iot.dsa.node.DSValueType; +import org.iot.dsa.util.DSException; + +/** + * This stores an encrypted password which can then be decrypted. This does not require the JCE + * unlimited strength jurisdiction policy files to be installed. 128 bit AES is uncompromised and + * safe to used. + * + * @author Aaron Hansen + */ +public class DSPasswordAes128 extends DSValue implements DSIPassword, DSIStorable { + + // Constants + // --------- + + private static Cipher cipher; + private static Key key; + public static final DSPasswordAes128 NULL = new DSPasswordAes128(DSString.NULL); + + // Fields + // ------ + + private DSString value; //base64 encoded + + // Constructors + // ------------ + + private DSPasswordAes128(DSString encrypted) { + this.value = encrypted; + } + + private DSPasswordAes128(String encrypted) { + this(DSString.valueOf(encrypted)); + } + + // Public Methods + // -------------- + + /** + * Returns the decrypted password. + * + * @throws DSException If there is a problem. + */ + public String decode() { + byte[] bytes = DSBase64.decode(value.toString()); + String ret = null; + try { + synchronized (cipher) { + cipher.init(Cipher.DECRYPT_MODE, key); + ret = new String(cipher.doFinal(bytes), DSString.UTF8); + } + } catch (Exception x) { + DSException.throwRuntime(x); + } + return ret; + } + + /** + * Encrypts the given bytes. + */ + public static String encode(byte[] arg) { + byte[] bytes = null; + try { + synchronized (cipher) { + cipher.init(Cipher.ENCRYPT_MODE, key); + bytes = cipher.doFinal(arg); + } + } catch (Exception x) { + DSException.throwRuntime(x); + } + return DSBase64.encodeUrl(bytes); + } + + /** + * Encrypts the given text. + */ + public static String encode(String arg) { + return encode(arg.getBytes(DSString.UTF8)); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof DSPasswordAes128) { + return value.equals(obj.toString()); + } + return false; + } + + @Override + public DSValueType getValueType() { + return DSValueType.STRING; + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public boolean isEqual(Object obj) { + return equals(obj); + } + + @Override + public boolean isNull() { + return this == NULL; + } + + /** + * Encrypts the string value of the given element and compares against the value stored in this + * object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(DSElement clearText) { + if (clearText == null) { + return isNull(); + } + if (clearText.isNull()) { + return isNull(); + } + return isValid(clearText.toString()); + } + + /** + * Encrypts the given string and compares against the value stored in this object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(String clearText) { + if ((clearText == null) || clearText.isEmpty()) { + return isNull(); + } + return value.toString().equals(encode(clearText)); + } + + @Override + public DSString store() { + return toElement(); + } + + @Override + public DSPasswordAes128 restore(DSElement element) { + if (element.isNull()) { + return NULL; + } + return new DSPasswordAes128(element.toString()); + } + + /** + * Returns a string representing the url safe base64 encoding of the hash. + */ + @Override + public DSString toElement() { + return value; + } + + /** + * The encrypted password, base64 encoded. + */ + @Override + public String toString() { + return value.toString(); + } + + /** + * Creates a encrypted password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null, isNull() or the empty string. + */ + @Override + public DSPasswordAes128 valueOf(DSElement arg) { + if ((arg == null) || arg.isNull()) { + return NULL; + } + String s = arg.toString(); + if (s.isEmpty()) { + return NULL; + } + return valueOf(s); + } + + /** + * Creates a encrypted password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null or the empty string. + */ + public static DSPasswordAes128 valueOf(String arg) { + if (arg == null) { + return NULL; + } else if (arg.isEmpty()) { + return NULL; + } + return new DSPasswordAes128(encode(arg)); + } + + // Initialization + // -------------- + + static { + try { + cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + byte[] nameBytes = DSPasswordAes128.class.getName().getBytes(DSString.UTF8); + byte[] keyBytes = new byte[16]; + System.arraycopy(nameBytes, 0, keyBytes, 0, 16); + key = new SecretKeySpec(keyBytes, "AES"); + } catch (Exception x) { + Logger.getLogger("security").log(Level.SEVERE, "AES problem", x); + } + DSRegistry.registerDecoder(DSPasswordAes128.class, NULL); + } + +} diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java similarity index 96% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java index 053c25ce..9868ba9b 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java @@ -10,7 +10,10 @@ import org.iot.dsa.util.DSException; /** - * Stores an encrypted password which can be decrypted. + * Do not casually use this, it requires the JCE unlimited strength jurisdiction policy files + * wherever instances of this class are used. + *

+ * This stores an encrypted password which can then be decrypted. * * @author Aaron Hansen */ diff --git a/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java new file mode 100644 index 00000000..a1454897 --- /dev/null +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java @@ -0,0 +1,204 @@ +package org.iot.dsa.security; + +import java.security.MessageDigest; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.iot.dsa.io.DSBase64; +import org.iot.dsa.node.DSElement; +import org.iot.dsa.node.DSIStorable; +import org.iot.dsa.node.DSRegistry; +import org.iot.dsa.node.DSString; +import org.iot.dsa.node.DSValue; +import org.iot.dsa.node.DSValueType; + +/** + * Stores and verifies passwords using a SHA-1 hash of the text (the clear text is not accessible). + * SHA-1 is not considered secure against well-funded opponents, but it doesn't require the JCE + * unlimited strength jurisdiction policy files. + * + * @author Aaron Hansen + */ +public class DSPasswordSha1 extends DSValue implements DSIPassword, DSIStorable { + + // Constants + // --------- + + public static final DSPasswordSha1 NULL = new DSPasswordSha1(DSString.NULL); + + private static MessageDigest digest; + + // Fields + // ------ + + private DSString value; + + // Constructors + // ------------ + + private DSPasswordSha1(DSString hashBase64) { + this.value = hashBase64; + } + + private DSPasswordSha1(String hashBase64) { + this(DSString.valueOf(hashBase64)); + } + + // Public Methods + // -------------- + + /** + * SHA-256 hash of the bytes encoded as url safe base 64.. + */ + public static String encode(byte[] arg) { + return DSBase64.encodeUrl(hash(arg)); + } + + /** + * SHA-256 hash of the UTF-8 bytes, encoded as url safe base 64.. + */ + public static String encode(String arg) { + return encode(arg.getBytes(DSString.UTF8)); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof DSPasswordAes256) { + return value.equals(obj.toString()); + } + return false; + } + + @Override + public DSValueType getValueType() { + return DSValueType.STRING; + } + + /** + * SHA-256 hash of the bytes. + */ + static byte[] hash(byte[] arg) { + byte[] hash = null; + synchronized (digest) { + hash = digest.digest(arg); + digest.reset(); + } + return hash; + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public boolean isEqual(Object obj) { + return equals(obj); + } + + @Override + public boolean isNull() { + return this == NULL; + } + + /** + * Hashes the string value of the given element and compares against the hash stored in this + * object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(DSElement clearText) { + if (clearText == null) { + return isNull(); + } + if (clearText.isNull()) { + return isNull(); + } + return isValid(clearText.toString()); + } + + /** + * Hashes the given string and compares against the value stored in this object. + * + * @param clearText If null, or the empty string, this will on return true if this is the NULL + * instance. + */ + public boolean isValid(String clearText) { + if ((clearText == null) || clearText.isEmpty()) { + return isNull(); + } + return value.toString().equals(encode(clearText)); + } + + @Override + public DSString store() { + return toElement(); + } + + @Override + public DSPasswordSha1 restore(DSElement element) { + if (element.isNull()) { + return NULL; + } + return new DSPasswordSha1(element.toString()); + } + + /** + * Returns a string representing the url safe base64 encoding of the hash. + */ + @Override + public DSString toElement() { + return value; + } + + @Override + public String toString() { + return value.toString(); + } + + /** + * Creates a digest password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null, isNull() or the empty string. + */ + @Override + public DSPasswordSha1 valueOf(DSElement arg) { + if ((arg == null) || arg.isNull()) { + return NULL; + } + String s = arg.toString(); + if (s.isEmpty()) { + return NULL; + } + return valueOf(s); + } + + /** + * Creates a digest password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null or the empty string. + */ + public static DSPasswordSha1 valueOf(String arg) { + if (arg == null) { + return NULL; + } else if (arg.isEmpty()) { + return NULL; + } + return new DSPasswordSha1(encode(arg)); + } + + // Initialization + // -------------- + + static { + try { + digest = MessageDigest.getInstance("SHA-1"); + } catch (Exception x) { + Logger.getLogger("security").log(Level.SEVERE, "SHA-1 unknown", x); + } + DSRegistry.registerDecoder(DSPasswordSha1.class, NULL); + } + +} diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java similarity index 93% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java index 30200ebe..a10802c5 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java @@ -7,7 +7,14 @@ import org.iot.dsa.node.*; /** - * Stores and verifies passwords using a SHA-256 hash of the text. + * Requires the JCE unlimited strength jurisdiction policy files wherever instances + * of this class are used. + *

+ * Stores and verifies passwords using a SHA-256 hash of the text (the clear text is not + * accessible). + *

+ * DSPasswordSha1 (SHA-1) is not considered secure against well-funded opponents, but it doesn't + * require the JCE unlimited strength jurisdiction policy files. * * @author Aaron Hansen */ diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPermission.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPermission.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPermission.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPermission.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSDateTime.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSDateTime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSDateTime.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSDateTime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSInterval.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSInterval.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSInterval.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSInterval.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSTime.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSTime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSTime.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSTime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/util/DSException.java b/dslink-v2/src/main/java/org/iot/dsa/util/DSException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/util/DSException.java rename to dslink-v2/src/main/java/org/iot/dsa/util/DSException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/util/DSUtil.java b/dslink-v2/src/main/java/org/iot/dsa/util/DSUtil.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/util/DSUtil.java rename to dslink-v2/src/main/java/org/iot/dsa/util/DSUtil.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSElementTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSElementTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSElementTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSElementTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSKeysTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSKeysTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSKeysTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSKeysTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPathTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSPathTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSPathTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSPathTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSTimeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSTimeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSTimeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSTimeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSUtilTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSUtilTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSUtilTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSUtilTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/IntCacheTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/IntCacheTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/IntCacheTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/IntCacheTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/JsonTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/JsonTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/JsonTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/JsonTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/LoggingTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/LoggingTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/LoggingTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/LoggingTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/MetadataTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/MetadataTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/MetadataTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/MetadataTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/MsgpackTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/MsgpackTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/MsgpackTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/MsgpackTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/NodeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/NodeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/NodeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/NodeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/PerfTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/PerfTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/PerfTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/PerfTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/SerializationTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/SerializationTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/SerializationTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/SerializationTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java diff --git a/settings.gradle b/settings.gradle index f5525621..bf6db689 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,5 @@ rootProject.name = 'sdk-dslink-java-v2' -include 'dslink-core' -include 'dslink-java-v2-poc' -include 'dslink-websocket-standalone' +include 'dslink-v2' +include 'dslink-v2-poc' +include 'dslink-v2-websocket' From cbdb389db3f1cd8248a39661e395db9149a93138 Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 5 Jul 2018 16:11:56 -0700 Subject: [PATCH 6/7] 0.28.0 * Fix lenient handling of salt. * Fix leading byte in binary output debugging. * AES128 & SHA-1 * Fix subscription responder. * Repo changes. --- .gitignore | 37 +-- build.gradle | 55 ++-- .../README.md | 0 .../build.gradle | 10 +- .../dslink.json | 0 .../java/org/iot/dsa/dslink/poc/MainNode.java | 0 .../build.gradle | 25 +- .../websocket/StandaloneTransportFactory.java | 0 .../dslink/websocket/WsBinaryTransport.java | 0 .../dsa/dslink/websocket/WsTextTransport.java | 0 {dslink-core => dslink-v2}/build.gradle | 26 +- .../com/acuity/iot/dsa/dslink/Template.java | 0 .../iot/dsa/dslink/io/DSByteBuffer.java | 0 .../iot/dsa/dslink/io/DSCharBuffer.java | 0 .../iot/dsa/dslink/io/DSIoException.java | 0 .../dslink/io/msgpack/MsgpackConstants.java | 0 .../dsa/dslink/io/msgpack/MsgpackReader.java | 0 .../dsa/dslink/io/msgpack/MsgpackWriter.java | 0 .../dslink/protocol/DSProtocolException.java | 0 .../iot/dsa/dslink/protocol/DSSession.java | 207 +++++++-------- .../iot/dsa/dslink/protocol/DSStream.java | 0 .../protocol/message/AbstractMessage.java | 0 .../protocol/message/MessageReader.java | 0 .../protocol/message/MessageWriter.java | 0 .../protocol/message/OutboundMessage.java | 0 .../dslink/protocol/message/RequestPath.java | 0 .../requester/DSOutboundInvokeStub.java | 0 .../requester/DSOutboundListStub.java | 0 .../requester/DSOutboundRemoveStub.java | 0 .../protocol/requester/DSOutboundSetStub.java | 0 .../protocol/requester/DSOutboundStub.java | 0 .../requester/DSOutboundSubscribeStub.java | 0 .../requester/DSOutboundSubscribeStubs.java | 0 .../requester/DSOutboundSubscriptions.java | 0 .../protocol/requester/DSRequester.java | 0 .../protocol/responder/DSInboundInvoke.java | 0 .../protocol/responder/DSInboundList.java | 0 .../protocol/responder/DSInboundRequest.java | 0 .../protocol/responder/DSInboundSet.java | 0 .../responder/DSInboundSubscription.java | 210 +++++++++------- .../responder/DSInboundSubscriptions.java | 0 .../protocol/responder/DSResponder.java | 0 .../dsa/dslink/protocol/v1/CloseMessage.java | 0 .../dslink/protocol/v1/DS1ConnectionInit.java | 24 +- .../dslink/protocol/v1/DS1LinkConnection.java | 0 .../dsa/dslink/protocol/v1/DS1Session.java | 237 ++++++++++-------- .../protocol/v1/requester/DS1Requester.java | 0 .../protocol/v1/responder/DS1Responder.java | 0 .../protocol/v1/responder/ErrorMessage.java | 0 .../dsa/dslink/protocol/v2/AckMessage.java | 0 .../dsa/dslink/protocol/v2/CloseMessage.java | 0 .../dslink/protocol/v2/DS2LinkConnection.java | 0 .../dsa/dslink/protocol/v2/DS2Message.java | 0 .../dslink/protocol/v2/DS2MessageReader.java | 0 .../dslink/protocol/v2/DS2MessageWriter.java | 0 .../dsa/dslink/protocol/v2/DS2Session.java | 163 ++++++------ .../dslink/protocol/v2/MessageConstants.java | 0 .../dslink/protocol/v2/MultipartReader.java | 0 .../dslink/protocol/v2/MultipartWriter.java | 0 .../dsa/dslink/protocol/v2/PingMessage.java | 0 .../v2/requester/DS2OutboundInvokeStub.java | 0 .../v2/requester/DS2OutboundListStub.java | 0 .../v2/requester/DS2OutboundRemoveStub.java | 0 .../v2/requester/DS2OutboundSetStub.java | 0 .../v2/requester/DS2OutboundStub.java | 0 .../requester/DS2OutboundSubscriptions.java | 0 .../protocol/v2/requester/DS2Requester.java | 0 .../v2/responder/DS2InboundInvoke.java | 0 .../protocol/v2/responder/DS2InboundList.java | 0 .../protocol/v2/responder/DS2InboundSet.java | 0 .../v2/responder/DS2InboundSubscription.java | 4 +- .../v2/responder/DS2InboundSubscriptions.java | 0 .../protocol/v2/responder/DS2Responder.java | 0 .../protocol/v2/responder/ErrorMessage.java | 0 .../sys/cert/AnonymousTrustFactory.java | 0 .../dsa/dslink/sys/cert/SysCertManager.java | 0 .../dslink/sys/profiler/ClassLoadingNode.java | 0 .../dslink/sys/profiler/CompilationNode.java | 0 .../sys/profiler/GarbageCollectorNode.java | 0 .../dsa/dslink/sys/profiler/MXBeanNode.java | 0 .../sys/profiler/MemoryManagerNode.java | 0 .../dsa/dslink/sys/profiler/MemoryNode.java | 0 .../dslink/sys/profiler/MemoryPoolNode.java | 0 .../sys/profiler/OperatingSystemNode.java | 0 .../dslink/sys/profiler/ProfilerUtils.java | 0 .../dsa/dslink/sys/profiler/RuntimeNode.java | 0 .../dsa/dslink/sys/profiler/SysProfiler.java | 0 .../dslink/sys/profiler/ThreadInfoNode.java | 0 .../dsa/dslink/sys/profiler/ThreadNode.java | 0 .../acuity/iot/dsa/dslink/test/TestLink.java | 2 +- .../iot/dsa/dslink/test/TestTransport.java | 0 .../iot/dsa/dslink/test/V1TestLink.java | 6 +- .../iot/dsa/dslink/test/V2TestLink.java | 6 +- .../transport/BufferedBinaryTransport.java | 4 +- .../dslink/transport/DSBinaryTransport.java | 0 .../dsa/dslink/transport/DSTextTransport.java | 0 .../iot/dsa/dslink/transport/DSTransport.java | 0 .../dsa/dslink/transport/SocketTransport.java | 0 .../transport/StreamBinaryTransport.java | 0 .../src/main/java/org/iot/dsa/DSRuntime.java | 0 .../main/java/org/iot/dsa/DSThreadPool.java | 0 .../java/org/iot/dsa/dslink/DSIRequester.java | 0 .../java/org/iot/dsa/dslink/DSIResponder.java | 0 .../dsa/dslink/DSInternalErrorException.java | 0 .../dsa/dslink/DSInvalidPathException.java | 0 .../main/java/org/iot/dsa/dslink/DSLink.java | 0 .../java/org/iot/dsa/dslink/DSLinkConfig.java | 0 .../org/iot/dsa/dslink/DSLinkConnection.java | 0 .../java/org/iot/dsa/dslink/DSMainNode.java | 0 .../iot/dsa/dslink/DSPermissionException.java | 0 .../iot/dsa/dslink/DSRequestException.java | 0 .../java/org/iot/dsa/dslink/DSSysNode.java | 0 .../dsa/dslink/DSUnsupportedException.java | 0 .../java/org/iot/dsa/dslink/package-info.java | 0 .../requester/AbstractInvokeHandler.java | 0 .../dslink/requester/AbstractListHandler.java | 0 .../requester/AbstractSubscribeHandler.java | 0 .../iot/dsa/dslink/requester/ErrorType.java | 0 .../requester/OutboundInvokeHandler.java | 0 .../dslink/requester/OutboundListHandler.java | 0 .../requester/OutboundRequestHandler.java | 0 .../dsa/dslink/requester/OutboundStream.java | 0 .../requester/OutboundSubscribeHandler.java | 5 +- .../dslink/requester/SimpleInvokeHandler.java | 0 .../requester/SimpleRequestHandler.java | 0 .../dsa/dslink/requester/package-info.java | 0 .../iot/dsa/dslink/responder/ApiObject.java | 0 .../responder/InboundInvokeRequest.java | 0 .../dslink/responder/InboundListRequest.java | 0 .../dsa/dslink/responder/InboundRequest.java | 0 .../dslink/responder/InboundSetRequest.java | 0 .../responder/InboundSubscribeRequest.java | 0 .../responder/OutboundListResponse.java | 0 .../responder/SubscriptionCloseHandler.java | 0 .../dsa/dslink/responder/package-info.java | 0 .../java/org/iot/dsa/io/AbstractReader.java | 0 .../java/org/iot/dsa/io/AbstractWriter.java | 0 .../main/java/org/iot/dsa/io/DSBase64.java | 0 .../main/java/org/iot/dsa/io/DSIReader.java | 0 .../main/java/org/iot/dsa/io/DSIWriter.java | 0 .../main/java/org/iot/dsa/io/NodeDecoder.java | 0 .../main/java/org/iot/dsa/io/NodeEncoder.java | 0 .../iot/dsa/io/json/AbstractJsonWriter.java | 0 .../iot/dsa/io/json/CharSequenceInput.java | 0 .../org/iot/dsa/io/json/JsonAppender.java | 0 .../org/iot/dsa/io/json/JsonConstants.java | 0 .../java/org/iot/dsa/io/json/JsonInput.java | 0 .../java/org/iot/dsa/io/json/JsonReader.java | 0 .../java/org/iot/dsa/io/json/JsonWriter.java | 0 .../java/org/iot/dsa/io/package-info.java | 0 .../org/iot/dsa/logging/AsyncLogHandler.java | 0 .../java/org/iot/dsa/logging/DSILevels.java | 0 .../java/org/iot/dsa/logging/DSLevel.java | 0 .../java/org/iot/dsa/logging/DSLogger.java | 0 .../java/org/iot/dsa/logging/DSLogging.java | 0 .../org/iot/dsa/logging/FileLogHandler.java | 0 .../dsa/logging/PrintStreamLogHandler.java | 0 .../org/iot/dsa/logging/package-info.java | 0 .../main/java/org/iot/dsa/node/DSBool.java | 0 .../main/java/org/iot/dsa/node/DSBytes.java | 0 .../main/java/org/iot/dsa/node/DSDouble.java | 0 .../main/java/org/iot/dsa/node/DSElement.java | 0 .../java/org/iot/dsa/node/DSElementType.java | 0 .../java/org/iot/dsa/node/DSFlexEnum.java | 0 .../main/java/org/iot/dsa/node/DSFloat.java | 0 .../main/java/org/iot/dsa/node/DSGroup.java | 0 .../java/org/iot/dsa/node/DSIBoolean.java | 0 .../main/java/org/iot/dsa/node/DSIEnum.java | 0 .../java/org/iot/dsa/node/DSIMetadata.java | 0 .../main/java/org/iot/dsa/node/DSINumber.java | 0 .../main/java/org/iot/dsa/node/DSIObject.java | 0 .../main/java/org/iot/dsa/node/DSIStatus.java | 0 .../java/org/iot/dsa/node/DSIStorable.java | 0 .../main/java/org/iot/dsa/node/DSIValue.java | 0 .../main/java/org/iot/dsa/node/DSInfo.java | 24 +- .../java/org/iot/dsa/node/DSInfoProxy.java | 0 .../src/main/java/org/iot/dsa/node/DSInt.java | 0 .../java/org/iot/dsa/node/DSJavaEnum.java | 0 .../main/java/org/iot/dsa/node/DSList.java | 0 .../main/java/org/iot/dsa/node/DSLong.java | 0 .../src/main/java/org/iot/dsa/node/DSMap.java | 0 .../java/org/iot/dsa/node/DSMetadata.java | 0 .../main/java/org/iot/dsa/node/DSNode.java | 26 +- .../main/java/org/iot/dsa/node/DSNull.java | 0 .../main/java/org/iot/dsa/node/DSPath.java | 28 ++- .../java/org/iot/dsa/node/DSRegistry.java | 0 .../main/java/org/iot/dsa/node/DSStatus.java | 0 .../main/java/org/iot/dsa/node/DSString.java | 0 .../main/java/org/iot/dsa/node/DSValue.java | 0 .../java/org/iot/dsa/node/DSValueNode.java | 0 .../java/org/iot/dsa/node/DSValueType.java | 0 .../iot/dsa/node/action/ActionInvocation.java | 0 .../org/iot/dsa/node/action/ActionResult.java | 0 .../org/iot/dsa/node/action/ActionSpec.java | 0 .../org/iot/dsa/node/action/ActionTable.java | 0 .../org/iot/dsa/node/action/ActionValues.java | 0 .../iot/dsa/node/action/DSAbstractAction.java | 10 +- .../org/iot/dsa/node/action/DSAction.java | 0 .../iot/dsa/node/action/DSActionValues.java | 0 .../java/org/iot/dsa/node/event/DSIEvent.java | 0 .../org/iot/dsa/node/event/DSISubscriber.java | 0 .../org/iot/dsa/node/event/DSInfoTopic.java | 0 .../java/org/iot/dsa/node/event/DSTopic.java | 0 .../org/iot/dsa/node/event/DSValueTopic.java | 0 .../java/org/iot/dsa/node/package-info.java | 0 .../main/java/org/iot/dsa/package-info.java | 0 .../org/iot/dsa/security/DSIPassword.java | 0 .../java/org/iot/dsa/security/DSKeys.java | 0 .../iot/dsa/security/DSPasswordAes128.java | 230 +++++++++++++++++ .../iot/dsa/security/DSPasswordAes256.java | 5 +- .../org/iot/dsa/security/DSPasswordSha1.java | 204 +++++++++++++++ .../iot/dsa/security/DSPasswordSha256.java | 9 +- .../org/iot/dsa/security/DSPermission.java | 0 .../java/org/iot/dsa/time/DSDateTime.java | 0 .../java/org/iot/dsa/time/DSInterval.java | 0 .../main/java/org/iot/dsa/time/DSTime.java | 0 .../java/org/iot/dsa/util/DSException.java | 0 .../main/java/org/iot/dsa/util/DSUtil.java | 0 .../org/iot/dsa/dslink/DSByteBufferTest.java | 0 .../org/iot/dsa/dslink/DSElementTest.java | 0 .../org/iot/dsa/dslink/DSFlexEnumTest.java | 0 .../org/iot/dsa/dslink/DSJavaEnumTest.java | 0 .../java/org/iot/dsa/dslink/DSKeysTest.java | 0 .../org/iot/dsa/dslink/DSLinkConfigTest.java | 0 .../org/iot/dsa/dslink/DSPasswordTests.java | 0 .../java/org/iot/dsa/dslink/DSPathTest.java | 0 .../java/org/iot/dsa/dslink/DSTimeTest.java | 0 .../java/org/iot/dsa/dslink/DSUtilTest.java | 0 .../java/org/iot/dsa/dslink/IntCacheTest.java | 0 .../java/org/iot/dsa/dslink/JsonTest.java | 0 .../java/org/iot/dsa/dslink/LoggingTest.java | 0 .../java/org/iot/dsa/dslink/MetadataTest.java | 0 .../java/org/iot/dsa/dslink/MsgpackTest.java | 0 .../java/org/iot/dsa/dslink/NodeTest.java | 0 .../java/org/iot/dsa/dslink/PerfTest.java | 0 .../iot/dsa/dslink/RequesterInvokeTest.java | 0 .../dsa/dslink/RequesterSubscribeTest.java | 0 .../org/iot/dsa/dslink/SerializationTest.java | 0 .../org/iot/dsa/dslink/V2HandshakeTest.java | 0 settings.gradle | 6 +- 240 files changed, 1065 insertions(+), 498 deletions(-) rename {dslink-java-v2-poc => dslink-v2-poc}/README.md (100%) rename {dslink-java-v2-poc => dslink-v2-poc}/build.gradle (68%) rename {dslink-java-v2-poc => dslink-v2-poc}/dslink.json (100%) rename {dslink-java-v2-poc => dslink-v2-poc}/src/main/java/org/iot/dsa/dslink/poc/MainNode.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/build.gradle (72%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java (100%) rename {dslink-websocket-standalone => dslink-v2-websocket}/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java (100%) rename {dslink-core => dslink-v2}/build.gradle (76%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/Template.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java (98%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java (82%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java (98%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java (92%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java (90%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java (94%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java (86%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java (94%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java (93%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java (99%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/DSRuntime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/DSThreadPool.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSIRequester.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSIResponder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLink.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSMainNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSPermissionException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSRequestException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSSysNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java (80%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/requester/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/dslink/responder/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/AbstractReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/AbstractWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSBase64.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSIReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/DSIWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/NodeDecoder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/NodeEncoder.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonAppender.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonConstants.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonInput.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonReader.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/json/JsonWriter.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/io/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSILevels.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLevel.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLogger.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/DSLogging.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/FileLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/logging/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSBool.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSBytes.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSDouble.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSElement.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSElementType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSFlexEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSFloat.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSGroup.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIBoolean.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIMetadata.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSINumber.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIObject.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIStatus.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIStorable.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSIValue.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInfo.java (93%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInfoProxy.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSInt.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSJavaEnum.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSList.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSLong.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSMap.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSMetadata.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSNode.java (98%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSNull.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSPath.java (91%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSRegistry.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSStatus.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSString.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValue.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValueNode.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/DSValueType.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionInvocation.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionResult.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionSpec.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionTable.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/ActionValues.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java (96%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSAction.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/action/DSActionValues.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSIEvent.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSISubscriber.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/event/DSValueTopic.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/node/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/package-info.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSIPassword.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSKeys.java (100%) create mode 100644 dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPasswordAes256.java (96%) create mode 100644 dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPasswordSha256.java (93%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/security/DSPermission.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSDateTime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSInterval.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/time/DSTime.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/util/DSException.java (100%) rename {dslink-core => dslink-v2}/src/main/java/org/iot/dsa/util/DSUtil.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSElementTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSKeysTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSPathTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSTimeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/DSUtilTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/IntCacheTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/JsonTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/LoggingTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/MetadataTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/MsgpackTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/NodeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/PerfTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/SerializationTest.java (100%) rename {dslink-core => dslink-v2}/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java (100%) diff --git a/.gitignore b/.gitignore index a63aebd1..337b8731 100644 --- a/.gitignore +++ b/.gitignore @@ -1,31 +1,34 @@ # Tooling -**/.classpath -**/.idea -**/.metadata -**/.project -**/.settings -**/eclipseBin +**.classpath +**.idea +**.metadata +**.project +**.settings +**eclipseBin # Build artifacts **.class **.iml +**build +**classes +**libJar +**out +**target **/.gradle -**/build -**/out -**/libJar -**/target +**javadoc +**repository # Misc **.bak **.old **.log -**/.DS_Store +**.DS_Store # Runtime files -**/dslink.jks -**/.key -**/db -**/nodes.json -**/nodes*.zip -**/test.json +**.jks +**.key +**db +**nodes.json +**nodes*.zip +**test.json **/*.log.*.zip diff --git a/build.gradle b/build.gradle index eb16131f..d59edfad 100644 --- a/build.gradle +++ b/build.gradle @@ -7,48 +7,33 @@ buildscript { } } -apply plugin: 'nexus-workflow' -apply plugin: 'java' -apply plugin: 'maven' -apply plugin: 'signing' +subprojects { -group 'org.iot-dsa' -version '0.27.0' + apply plugin: 'java' + apply plugin: 'maven' -sourceCompatibility = 1.6 -targetCompatibility = 1.6 + group 'org.iot-dsa' + version '0.28.0' -install { - repositories.mavenInstaller { - pom.project { - artifactId 'dslink-v2' + sourceCompatibility = 1.6 + targetCompatibility = 1.6 + + repositories { + mavenLocal() + mavenCentral() + maven { + url 'https://oss.sonatype.org/content/repositories/snapshots/' } } -} -repositories { - mavenLocal() - mavenCentral() - maven { - url 'https://oss.sonatype.org/content/repositories/snapshots/' + task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { + classifier = 'sources' + from sourceSets.main.allJava } -} -dependencies { - testCompile 'junit:junit:[4.12,)' -} - -task sourcesJar(group: 'build', type: Jar, dependsOn: classes) { - classifier = 'sources' - from sourceSets.main.allJava -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} + task javadocJar(type: Jar, dependsOn: javadoc) { + classifier = 'javadoc' + from javadoc.destinationDir + } -artifacts { - archives sourcesJar - archives javadocJar } diff --git a/dslink-java-v2-poc/README.md b/dslink-v2-poc/README.md similarity index 100% rename from dslink-java-v2-poc/README.md rename to dslink-v2-poc/README.md diff --git a/dslink-java-v2-poc/build.gradle b/dslink-v2-poc/build.gradle similarity index 68% rename from dslink-java-v2-poc/build.gradle rename to dslink-v2-poc/build.gradle index e1942a33..e887cb7b 100644 --- a/dslink-java-v2-poc/build.gradle +++ b/dslink-v2-poc/build.gradle @@ -3,7 +3,7 @@ apply plugin: 'application' sourceCompatibility = 1.6 targetCompatibility = 1.6 -group 'org.iot.dsa' +group 'org.iot-dsa' mainClassName = 'org.iot.dsa.dslink.DSLink' applicationDefaultJvmArgs = [ @@ -12,15 +12,11 @@ applicationDefaultJvmArgs = [ repositories { mavenLocal() mavenCentral() - maven { - url 'https://oss.sonatype.org/content/repositories/snapshots/' - } } dependencies { - compile project(':dslink-core') - compile project(':dslink-websocket-standalone') - testCompile 'junit:junit:+' + compile project(':dslink-v2') + compile project(':dslink-v2-websocket') } applicationDistribution.from(new File(project.projectDir, "/dslink.json")) diff --git a/dslink-java-v2-poc/dslink.json b/dslink-v2-poc/dslink.json similarity index 100% rename from dslink-java-v2-poc/dslink.json rename to dslink-v2-poc/dslink.json diff --git a/dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java b/dslink-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java similarity index 100% rename from dslink-java-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java rename to dslink-v2-poc/src/main/java/org/iot/dsa/dslink/poc/MainNode.java diff --git a/dslink-websocket-standalone/build.gradle b/dslink-v2-websocket/build.gradle similarity index 72% rename from dslink-websocket-standalone/build.gradle rename to dslink-v2-websocket/build.gradle index d61d3d39..57b52b4f 100644 --- a/dslink-websocket-standalone/build.gradle +++ b/dslink-v2-websocket/build.gradle @@ -1,8 +1,13 @@ -apply from: '../build.gradle' +apply plugin: 'nexus-workflow' +apply plugin: 'signing' + +artifacts { + archives sourcesJar +} dependencies { - compile project(':dslink-core') - compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:[1.12,)' + compile project(':dslink-v2') + compile 'org.glassfish.tyrus.bundles:tyrus-standalone-client:[1.13.1,)' } signing { @@ -24,9 +29,9 @@ uploadArchives { } pom.project { - name = 'DSLink SDK V2 Websocket Implementation' - artifactId = 'dslink-websocket-standalone-v2' - description = 'V2 Implementation of Websockets for IoT DSA protocol' + name = 'V2 DSLink SDK Websockets' + artifactId = 'dslink-v2-websocket' + description = 'Default Implementation of Websockets for V2 DSLink SDK' packaging = 'jar' url = 'http://iot-dsa.org' @@ -43,14 +48,6 @@ uploadArchives { url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } - - developers { - developer { - id = 'samrg472' - name = 'Samuel Grenier' - email = 'samrg472@gmail.com' - } - } } } } diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/StandaloneTransportFactory.java diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsBinaryTransport.java diff --git a/dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java b/dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java similarity index 100% rename from dslink-websocket-standalone/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java rename to dslink-v2-websocket/src/main/java/org/iot/dsa/dslink/websocket/WsTextTransport.java diff --git a/dslink-core/build.gradle b/dslink-v2/build.gradle similarity index 76% rename from dslink-core/build.gradle rename to dslink-v2/build.gradle index 8396041e..d124ff1d 100644 --- a/dslink-core/build.gradle +++ b/dslink-v2/build.gradle @@ -1,4 +1,14 @@ -apply from: '../build.gradle' +apply plugin: 'nexus-workflow' +apply plugin: 'signing' + +artifacts { + archives sourcesJar + archives javadocJar +} + +dependencies { + testCompile 'junit:junit:[4.12,)' +} javadoc { exclude("**/com/**") @@ -23,9 +33,9 @@ uploadArchives { } pom.project { - name = 'DSLink SDK V2' - artifactId = 'dslink-core-v2' - description = 'V2 Java SDK for the IoT DSA protocol' + name = 'V2 DSLink SDK' + artifactId = 'dslink-v2' + description = 'V2 DSLink SDK for IoT DSA' packaging = 'jar' url = 'http://iot-dsa.org' @@ -42,14 +52,6 @@ uploadArchives { url = 'http://www.apache.org/licenses/LICENSE-2.0.txt' } } - - developers { - developer { - id = 'samrg472' - name = 'Samuel Grenier' - email = 'samrg472@gmail.com' - } - } } } } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/Template.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/Template.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/Template.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/Template.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSByteBuffer.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSCharBuffer.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/DSIoException.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackConstants.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/io/msgpack/MsgpackWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSProtocolException.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java similarity index 98% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java index fdb56c2c..737c2428 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSSession.java @@ -18,22 +18,22 @@ public abstract class DSSession extends DSNode { /////////////////////////////////////////////////////////////////////////// - // Constants + // Class Fields /////////////////////////////////////////////////////////////////////////// private static final int MAX_MSG_ID = 2147483647; private static final long MSG_TIMEOUT = 60000; /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// + private boolean connected = false; + private DSLinkConnection connection; private long lastRecv; private long lastSend; private int nextAck = -1; private int nextMessage = 1; - private boolean connected = false; - private DSLinkConnection connection; private Object outgoingMutex = new Object(); private List outgoingRequests = new LinkedList(); private List outgoingResponses = new LinkedList(); @@ -69,42 +69,6 @@ public void disconnect() { info(getPath() + " locally closed"); } - /** - * The subclass should read and process a single message. Throw an exception to indicate - * an error. - */ - protected abstract void doRecvMessage() throws Exception; - - /** - * The subclass should send a single message. Throw an exception to indicate - * an error. - */ - protected abstract void doSendMessage() throws Exception; - - /** - * Can return null. - */ - protected OutboundMessage dequeueOutgoingResponse() { - synchronized (outgoingMutex) { - if (!outgoingResponses.isEmpty()) { - return outgoingResponses.remove(0); - } - } - return null; - } - - /** - * Can return null. - */ - protected OutboundMessage dequeueOutgoingRequest() { - synchronized (outgoingMutex) { - if (!outgoingRequests.isEmpty()) { - return outgoingRequests.remove(0); - } - } - return null; - } - /** * Add a message to the outgoing request queue. */ @@ -136,10 +100,10 @@ public DSLinkConnection getConnection() { return connection; } - @Override - protected String getLogName() { - return "Session"; - } + /** + * Last ack received from the broker. + */ + public abstract long getLastAckRcvd(); /** * The next ack id, or -1. @@ -167,47 +131,6 @@ public DSTransport getTransport() { return getConnection().getTransport(); } - protected boolean hasAckToSend() { - return nextAck > 0; - } - - protected boolean hasOutgoingRequests() { - return !outgoingRequests.isEmpty(); - } - - protected boolean hasOutgoingResponses() { - return !outgoingResponses.isEmpty(); - } - - /** - * Override point, this returns the result of hasMessagesToSend. - */ - protected boolean hasSomethingToSend() { - if (nextAck > 0) { - return true; - } - if (!outgoingResponses.isEmpty()) { - return true; - } - if (!outgoingRequests.isEmpty()) { - return true; - } - return false; - } - - protected boolean isConnected() { - return connected; - } - - /** - * Can be used to waking up a sleeping writer. - */ - protected void notifyOutgoing() { - synchronized (outgoingMutex) { - outgoingMutex.notify(); - } - } - /** * Override point, called when the previous connection can be resumed. The the transport will * have already been set. @@ -233,6 +156,28 @@ public void onDisconnect() { } } + /** + * Called by the connection, this manages the running state and calls doRun for the specific + * implementation. A separate thread is spun off to manage writing. + */ + public void run() { + lastRecv = lastSend = System.currentTimeMillis(); + new WriteThread(getConnection().getLink().getLinkName() + " Writer").start(); + while (connected) { + try { + verifyLastSend(); + doRecvMessage(); + lastRecv = System.currentTimeMillis(); + } catch (Exception x) { + getTransport().close(); + if (connected) { + connected = false; + error(getPath(), x); + } + } + } + } + /** * Call for each incoming message id that needs to be acked. */ @@ -253,25 +198,85 @@ public void setRequesterAllowed() { public abstract boolean shouldEndMessage(); /** - * Called by the connection, this manages the running state and calls doRun for the specific - * implementation. A separate thread is spun off to manage writing. + * Can return null. */ - public void run() { - lastRecv = lastSend = System.currentTimeMillis(); - new WriteThread(getConnection().getLink().getLinkName() + " Writer").start(); - while (connected) { - try { - verifyLastSend(); - doRecvMessage(); - lastRecv = System.currentTimeMillis(); - } catch (Exception x) { - getTransport().close(); - if (connected) { - connected = false; - error(getPath(), x); - } + protected OutboundMessage dequeueOutgoingRequest() { + synchronized (outgoingMutex) { + if (!outgoingRequests.isEmpty()) { + return outgoingRequests.remove(0); } } + return null; + } + + /** + * Can return null. + */ + protected OutboundMessage dequeueOutgoingResponse() { + synchronized (outgoingMutex) { + if (!outgoingResponses.isEmpty()) { + return outgoingResponses.remove(0); + } + } + return null; + } + + /** + * The subclass should read and process a single message. Throw an exception to indicate + * an error. + */ + protected abstract void doRecvMessage() throws Exception; + + /** + * The subclass should send a single message. Throw an exception to indicate + * an error. + */ + protected abstract void doSendMessage() throws Exception; + + @Override + protected String getLogName() { + return "Session"; + } + + protected boolean hasAckToSend() { + return nextAck > 0; + } + + protected boolean hasOutgoingRequests() { + return !outgoingRequests.isEmpty(); + } + + protected boolean hasOutgoingResponses() { + return !outgoingResponses.isEmpty(); + } + + /** + * Override point, this returns the result of hasMessagesToSend. + */ + protected boolean hasSomethingToSend() { + if (nextAck > 0) { + return true; + } + if (!outgoingResponses.isEmpty()) { + return true; + } + if (!outgoingRequests.isEmpty()) { + return true; + } + return false; + } + + protected boolean isConnected() { + return connected; + } + + /** + * Can be used to waking up a sleeping writer. + */ + protected void notifyOutgoing() { + synchronized (outgoingMutex) { + outgoingMutex.notify(); + } } private void verifyLastRead() throws IOException { diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/DSStream.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/AbstractMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/MessageWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/OutboundMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/message/RequestPath.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundInvokeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundListStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundRemoveStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSetStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscribeStubs.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSOutboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/requester/DSRequester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundInvoke.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundList.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundRequest.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSet.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java similarity index 82% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java index 18968df1..4bf07402 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscription.java @@ -1,12 +1,18 @@ package com.acuity.iot.dsa.dslink.protocol.responder; +import com.acuity.iot.dsa.dslink.protocol.DSSession; import com.acuity.iot.dsa.dslink.protocol.message.MessageWriter; import com.acuity.iot.dsa.dslink.protocol.message.RequestPath; import org.iot.dsa.dslink.DSIResponder; import org.iot.dsa.dslink.responder.InboundSubscribeRequest; import org.iot.dsa.dslink.responder.SubscriptionCloseHandler; import org.iot.dsa.io.DSIWriter; -import org.iot.dsa.node.*; +import org.iot.dsa.node.DSIObject; +import org.iot.dsa.node.DSIStatus; +import org.iot.dsa.node.DSIValue; +import org.iot.dsa.node.DSInfo; +import org.iot.dsa.node.DSNode; +import org.iot.dsa.node.DSStatus; import org.iot.dsa.node.event.DSIEvent; import org.iot.dsa.node.event.DSISubscriber; import org.iot.dsa.node.event.DSTopic; @@ -22,7 +28,7 @@ public class DSInboundSubscription extends DSInboundRequest implements DSISubscriber, InboundSubscribeRequest { /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// private DSInfo child; @@ -32,8 +38,8 @@ public class DSInboundSubscription extends DSInboundRequest private DSInboundSubscriptions manager; private DSNode node; private boolean open = true; - private Integer sid; private int qos = 0; + private Integer sid; private Update updateHead; private Update updateTail; @@ -41,10 +47,14 @@ public class DSInboundSubscription extends DSInboundRequest // Constructors /////////////////////////////////////////////////////////////////////////// - protected DSInboundSubscription(DSInboundSubscriptions manager, Integer sid, String path, + protected DSInboundSubscription(DSInboundSubscriptions manager, + Integer sid, + String path, int qos) { this.manager = manager; this.sid = sid; + setResponder(manager.getResponder()); + setSession(manager.getResponder().getSession()); setPath(path); this.qos = qos; setLink(manager.getLink()); @@ -52,7 +62,7 @@ protected DSInboundSubscription(DSInboundSubscriptions manager, Integer sid, Str } /////////////////////////////////////////////////////////////////////////// - // Methods in alphabetical order + // Public Methods /////////////////////////////////////////////////////////////////////////// @Override @@ -60,24 +70,6 @@ public void close() { manager.unsubscribe(sid); } - /** - * Remove an update from the queue. - */ - protected synchronized Update dequeue() { - if (updateHead == null) { - return null; - } - Update ret = null; - ret = updateHead; - if (updateHead == updateTail) { - updateHead = updateTail = null; - } else { - updateHead = updateHead.next; - } - ret.next = null; - return ret; - } - /** * Unique subscription id for this path. */ @@ -86,30 +78,6 @@ public Integer getSubscriptionId() { return sid; } - protected void init() { - RequestPath path = new RequestPath(getPath(), getLink()); - if (path.isResponder()) { - DSIResponder responder = (DSIResponder) path.getTarget(); - setPath(path.getPath()); - closeHandler = responder.onSubscribe(this); - } else { - DSIObject obj = path.getTarget(); - if (obj instanceof DSNode) { - node = (DSNode) obj; - node.subscribe(DSNode.VALUE_TOPIC, null, this); - onEvent(DSNode.VALUE_TOPIC, Event.NODE_CHANGED, node, null, - (Object[]) null); - } else { - DSInfo info = path.getInfo(); - node = path.getParent(); - child = info; - node.subscribe(DSNode.VALUE_TOPIC, info, this); - onEvent(DSNode.VALUE_TOPIC, Event.CHILD_CHANGED, node, info, - (Object[]) null); - } - } - } - /** * For v2 only. */ @@ -117,32 +85,6 @@ public boolean isCloseAfterUpdate() { return closeAfterUpdate; } - /** - * Called no matter how closed. - */ - void onClose() { - synchronized (this) { - if (!open) { - return; - } - open = false; - } - try { - if (closeHandler != null) { - closeHandler.onClose(getSubscriptionId()); - } - } catch (Exception x) { - manager.warn(manager.getPath(), x); - } - try { - if (node != null) { - node.unsubscribe(DSNode.VALUE_TOPIC, child, this); - } - } catch (Exception x) { - manager.warn(manager.getPath(), x); - } - } - @Override public void onEvent(DSTopic topic, DSIEvent event, DSNode node, DSInfo child, Object... params) { @@ -152,11 +94,11 @@ public void onEvent(DSTopic topic, DSIEvent event, DSNode node, DSInfo child, } else { value = (DSIValue) node; } - DSStatus quality = DSStatus.ok; + DSStatus status = DSStatus.ok; if (value instanceof DSIStatus) { - quality = ((DSIStatus) value).toStatus(); + status = ((DSIStatus) value).toStatus(); } - update(System.currentTimeMillis(), value, quality); + update(System.currentTimeMillis(), value, status); } @Override @@ -164,11 +106,21 @@ public void onUnsubscribed(DSTopic topic, DSNode node, DSInfo info) { close(); } + public DSInboundSubscription setCloseAfterUpdate(boolean closeAfterUpdate) { + this.closeAfterUpdate = closeAfterUpdate; + return this; + } + + @Override + public String toString() { + return "Subscription (" + getSubscriptionId() + ") " + getPath(); + } + /** * The responder should call this whenever the value or status changes. */ @Override - public void update(long timestamp, DSIValue value, DSStatus quality) { + public void update(long timestamp, DSIValue value, DSStatus status) { if (!open) { return; } @@ -176,21 +128,22 @@ public void update(long timestamp, DSIValue value, DSStatus quality) { if (qos == 0) { synchronized (this) { if (updateHead == null) { - updateHead = updateTail = new Update(); + updateHead = new Update(); } - updateHead.set(timestamp, value, quality); + updateHead.set(timestamp, value, status); if (enqueued) { return; } enqueued = true; } } else { - Update update = new Update().set(timestamp, value, quality); + Update update = new Update().set(timestamp, value, status); synchronized (this) { if (updateHead == null) { updateHead = updateTail = update; } else { updateTail.next = update; + updateTail = update; } if (enqueued) { return; @@ -201,9 +154,49 @@ public void update(long timestamp, DSIValue value, DSStatus quality) { manager.enqueue(this); } - public DSInboundSubscription setCloseAfterUpdate(boolean closeAfterUpdate) { - this.closeAfterUpdate = closeAfterUpdate; - return this; + /////////////////////////////////////////////////////////////////////////// + // Protected Methods + /////////////////////////////////////////////////////////////////////////// + + /** + * Remove an update from the queue. + */ + protected synchronized Update dequeue() { + if (updateHead == null) { + return null; + } + Update ret = updateHead; + if (updateHead == updateTail) { + updateHead = updateTail = null; + } else { + updateHead = updateHead.next; + } + ret.next = null; + return ret; + } + + protected void init() { + RequestPath path = new RequestPath(getPath(), getLink()); + if (path.isResponder()) { + DSIResponder responder = (DSIResponder) path.getTarget(); + setPath(path.getPath()); + closeHandler = responder.onSubscribe(this); + } else { + DSIObject obj = path.getTarget(); + if (obj instanceof DSNode) { + node = (DSNode) obj; + node.subscribe(DSNode.VALUE_TOPIC, null, this); + onEvent(DSNode.VALUE_TOPIC, Event.NODE_CHANGED, node, null, + (Object[]) null); + } else { + DSInfo info = path.getInfo(); + node = path.getParent(); + child = info; + node.subscribe(DSNode.VALUE_TOPIC, info, this); + onEvent(DSNode.VALUE_TOPIC, Event.CHILD_CHANGED, node, info, + (Object[]) null); + } + } } protected DSInboundSubscription setQos(int qos) { @@ -211,12 +204,6 @@ protected DSInboundSubscription setQos(int qos) { return this; } - @Override - public String toString() { - return "Subscription (" + getSubscriptionId() + ") " + getPath(); - } - - /** * Encodes one or more updates. * @@ -224,19 +211,20 @@ public String toString() { * @param buf For encoding timestamps. */ protected void write(MessageWriter writer, StringBuilder buf) { - DSResponder session = getResponder(); + DSSession session = getSession(); Update update = dequeue(); while (update != null) { write(update, writer, buf); if ((qos == 0) || session.shouldEndMessage()) { break; } + update = dequeue(); } synchronized (this) { if (updateHead == null) { if (qos == 0) { //reuse instance - updateHead = updateTail = update; + updateHead = update; } enqueued = false; return; @@ -261,12 +249,42 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { DSTime.encode(update.timestamp, true, buf); out.key("ts").value(buf.toString()); out.key("value").value(update.value.toElement()); - if ((update.quality != null) && !update.quality.isOk()) { - out.key("quality").value(update.quality.toString()); + if ((update.status != null) && !update.status.isOk()) { + out.key("status").value(update.status.toString()); } out.endMap(); } + /////////////////////////////////////////////////////////////////////////// + // Package / Private Methods + /////////////////////////////////////////////////////////////////////////// + + /** + * Called no matter how closed. + */ + void onClose() { + synchronized (this) { + if (!open) { + return; + } + open = false; + } + try { + if (closeHandler != null) { + closeHandler.onClose(getSubscriptionId()); + } + } catch (Exception x) { + manager.warn(manager.getPath(), x); + } + try { + if (node != null) { + node.unsubscribe(DSNode.VALUE_TOPIC, child, this); + } + } catch (Exception x) { + manager.warn(manager.getPath(), x); + } + } + /////////////////////////////////////////////////////////////////////////// // Inner Classes /////////////////////////////////////////////////////////////////////////// @@ -274,14 +292,14 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { protected class Update { Update next; + public DSStatus status; public long timestamp; public DSIValue value; - public DSStatus quality; - Update set(long timestamp, DSIValue value, DSStatus quality) { + Update set(long timestamp, DSIValue value, DSStatus status) { this.timestamp = timestamp; this.value = value; - this.quality = quality; + this.status = status; return this; } } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSInboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/responder/DSResponder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/CloseMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java similarity index 98% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java index d9acd5e6..a7c9b274 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1ConnectionInit.java @@ -25,7 +25,7 @@ public class DS1ConnectionInit extends DSNode { /////////////////////////////////////////////////////////////////////////// - // Constants + // Class Fields /////////////////////////////////////////////////////////////////////////// private static final String DSA_VERSION = "1.1.2"; @@ -36,7 +36,7 @@ public class DS1ConnectionInit extends DSNode { private String BROKER_RES = "Broker Response"; /////////////////////////////////////////////////////////////////////////// - // Fields + // Instance Fields /////////////////////////////////////////////////////////////////////////// private String authToken; @@ -46,11 +46,19 @@ public class DS1ConnectionInit extends DSNode { private DSMap response; /////////////////////////////////////////////////////////////////////////// - // Constructors + // Public Methods /////////////////////////////////////////////////////////////////////////// + @Override + public void onStable() { + this.connection = (DS1LinkConnection) getParent(); + this.link = connection.getLink(); + this.authToken = link.getConfig().getToken(); + this.brokerUri = link.getConfig().getBrokerUri(); + } + /////////////////////////////////////////////////////////////////////////// - // Methods + // Package / Private Methods /////////////////////////////////////////////////////////////////////////// DSLink getLink() { @@ -177,14 +185,6 @@ String makeWsUrl(String wsPath) { return buf.toString(); } - @Override - public void onStable() { - this.connection = (DS1LinkConnection) getParent(); - this.link = connection.getLink(); - this.authToken = link.getConfig().getToken(); - this.brokerUri = link.getConfig().getBrokerUri(); - } - /** * Throws an exception with a useful error message. */ diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1LinkConnection.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java similarity index 92% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java index ea3f6d30..f2899bbf 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/DS1Session.java @@ -1,5 +1,11 @@ package com.acuity.iot.dsa.dslink.protocol.v1; +import static org.iot.dsa.io.DSIReader.Token.BEGIN_LIST; +import static org.iot.dsa.io.DSIReader.Token.BEGIN_MAP; +import static org.iot.dsa.io.DSIReader.Token.END_LIST; +import static org.iot.dsa.io.DSIReader.Token.END_MAP; +import static org.iot.dsa.io.DSIReader.Token.NULL; + import com.acuity.iot.dsa.dslink.protocol.DSProtocolException; import com.acuity.iot.dsa.dslink.protocol.DSSession; import com.acuity.iot.dsa.dslink.protocol.message.MessageWriter; @@ -15,7 +21,6 @@ import org.iot.dsa.node.DSInfo; import org.iot.dsa.node.DSInt; import org.iot.dsa.node.DSMap; -import static org.iot.dsa.io.DSIReader.Token.*; /** * Implements DSA 1.1.2 @@ -29,7 +34,7 @@ public class DS1Session extends DSSession { /////////////////////////////////////////////////////////////////////////// static final int END_MSG_THRESHOLD = 48000; - static final String LAST_ACK_RECV = "Last Ack Recv"; + static final String LAST_ACK_RCVD = "Last Ack Rcvd"; static final String LAST_ACK_SENT = "Last Ack Sent"; static final int MAX_MSG_IVL = 45000; @@ -38,12 +43,12 @@ public class DS1Session extends DSSession { // Fields /////////////////////////////////////////////////////////////////////////// - private DSInfo lastAckRecv = getInfo(LAST_ACK_RECV); + private DSInfo lastAckRcvd = getInfo(LAST_ACK_RCVD); private DSInfo lastAckSent = getInfo(LAST_ACK_SENT); private long lastMessageSent; private MessageWriter messageWriter; - private boolean requestsNext = false; private DS1Requester requester = new DS1Requester(this); + private boolean requestsNext = false; private DS1Responder responder = new DS1Responder(this); ///////////////////////////////////////////////////////////////// @@ -58,7 +63,80 @@ public DS1Session(DS1LinkConnection connection) { } ///////////////////////////////////////////////////////////////// - // Methods + // Public Methods + ///////////////////////////////////////////////////////////////// + + @Override + public DS1LinkConnection getConnection() { + return (DS1LinkConnection) super.getConnection(); + } + + @Override + public long getLastAckRcvd() { + return lastAckRcvd.getElement().toLong(); + } + + public DSIReader getReader() { + return getConnection().getReader(); + } + + @Override + public DSIRequester getRequester() { + return requester; + } + + @Override + public void onConnect() { + super.onConnect(); + requester.onConnect(); + responder.onConnect(); + } + + @Override + public void onConnectFail() { + super.onConnectFail(); + requester.onConnectFail(); + responder.onConnectFail(); + } + + @Override + public void onDisconnect() { + super.onDisconnect(); + requester.onDisconnect(); + responder.onDisconnect(); + } + + /** + * Returns true if the current message size has crossed a message size threshold. + */ + public boolean shouldEndMessage() { + return (getWriter().length() + getTransport().messageSize()) > END_MSG_THRESHOLD; + } + + /** + * Write a request in the current message. Can be called multiple times after beginRequests() is + * called. endRequests() will be called once the request part of the message is complete. + * + * @see #beginRequests() + * @see #endRequests() + */ + public void writeRequest(OutboundMessage message) { + message.write(getMessageWriter()); + } + + /** + * Write a response in the current message. Can be called multiple times after beginResponses() + * is called. endResponses() will be called once the response part of the message is complete. + * + * @see #beginResponses() + * @see #endResponses() + */ + public void writeResponse(OutboundMessage message) { + message.write(getMessageWriter()); + } + + ///////////////////////////////////////////////////////////////// + // Protected Methods ///////////////////////////////////////////////////////////////// /** @@ -81,39 +159,39 @@ protected void beginMessage() { } /** - * Prepare for the response portion of the message. This will be followed by one or more calls - * to writeResponse(). When there are no more responses, endResponses() will be called. + * Prepare for the request portion of the message. This will be followed by one or more calls + * to writeRequest(). When there are no more responses, endRequests() will be called. * * @see #writeResponse(OutboundMessage) * @see #endResponses() */ - protected void beginResponses() { - getWriter().key("responses").beginList(); + protected void beginRequests() { + getWriter().key("requests").beginList(); } /** - * Prepare for the request portion of the message. This will be followed by one or more calls - * to writeRequest(). When there are no more responses, endRequests() will be called. + * Prepare for the response portion of the message. This will be followed by one or more calls + * to writeResponse(). When there are no more responses, endResponses() will be called. * * @see #writeResponse(OutboundMessage) * @see #endResponses() */ - protected void beginRequests() { - getWriter().key("requests").beginList(); + protected void beginResponses() { + getWriter().key("responses").beginList(); } @Override protected void declareDefaults() { - declareDefault(LAST_ACK_RECV, DSInt.NULL).setReadOnly(true); + declareDefault(LAST_ACK_RCVD, DSInt.NULL).setReadOnly(true); declareDefault(LAST_ACK_SENT, DSInt.NULL).setReadOnly(true); } @Override protected void doRecvMessage() throws IOException { DSIReader reader = getReader(); + getTransport().beginRecvMessage(); switch (reader.next()) { case BEGIN_MAP: - getTransport().beginRecvMessage(); processEnvelope(reader); getTransport().endRecvMessage(); break; @@ -155,15 +233,13 @@ protected void endMessage() { getWriter().endMap().flush(); } - /** - * Complete the outgoing responses part of the message. - * - * @see #beginResponses() - * @see #writeResponse(OutboundMessage) - */ - protected void endResponses() { - getWriter().endList(); + /* + @Override + protected void onStable() { + put("Requester Session", requesterSession); + put("Responder Session", responderSession); } + */ /** * Complete the outgoing requests part of the message. @@ -175,33 +251,14 @@ protected void endRequests() { getWriter().endList(); } - @Override - public DS1LinkConnection getConnection() { - return (DS1LinkConnection) super.getConnection(); - } - - private MessageWriter getMessageWriter() { - if (messageWriter == null) { - messageWriter = new MyMessageWriter(getConnection().getWriter()); - } - return messageWriter; - } - - public DSIReader getReader() { - return getConnection().getReader(); - } - - @Override - public DSIRequester getRequester() { - return requester; - } - - private DSIWriter getWriter() { - return getMessageWriter().getWriter(); - } - - private boolean hasPingToSend() { - return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; + /** + * Complete the outgoing responses part of the message. + * + * @see #beginResponses() + * @see #writeResponse(OutboundMessage) + */ + protected void endResponses() { + getWriter().endList(); } /** @@ -214,35 +271,6 @@ protected boolean hasSomethingToSend() { return super.hasSomethingToSend(); } - /* - @Override - protected void onStable() { - put("Requester Session", requesterSession); - put("Responder Session", responderSession); - } - */ - - @Override - public void onConnect() { - super.onConnect(); - requester.onConnect(); - responder.onConnect(); - } - - @Override - public void onConnectFail() { - super.onConnectFail(); - requester.onConnectFail(); - responder.onConnectFail(); - } - - @Override - public void onDisconnect() { - super.onDisconnect(); - requester.onDisconnect(); - responder.onDisconnect(); - } - /** * Decomposes and processes a complete envelope which can contain multiple requests and * responses. @@ -277,7 +305,7 @@ protected void processEnvelope(DSIReader reader) { msg = (int) reader.getLong(); } else if (key.equals("ack")) { reader.next(); - put(lastAckRecv, DSInt.valueOf((int) reader.getLong())); + put(lastAckRcvd, DSInt.valueOf((int) reader.getLong())); } else if (key.equals("allowed")) { if (reader.next() != Token.BOOLEAN) { throw new IllegalStateException("Allowed not a boolean"); @@ -287,6 +315,7 @@ protected void processEnvelope(DSIReader reader) { getConnection().setRequesterAllowed(); } } else if (key.equals("salt")) { + reader.next(); String s = reader.getElement().toString(); fine(fine() ? "Next salt: " + s : null); getConnection().updateSalt(s); @@ -332,6 +361,25 @@ protected void processMessages(DSIReader reader, boolean areRequests) { } } + ///////////////////////////////////////////////////////////////// + // Package / Private Methods + ///////////////////////////////////////////////////////////////// + + private MessageWriter getMessageWriter() { + if (messageWriter == null) { + messageWriter = new MyMessageWriter(getConnection().getWriter()); + } + return messageWriter; + } + + private DSIWriter getWriter() { + return getMessageWriter().getWriter(); + } + + private boolean hasPingToSend() { + return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; + } + /** * Send messages from one of the queues. * @@ -371,35 +419,6 @@ private void send(boolean requests, long endTime) { } } - /** - * Returns true if the current message size has crossed a message size threshold. - */ - public boolean shouldEndMessage() { - return (getWriter().length() + getTransport().messageSize()) > END_MSG_THRESHOLD; - } - - /** - * Write a request in the current message. Can be called multiple times after beginRequests() is - * called. endRequests() will be called once the request part of the message is complete. - * - * @see #beginRequests() - * @see #endRequests() - */ - public void writeRequest(OutboundMessage message) { - message.write(getMessageWriter()); - } - - /** - * Write a response in the current message. Can be called multiple times after beginResponses() - * is called. endResponses() will be called once the response part of the message is complete. - * - * @see #beginResponses() - * @see #endResponses() - */ - public void writeResponse(OutboundMessage message) { - message.write(getMessageWriter()); - } - ///////////////////////////////////////////////////////////////// // Inner Classes ///////////////////////////////////////////////////////////////// diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/requester/DS1Requester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/DS1Responder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v1/responder/ErrorMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/AckMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/CloseMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2LinkConnection.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Message.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2MessageWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java similarity index 90% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java index 88d813af..9e7fb10e 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/DS2Session.java @@ -25,20 +25,20 @@ public class DS2Session extends DSSession implements MessageConstants { /////////////////////////////////////////////////////////////////////////// static final int END_MSG_THRESHOLD = 48 * 1024; - static final String LAST_ACK_RECV = "Last Ack Recv"; + static final String LAST_ACK_RCVD = "Last Ack Rcvd"; static final int MAX_MSG_IVL = 45000; /////////////////////////////////////////////////////////////////////////// // Fields /////////////////////////////////////////////////////////////////////////// - private DSInfo lastAckRecv = getInfo(LAST_ACK_RECV); + private DSInfo lastAckRcvd = getInfo(LAST_ACK_RCVD); private long lastMessageSent; private DS2MessageReader messageReader; private DS2MessageWriter messageWriter; private Map multiparts = new HashMap(); - private boolean requestsNext = false; private DS2Requester requester = new DS2Requester(this); + private boolean requestsNext = false; private DS2Responder responder = new DS2Responder(this); ///////////////////////////////////////////////////////////////// @@ -53,12 +53,74 @@ public DS2Session(DS2LinkConnection connection) { } ///////////////////////////////////////////////////////////////// - // Methods + // Public Methods + ///////////////////////////////////////////////////////////////// + + @Override + public DS2LinkConnection getConnection() { + return (DS2LinkConnection) super.getConnection(); + } + + @Override + public long getLastAckRcvd() { + return lastAckRcvd.getElement().toLong(); + } + + @Override + public DSIRequester getRequester() { + return requester; + } + + public DSBinaryTransport getTransport() { + return (DSBinaryTransport) super.getTransport(); + } + + @Override + public void onConnect() { + super.onConnect(); + messageReader = null; + messageWriter = null; + requester.onConnect(); + responder.onConnect(); + } + + @Override + public void onConnectFail() { + super.onConnectFail(); + messageReader = null; + messageWriter = null; + multiparts.clear(); + requester.onConnectFail(); + responder.onConnectFail(); + } + + @Override + public void onDisconnect() { + super.onDisconnect(); + messageReader = null; + messageWriter = null; + multiparts.clear(); + requester.onDisconnect(); + responder.onDisconnect(); + } + + /** + * Returns true if the current message size has crossed a message size threshold. + */ + public boolean shouldEndMessage() { + if (getMessageWriter().getBodyLength() > END_MSG_THRESHOLD) { + return true; + } + return (System.currentTimeMillis() - lastMessageSent) > 1000; + } + + ///////////////////////////////////////////////////////////////// + // Protected Methods ///////////////////////////////////////////////////////////////// @Override protected void declareDefaults() { - declareDefault(LAST_ACK_RECV, DSInt.NULL).setReadOnly(true); + declareDefault(LAST_ACK_RCVD, DSInt.NULL).setReadOnly(true); } @Override @@ -69,7 +131,7 @@ protected void doRecvMessage() { reader.init(transport.getInput()); int ack = reader.getAckId(); if (ack > 0) { - put(lastAckRecv, DSInt.valueOf(ack)); + put(lastAckRcvd, DSInt.valueOf(ack)); } if (reader.isMultipart()) { MultipartReader multi = multiparts.get(reader.getRequestId()); @@ -87,7 +149,7 @@ protected void doRecvMessage() { responder.handleRequest(reader); setNextAck(reader.getRequestId()); } else if (reader.isAck()) { - put(lastAckRecv, DSInt.valueOf(DSBytes.readInt(reader.getBody(), false))); + put(lastAckRcvd, DSInt.valueOf(DSBytes.readInt(reader.getBody(), false))); } else if (reader.isPing()) { ; } else if (reader.isResponse()) { @@ -109,10 +171,27 @@ protected void doSendMessage() { } } + /* @Override - public DS2LinkConnection getConnection() { - return (DS2LinkConnection) super.getConnection(); + protected void onStable() { + put("Requester Session", requesterSession); + put("Responder Session", responderSession); } + */ + + /** + * Override point, returns true if there are any pending acks or outbound messages queued up. + */ + protected boolean hasSomethingToSend() { + if (hasPingToSend()) { + return true; + } + return super.hasSomethingToSend(); + } + + ///////////////////////////////////////////////////////////////// + // Package / Private Methods + ///////////////////////////////////////////////////////////////// private DS2MessageReader getMessageReader() { if (messageReader == null) { @@ -128,66 +207,10 @@ private DS2MessageWriter getMessageWriter() { return messageWriter; } - @Override - public DSIRequester getRequester() { - return requester; - } - - public DSBinaryTransport getTransport() { - return (DSBinaryTransport) super.getTransport(); - } - private boolean hasPingToSend() { return (System.currentTimeMillis() - lastMessageSent) > MAX_MSG_IVL; } - /** - * Override point, returns true if there are any pending acks or outbound messages queued up. - */ - protected boolean hasSomethingToSend() { - if (hasPingToSend()) { - return true; - } - return super.hasSomethingToSend(); - } - - /* - @Override - protected void onStable() { - put("Requester Session", requesterSession); - put("Responder Session", responderSession); - } - */ - - @Override - public void onConnect() { - super.onConnect(); - messageReader = null; - messageWriter = null; - requester.onConnect(); - responder.onConnect(); - } - - @Override - public void onConnectFail() { - super.onConnectFail(); - messageReader = null; - messageWriter = null; - multiparts.clear(); - requester.onConnectFail(); - responder.onConnectFail(); - } - - @Override - public void onDisconnect() { - super.onDisconnect(); - messageReader = null; - messageWriter = null; - multiparts.clear(); - requester.onDisconnect(); - responder.onDisconnect(); - } - /** * Send messages from one of the queues. * @@ -220,14 +243,4 @@ private void send(boolean requests) { } } - /** - * Returns true if the current message size has crossed a message size threshold. - */ - public boolean shouldEndMessage() { - if (getMessageWriter().getBodyLength() > END_MSG_THRESHOLD) { - return true; - } - return (System.currentTimeMillis() - lastMessageSent) > 1000; - } - } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MessageConstants.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartReader.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/MultipartWriter.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/PingMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundInvokeStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundListStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundRemoveStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSetStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundStub.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2OutboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/requester/DS2Requester.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundInvoke.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundList.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSet.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java similarity index 94% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java index adb26490..0a710899 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscription.java @@ -39,8 +39,8 @@ protected void write(Update update, MessageWriter writer, StringBuilder buf) { buf.setLength(0); DSTime.encode(update.timestamp, true, buf); dsiWriter.key("timestamp").value(buf.toString()); - if (!update.quality.isOk()) { - dsiWriter.key("status").value(update.quality.toElement()); + if (!update.status.isOk()) { + dsiWriter.key("status").value(update.status.toElement()); } dsiWriter.endMap(); int end = byteBuffer.length(); diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2InboundSubscriptions.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/DS2Responder.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/protocol/v2/responder/ErrorMessage.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/AnonymousTrustFactory.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/cert/SysCertManager.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ClassLoadingNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/CompilationNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/GarbageCollectorNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MXBeanNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryManagerNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/MemoryPoolNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/OperatingSystemNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ProfilerUtils.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/RuntimeNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/SysProfiler.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadInfoNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/sys/profiler/ThreadNode.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java similarity index 86% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java index 696b0300..6f831c9c 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestLink.java @@ -7,7 +7,7 @@ * * @author Aaron Hansen */ -public class TestLink extends V2TestLink { +public class TestLink extends V1TestLink { public TestLink() { } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/TestTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java similarity index 94% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java index 675f532e..06b6bf70 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V1TestLink.java @@ -26,7 +26,7 @@ public V1TestLink(DSMainNode MainNode) { DSLinkConfig cfg = new DSLinkConfig(); cfg.setDslinkJson(new DSMap().put("configs", new DSMap())); cfg.setLinkName("dslink-java-testing"); - cfg.setLogLevel(Level.FINEST); + //cfg.setLogLevel(Level.FINEST); cfg.setConfig(DSLinkConfig.CFG_CONNECTION_TYPE, TestConnection.class.getName()); cfg.setConfig(DSLinkConfig.CFG_STABLE_DELAY, 1); init(cfg); @@ -34,6 +34,10 @@ public V1TestLink(DSMainNode MainNode) { public static class TestConnection extends DS1LinkConnection { + public String getPathInBroker() { + return ""; + } + protected DS1ConnectionInit initializeConnection() { return new DS1ConnectionInit(); } diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java similarity index 93% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java index b4ae270f..4e49629d 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/test/V2TestLink.java @@ -26,7 +26,7 @@ public V2TestLink(DSMainNode MainNode) { DSLinkConfig cfg = new DSLinkConfig(); cfg.setDslinkJson(new DSMap().put("configs", new DSMap())); cfg.setLinkName("dslink-java-testing"); - cfg.setLogLevel(Level.FINEST); + //cfg.setLogLevel(Level.FINEST); cfg.setConfig(DSLinkConfig.CFG_CONNECTION_TYPE, TestConnection.class.getName()); cfg.setConfig(DSLinkConfig.CFG_STABLE_DELAY, 1); init(cfg); @@ -34,6 +34,10 @@ public V2TestLink(DSMainNode MainNode) { public static class TestConnection extends DS2LinkConnection { + public String getPathInBroker() { + return ""; + } + @Override protected DSBinaryTransport makeTransport() { TestTransport transport = new TestTransport(); diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java similarity index 99% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java index bf39e6b0..1bec107a 100644 --- a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java +++ b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/BufferedBinaryTransport.java @@ -40,7 +40,6 @@ public void beginRecvMessage() { if (traceIn == null) { traceIn = new StringBuilder(); } - traceInSize = 0; traceIn.append("Recv:\n"); } } @@ -51,7 +50,6 @@ public void beginSendMessage() { if (traceOut == null) { traceOut = new StringBuilder(); } - traceOutSize = 0; traceOut.append("Send:\n"); } } @@ -86,6 +84,7 @@ public void endRecvMessage() { trace(traceIn.toString()); } traceIn.setLength(0); + traceInSize = 0; } } else if (traceIn != null) { traceIn = null; @@ -100,6 +99,7 @@ public void endSendMessage() { trace(traceOut.toString()); } traceOut.setLength(0); + traceOutSize = 0; } } else if (traceOut != null) { traceOut = null; diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSBinaryTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTextTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/DSTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/SocketTransport.java diff --git a/dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java b/dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java similarity index 100% rename from dslink-core/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java rename to dslink-v2/src/main/java/com/acuity/iot/dsa/dslink/transport/StreamBinaryTransport.java diff --git a/dslink-core/src/main/java/org/iot/dsa/DSRuntime.java b/dslink-v2/src/main/java/org/iot/dsa/DSRuntime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/DSRuntime.java rename to dslink-v2/src/main/java/org/iot/dsa/DSRuntime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/DSThreadPool.java b/dslink-v2/src/main/java/org/iot/dsa/DSThreadPool.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/DSThreadPool.java rename to dslink-v2/src/main/java/org/iot/dsa/DSThreadPool.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSIRequester.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSIRequester.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSIRequester.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSIRequester.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSIResponder.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSIResponder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSIResponder.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSIResponder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSInternalErrorException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSInvalidPathException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLink.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLink.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLink.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConfig.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSLinkConnection.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSMainNode.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSMainNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSMainNode.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSMainNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSPermissionException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSPermissionException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSPermissionException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSPermissionException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSRequestException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSRequestException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSRequestException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSRequestException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSSysNode.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSSysNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSSysNode.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSSysNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/DSUnsupportedException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractListHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/AbstractSubscribeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/ErrorType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundListHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundRequestHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundStream.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java similarity index 80% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java index d483f906..54b69580 100644 --- a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java +++ b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/OutboundSubscribeHandler.java @@ -12,7 +12,10 @@ public interface OutboundSubscribeHandler extends OutboundRequestHandler { /** - * Called by the requester before returning from the subscribe method. + * Called by the requester before returning from the subscribe method. The actual subscribe + * message will not have sent yet. If there is a problem with the subscription + * onError will be called, otherwise onUpdate will be called whenever the responder sends + * an update. * * @param path Who is being subscribed. * @param qos Quality of service, 0-3. diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleInvokeHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/SimpleRequestHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/requester/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/requester/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/requester/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/requester/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/ApiObject.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundInvokeRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundListRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSetRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/InboundSubscribeRequest.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/OutboundListResponse.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/SubscriptionCloseHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/dslink/responder/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/dslink/responder/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/dslink/responder/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/dslink/responder/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/AbstractReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/AbstractReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/AbstractReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/AbstractReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/AbstractWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/AbstractWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/AbstractWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/AbstractWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSBase64.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSBase64.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSBase64.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSBase64.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSIReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSIReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSIReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSIReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/DSIWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/DSIWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/DSIWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/DSIWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/NodeDecoder.java b/dslink-v2/src/main/java/org/iot/dsa/io/NodeDecoder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/NodeDecoder.java rename to dslink-v2/src/main/java/org/iot/dsa/io/NodeDecoder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/NodeEncoder.java b/dslink-v2/src/main/java/org/iot/dsa/io/NodeEncoder.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/NodeEncoder.java rename to dslink-v2/src/main/java/org/iot/dsa/io/NodeEncoder.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/AbstractJsonWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/CharSequenceInput.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonAppender.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonAppender.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonAppender.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonAppender.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonConstants.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonConstants.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonConstants.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonConstants.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonInput.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonInput.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonInput.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonInput.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonReader.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonReader.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonReader.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonReader.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/json/JsonWriter.java b/dslink-v2/src/main/java/org/iot/dsa/io/json/JsonWriter.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/json/JsonWriter.java rename to dslink-v2/src/main/java/org/iot/dsa/io/json/JsonWriter.java diff --git a/dslink-core/src/main/java/org/iot/dsa/io/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/io/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/io/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/io/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/AsyncLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSILevels.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSILevels.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSILevels.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSILevels.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLevel.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLevel.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLevel.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLevel.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLogger.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLogger.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLogger.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLogger.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/DSLogging.java b/dslink-v2/src/main/java/org/iot/dsa/logging/DSLogging.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/DSLogging.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/DSLogging.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/FileLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/FileLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/FileLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/FileLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java b/dslink-v2/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/PrintStreamLogHandler.java diff --git a/dslink-core/src/main/java/org/iot/dsa/logging/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/logging/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/logging/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/logging/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSBool.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSBool.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSBool.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSBool.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSBytes.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSBytes.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSBytes.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSBytes.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSDouble.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSDouble.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSDouble.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSDouble.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSElement.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSElement.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSElement.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSElement.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSElementType.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSElementType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSElementType.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSElementType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSFlexEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSFlexEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSFlexEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSFlexEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSFloat.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSFloat.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSFloat.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSFloat.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSGroup.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSGroup.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSGroup.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSGroup.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIBoolean.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIBoolean.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIBoolean.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIBoolean.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIMetadata.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIMetadata.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIMetadata.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIMetadata.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSINumber.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSINumber.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSINumber.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSINumber.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIObject.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIObject.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIObject.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIObject.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIStatus.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIStatus.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIStatus.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIStatus.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIStorable.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIStorable.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIStorable.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIStorable.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSIValue.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSIValue.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSIValue.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSIValue.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java similarity index 93% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java index 64fd1457..2cf4050b 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSInfo.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfo.java @@ -3,7 +3,6 @@ import java.util.Iterator; import org.iot.dsa.dslink.responder.ApiObject; import org.iot.dsa.node.action.DSAbstractAction; -import org.iot.dsa.node.action.DSAction; import org.iot.dsa.node.event.DSInfoTopic; import org.iot.dsa.util.DSUtil; @@ -215,6 +214,16 @@ public DSNode getParent() { return parent; } + /** + * Concatenates and encodes the path of the parent node and the name of this info. + * + * @param buf Can be null in which case a new one will be created. + * @return The given buf, or the newly created one. + */ + public StringBuilder getPath(StringBuilder buf) { + return DSPath.append(DSPath.encodePath(parent, buf), name); + } + /** * A convenience that casts getObject(). */ @@ -398,6 +407,10 @@ public DSInfo nextValue() { return cur; } + /** + * False by default, set to true if you don't want the child to require admin level + * permissions. + */ public DSInfo setAdmin(boolean admin) { setFlag(ADMIN, admin); return this; @@ -409,6 +422,9 @@ DSInfo setFlag(int position, boolean on) { return this; } + /** + * False by default, set to true if you don't want the child to be sent to clients. + */ public DSInfo setHidden(boolean hidden) { setFlag(HIDDEN, hidden); return this; @@ -434,11 +450,17 @@ DSInfo setPermanent(boolean arg) { return this; } + /** + * False by default, set to true if you don't want the child to be written by clients. + */ public DSInfo setReadOnly(boolean readOnly) { setFlag(READONLY, readOnly); return this; } + /** + * False by default, set to true if you don't want the child persisted. + */ public DSInfo setTransient(boolean trans) { setFlag(TRANSIENT, trans); return this; diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInfoProxy.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInfoProxy.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInfoProxy.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInfoProxy.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSInt.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSInt.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSInt.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSInt.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSJavaEnum.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSJavaEnum.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSJavaEnum.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSJavaEnum.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSList.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSList.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSList.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSList.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSLong.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSLong.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSLong.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSLong.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSMap.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSMap.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSMap.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSMap.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSMetadata.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSMetadata.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSMetadata.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSMetadata.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSNode.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java similarity index 98% rename from dslink-core/src/main/java/org/iot/dsa/node/DSNode.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java index bde9c286..0bd046c2 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSNode.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSNode.java @@ -8,7 +8,11 @@ import org.iot.dsa.logging.DSLogger; import org.iot.dsa.node.action.ActionInvocation; import org.iot.dsa.node.action.ActionResult; -import org.iot.dsa.node.event.*; +import org.iot.dsa.node.event.DSIEvent; +import org.iot.dsa.node.event.DSISubscriber; +import org.iot.dsa.node.event.DSInfoTopic; +import org.iot.dsa.node.event.DSTopic; +import org.iot.dsa.node.event.DSValueTopic; import org.iot.dsa.util.DSException; import org.iot.dsa.util.DSUtil; @@ -324,6 +328,9 @@ public DSNode copy() { ret.add(myInfo.copy()); } else { hisInfo.copy(myInfo); + if (hisInfo.isNode()) { + hisInfo.getNode().infoInParent = hisInfo; + } } myInfo = myInfo.next(); } @@ -441,6 +448,23 @@ public DSIObject get(String name) { return null; } + /** + * Ascends the tree looking for a ancestral node that is an instance of the parameter. + * + * @param clazz Can be a class, interface or super class. + * @return Possibly null. + * @see java.lang.Class#isAssignableFrom(Class) + */ + public DSNode getAncestor(Class clazz) { + DSNode node = getParent(); + while (node != null) { + if (clazz.isAssignableFrom(node.getClass())) { + return node; + } + } + return node; + } + /** * A convenience for (DSElement) get(name). */ diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSNull.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSNull.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSNull.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSNull.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java similarity index 91% rename from dslink-core/src/main/java/org/iot/dsa/node/DSPath.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java index 48cc0f3f..15d0d49e 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/DSPath.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/DSPath.java @@ -37,6 +37,32 @@ public DSPath(String path) { // Methods in alphabetical order /////////////////////////////////////////////////////////////////////////// + /** + * Concatenates the two paths into the leading bucket. Insures a single forward slash + * character separates them. The bucket will not be cleared, the path will be appended to it. + * + * @param leading Can be null, in which case a new buffer will be created. + * @return The given bucket, or a new one if that was null, with the complete path appended. + */ + public static StringBuilder append(StringBuilder leading, String trailing) { + if (leading == null) { + leading = new StringBuilder(); + } + if ((trailing == null) || trailing.isEmpty()) { + return leading; + } + if ((leading.length() > 0) && leading.charAt(leading.length() - 1) == '/') { + if (trailing.charAt(0) == '/') { + return leading.append(trailing.substring(1)); + } + } else { + if (trailing.charAt(0) != '/') { + leading.append('/'); + } + } + return leading.append(trailing); + } + /** * Concatenates the two paths into the given bucket. Insures a single forward slash character * separates them. The bucket will not be cleared, the path will be appended to it. @@ -54,7 +80,7 @@ public static StringBuilder concat(String leading, String trailing, StringBuilde if ((trailing == null) || trailing.isEmpty()) { return bucket; } - if (leading.charAt(leading.length() - 1) == '/') { + if (!leading.isEmpty() && leading.charAt(leading.length() - 1) == '/') { if (trailing.charAt(0) == '/') { return bucket.append(trailing.substring(1)); } diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSRegistry.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSRegistry.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSRegistry.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSRegistry.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSStatus.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSStatus.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSStatus.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSStatus.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSString.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSString.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSString.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSString.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValue.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValue.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValue.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValue.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValueNode.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValueNode.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValueNode.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValueNode.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/DSValueType.java b/dslink-v2/src/main/java/org/iot/dsa/node/DSValueType.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/DSValueType.java rename to dslink-v2/src/main/java/org/iot/dsa/node/DSValueType.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionInvocation.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionInvocation.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionInvocation.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionInvocation.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionResult.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionResult.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionResult.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionResult.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionSpec.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionSpec.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionSpec.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionSpec.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionTable.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionTable.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionTable.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionTable.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/ActionValues.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/ActionValues.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/ActionValues.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/ActionValues.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java similarity index 96% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java index ac0eabdd..33a2d000 100644 --- a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java +++ b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAbstractAction.java @@ -221,16 +221,18 @@ public Iterator getValueResults() { } /** - * Use info.getParent(), not the outer 'this' to access the node on which the - * action is being invoked. This is because actions instances can be status / reused - * on multiple nodes. + * Use info.getParent(), not the outer 'this' to access the node on which the action is being + * invoked. This is because actions instances can (should) be reused on multiple nodes. + *

+ * To report an error, simply throw a runtime exception from this method, or call + * ActionInvocation.close(Exception). * * @param info The info about the action in the node being being invoked. * Do not use the outer 'this'. * @param invocation Details about the incoming invoke as well as the mechanism to * send updates over an open stream. * @return Can be null if the result type is void. - * @throws IllegalStateException If the target node has not overridden onInvoke. + * @throws RuntimeException Throw a runtime exception to report an error. */ public abstract ActionResult invoke(DSInfo info, ActionInvocation invocation); diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSAction.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSAction.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSAction.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSAction.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/action/DSActionValues.java b/dslink-v2/src/main/java/org/iot/dsa/node/action/DSActionValues.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/action/DSActionValues.java rename to dslink-v2/src/main/java/org/iot/dsa/node/action/DSActionValues.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSIEvent.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSIEvent.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSIEvent.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSIEvent.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSISubscriber.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSISubscriber.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSISubscriber.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSISubscriber.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSInfoTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/event/DSValueTopic.java b/dslink-v2/src/main/java/org/iot/dsa/node/event/DSValueTopic.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/event/DSValueTopic.java rename to dslink-v2/src/main/java/org/iot/dsa/node/event/DSValueTopic.java diff --git a/dslink-core/src/main/java/org/iot/dsa/node/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/node/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/node/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/node/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/package-info.java b/dslink-v2/src/main/java/org/iot/dsa/package-info.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/package-info.java rename to dslink-v2/src/main/java/org/iot/dsa/package-info.java diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSIPassword.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSIPassword.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSIPassword.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSIPassword.java diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSKeys.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSKeys.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSKeys.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSKeys.java diff --git a/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java new file mode 100644 index 00000000..7c8c2720 --- /dev/null +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes128.java @@ -0,0 +1,230 @@ +package org.iot.dsa.security; + +import java.security.Key; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import org.iot.dsa.io.DSBase64; +import org.iot.dsa.node.DSElement; +import org.iot.dsa.node.DSIStorable; +import org.iot.dsa.node.DSRegistry; +import org.iot.dsa.node.DSString; +import org.iot.dsa.node.DSValue; +import org.iot.dsa.node.DSValueType; +import org.iot.dsa.util.DSException; + +/** + * This stores an encrypted password which can then be decrypted. This does not require the JCE + * unlimited strength jurisdiction policy files to be installed. 128 bit AES is uncompromised and + * safe to used. + * + * @author Aaron Hansen + */ +public class DSPasswordAes128 extends DSValue implements DSIPassword, DSIStorable { + + // Constants + // --------- + + private static Cipher cipher; + private static Key key; + public static final DSPasswordAes128 NULL = new DSPasswordAes128(DSString.NULL); + + // Fields + // ------ + + private DSString value; //base64 encoded + + // Constructors + // ------------ + + private DSPasswordAes128(DSString encrypted) { + this.value = encrypted; + } + + private DSPasswordAes128(String encrypted) { + this(DSString.valueOf(encrypted)); + } + + // Public Methods + // -------------- + + /** + * Returns the decrypted password. + * + * @throws DSException If there is a problem. + */ + public String decode() { + byte[] bytes = DSBase64.decode(value.toString()); + String ret = null; + try { + synchronized (cipher) { + cipher.init(Cipher.DECRYPT_MODE, key); + ret = new String(cipher.doFinal(bytes), DSString.UTF8); + } + } catch (Exception x) { + DSException.throwRuntime(x); + } + return ret; + } + + /** + * Encrypts the given bytes. + */ + public static String encode(byte[] arg) { + byte[] bytes = null; + try { + synchronized (cipher) { + cipher.init(Cipher.ENCRYPT_MODE, key); + bytes = cipher.doFinal(arg); + } + } catch (Exception x) { + DSException.throwRuntime(x); + } + return DSBase64.encodeUrl(bytes); + } + + /** + * Encrypts the given text. + */ + public static String encode(String arg) { + return encode(arg.getBytes(DSString.UTF8)); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof DSPasswordAes128) { + return value.equals(obj.toString()); + } + return false; + } + + @Override + public DSValueType getValueType() { + return DSValueType.STRING; + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public boolean isEqual(Object obj) { + return equals(obj); + } + + @Override + public boolean isNull() { + return this == NULL; + } + + /** + * Encrypts the string value of the given element and compares against the value stored in this + * object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(DSElement clearText) { + if (clearText == null) { + return isNull(); + } + if (clearText.isNull()) { + return isNull(); + } + return isValid(clearText.toString()); + } + + /** + * Encrypts the given string and compares against the value stored in this object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(String clearText) { + if ((clearText == null) || clearText.isEmpty()) { + return isNull(); + } + return value.toString().equals(encode(clearText)); + } + + @Override + public DSString store() { + return toElement(); + } + + @Override + public DSPasswordAes128 restore(DSElement element) { + if (element.isNull()) { + return NULL; + } + return new DSPasswordAes128(element.toString()); + } + + /** + * Returns a string representing the url safe base64 encoding of the hash. + */ + @Override + public DSString toElement() { + return value; + } + + /** + * The encrypted password, base64 encoded. + */ + @Override + public String toString() { + return value.toString(); + } + + /** + * Creates a encrypted password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null, isNull() or the empty string. + */ + @Override + public DSPasswordAes128 valueOf(DSElement arg) { + if ((arg == null) || arg.isNull()) { + return NULL; + } + String s = arg.toString(); + if (s.isEmpty()) { + return NULL; + } + return valueOf(s); + } + + /** + * Creates a encrypted password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null or the empty string. + */ + public static DSPasswordAes128 valueOf(String arg) { + if (arg == null) { + return NULL; + } else if (arg.isEmpty()) { + return NULL; + } + return new DSPasswordAes128(encode(arg)); + } + + // Initialization + // -------------- + + static { + try { + cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); + byte[] nameBytes = DSPasswordAes128.class.getName().getBytes(DSString.UTF8); + byte[] keyBytes = new byte[16]; + System.arraycopy(nameBytes, 0, keyBytes, 0, 16); + key = new SecretKeySpec(keyBytes, "AES"); + } catch (Exception x) { + Logger.getLogger("security").log(Level.SEVERE, "AES problem", x); + } + DSRegistry.registerDecoder(DSPasswordAes128.class, NULL); + } + +} diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java similarity index 96% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java index 053c25ce..9868ba9b 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordAes256.java +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordAes256.java @@ -10,7 +10,10 @@ import org.iot.dsa.util.DSException; /** - * Stores an encrypted password which can be decrypted. + * Do not casually use this, it requires the JCE unlimited strength jurisdiction policy files + * wherever instances of this class are used. + *

+ * This stores an encrypted password which can then be decrypted. * * @author Aaron Hansen */ diff --git a/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java new file mode 100644 index 00000000..a1454897 --- /dev/null +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha1.java @@ -0,0 +1,204 @@ +package org.iot.dsa.security; + +import java.security.MessageDigest; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.iot.dsa.io.DSBase64; +import org.iot.dsa.node.DSElement; +import org.iot.dsa.node.DSIStorable; +import org.iot.dsa.node.DSRegistry; +import org.iot.dsa.node.DSString; +import org.iot.dsa.node.DSValue; +import org.iot.dsa.node.DSValueType; + +/** + * Stores and verifies passwords using a SHA-1 hash of the text (the clear text is not accessible). + * SHA-1 is not considered secure against well-funded opponents, but it doesn't require the JCE + * unlimited strength jurisdiction policy files. + * + * @author Aaron Hansen + */ +public class DSPasswordSha1 extends DSValue implements DSIPassword, DSIStorable { + + // Constants + // --------- + + public static final DSPasswordSha1 NULL = new DSPasswordSha1(DSString.NULL); + + private static MessageDigest digest; + + // Fields + // ------ + + private DSString value; + + // Constructors + // ------------ + + private DSPasswordSha1(DSString hashBase64) { + this.value = hashBase64; + } + + private DSPasswordSha1(String hashBase64) { + this(DSString.valueOf(hashBase64)); + } + + // Public Methods + // -------------- + + /** + * SHA-256 hash of the bytes encoded as url safe base 64.. + */ + public static String encode(byte[] arg) { + return DSBase64.encodeUrl(hash(arg)); + } + + /** + * SHA-256 hash of the UTF-8 bytes, encoded as url safe base 64.. + */ + public static String encode(String arg) { + return encode(arg.getBytes(DSString.UTF8)); + } + + @Override + public boolean equals(Object obj) { + if (obj instanceof DSPasswordAes256) { + return value.equals(obj.toString()); + } + return false; + } + + @Override + public DSValueType getValueType() { + return DSValueType.STRING; + } + + /** + * SHA-256 hash of the bytes. + */ + static byte[] hash(byte[] arg) { + byte[] hash = null; + synchronized (digest) { + hash = digest.digest(arg); + digest.reset(); + } + return hash; + } + + @Override + public int hashCode() { + return value.hashCode(); + } + + @Override + public boolean isEqual(Object obj) { + return equals(obj); + } + + @Override + public boolean isNull() { + return this == NULL; + } + + /** + * Hashes the string value of the given element and compares against the hash stored in this + * object. + * + * @param clearText If null, isNull, or is the empty string, this will on return true if this is + * the NULL instance. + */ + public boolean isValid(DSElement clearText) { + if (clearText == null) { + return isNull(); + } + if (clearText.isNull()) { + return isNull(); + } + return isValid(clearText.toString()); + } + + /** + * Hashes the given string and compares against the value stored in this object. + * + * @param clearText If null, or the empty string, this will on return true if this is the NULL + * instance. + */ + public boolean isValid(String clearText) { + if ((clearText == null) || clearText.isEmpty()) { + return isNull(); + } + return value.toString().equals(encode(clearText)); + } + + @Override + public DSString store() { + return toElement(); + } + + @Override + public DSPasswordSha1 restore(DSElement element) { + if (element.isNull()) { + return NULL; + } + return new DSPasswordSha1(element.toString()); + } + + /** + * Returns a string representing the url safe base64 encoding of the hash. + */ + @Override + public DSString toElement() { + return value; + } + + @Override + public String toString() { + return value.toString(); + } + + /** + * Creates a digest password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null, isNull() or the empty string. + */ + @Override + public DSPasswordSha1 valueOf(DSElement arg) { + if ((arg == null) || arg.isNull()) { + return NULL; + } + String s = arg.toString(); + if (s.isEmpty()) { + return NULL; + } + return valueOf(s); + } + + /** + * Creates a digest password for the given clear text. + * + * @param arg The text to hash. + * @return Returns the NULL instance if the arg is null or the empty string. + */ + public static DSPasswordSha1 valueOf(String arg) { + if (arg == null) { + return NULL; + } else if (arg.isEmpty()) { + return NULL; + } + return new DSPasswordSha1(encode(arg)); + } + + // Initialization + // -------------- + + static { + try { + digest = MessageDigest.getInstance("SHA-1"); + } catch (Exception x) { + Logger.getLogger("security").log(Level.SEVERE, "SHA-1 unknown", x); + } + DSRegistry.registerDecoder(DSPasswordSha1.class, NULL); + } + +} diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java similarity index 93% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java index 30200ebe..a10802c5 100644 --- a/dslink-core/src/main/java/org/iot/dsa/security/DSPasswordSha256.java +++ b/dslink-v2/src/main/java/org/iot/dsa/security/DSPasswordSha256.java @@ -7,7 +7,14 @@ import org.iot.dsa.node.*; /** - * Stores and verifies passwords using a SHA-256 hash of the text. + * Requires the JCE unlimited strength jurisdiction policy files wherever instances + * of this class are used. + *

+ * Stores and verifies passwords using a SHA-256 hash of the text (the clear text is not + * accessible). + *

+ * DSPasswordSha1 (SHA-1) is not considered secure against well-funded opponents, but it doesn't + * require the JCE unlimited strength jurisdiction policy files. * * @author Aaron Hansen */ diff --git a/dslink-core/src/main/java/org/iot/dsa/security/DSPermission.java b/dslink-v2/src/main/java/org/iot/dsa/security/DSPermission.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/security/DSPermission.java rename to dslink-v2/src/main/java/org/iot/dsa/security/DSPermission.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSDateTime.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSDateTime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSDateTime.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSDateTime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSInterval.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSInterval.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSInterval.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSInterval.java diff --git a/dslink-core/src/main/java/org/iot/dsa/time/DSTime.java b/dslink-v2/src/main/java/org/iot/dsa/time/DSTime.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/time/DSTime.java rename to dslink-v2/src/main/java/org/iot/dsa/time/DSTime.java diff --git a/dslink-core/src/main/java/org/iot/dsa/util/DSException.java b/dslink-v2/src/main/java/org/iot/dsa/util/DSException.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/util/DSException.java rename to dslink-v2/src/main/java/org/iot/dsa/util/DSException.java diff --git a/dslink-core/src/main/java/org/iot/dsa/util/DSUtil.java b/dslink-v2/src/main/java/org/iot/dsa/util/DSUtil.java similarity index 100% rename from dslink-core/src/main/java/org/iot/dsa/util/DSUtil.java rename to dslink-v2/src/main/java/org/iot/dsa/util/DSUtil.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSByteBufferTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSElementTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSElementTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSElementTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSElementTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSFlexEnumTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSJavaEnumTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSKeysTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSKeysTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSKeysTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSKeysTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSLinkConfigTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSPasswordTests.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSPathTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSPathTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSPathTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSPathTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSTimeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSTimeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSTimeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSTimeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/DSUtilTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/DSUtilTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/DSUtilTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/DSUtilTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/IntCacheTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/IntCacheTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/IntCacheTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/IntCacheTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/JsonTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/JsonTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/JsonTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/JsonTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/LoggingTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/LoggingTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/LoggingTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/LoggingTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/MetadataTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/MetadataTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/MetadataTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/MetadataTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/MsgpackTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/MsgpackTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/MsgpackTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/MsgpackTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/NodeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/NodeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/NodeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/NodeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/PerfTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/PerfTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/PerfTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/PerfTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterInvokeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/RequesterSubscribeTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/SerializationTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/SerializationTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/SerializationTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/SerializationTest.java diff --git a/dslink-core/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java b/dslink-v2/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java similarity index 100% rename from dslink-core/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java rename to dslink-v2/src/test/java/org/iot/dsa/dslink/V2HandshakeTest.java diff --git a/settings.gradle b/settings.gradle index f5525621..bf6db689 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,5 @@ rootProject.name = 'sdk-dslink-java-v2' -include 'dslink-core' -include 'dslink-java-v2-poc' -include 'dslink-websocket-standalone' +include 'dslink-v2' +include 'dslink-v2-poc' +include 'dslink-v2-websocket' From a1e1ea6fb1ff21bc443c6163677dcdff9bab8a8f Mon Sep 17 00:00:00 2001 From: Aaron Date: Thu, 5 Jul 2018 16:22:06 -0700 Subject: [PATCH 7/7] 0.28.0 --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index df55f675..c46f9148 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ the DSA architecture, please visit ## Sub Projects - - **/dslink-core** - The APIs used to build new links. - - **/dslink-java-v2-poc** - For proof of concept and testing. - - **/dslink-websocket-standalone** - Used by links that run in their own process, rather + - **/dslink-v2** - The APIs used to build new links. + - **/dslink-v2-poc** - For proof of concept and testing. + - **/dslink-v2-websocket** - Used by links that run in their own process, rather than in an environment which provides another websocket implementation. ## Link Development