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/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 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'