Basic Java CoAP subscriber to C Contiki nodes
This commit is contained in:
parent
0eef228ca2
commit
b781d22602
133
oracle/.gitignore
vendored
Normal file
133
oracle/.gitignore
vendored
Normal file
@ -0,0 +1,133 @@
|
||||
*.a
|
||||
*.bin
|
||||
*.co
|
||||
*.map
|
||||
*.png
|
||||
*.log
|
||||
*.elf
|
||||
*.zip
|
||||
*.d
|
||||
*.ihex
|
||||
*.pyc
|
||||
*.redbee-econotag
|
||||
*.econotag
|
||||
*.native
|
||||
*.z1
|
||||
*.minimal-net
|
||||
*.sky
|
||||
*.wismote
|
||||
*.esb
|
||||
*.avr-raven
|
||||
*.exp5438
|
||||
*.mbxxx
|
||||
*.win32
|
||||
*.apple2enh
|
||||
*.atarixl
|
||||
*.c128
|
||||
*.c64
|
||||
*.cc2538dk
|
||||
*.zoul
|
||||
*.jn516x
|
||||
*.srf06-cc26xx
|
||||
*.ev-aducrf101mkxz
|
||||
*.report
|
||||
summary
|
||||
*.summary
|
||||
*.runerr
|
||||
*.runlog
|
||||
*.faillog
|
||||
*.orig
|
||||
*~
|
||||
.DS_Store
|
||||
obj_*
|
||||
symbols.*
|
||||
Makefile.target
|
||||
doc/html
|
||||
doc/latex
|
||||
patches-*
|
||||
tools/tunslip
|
||||
tools/tunslip6
|
||||
build
|
||||
tools/coffee-manager/build/
|
||||
tools/cooja/dist/
|
||||
tools/collect-view/build/
|
||||
tools/collect-view/dist/
|
||||
COOJA.testlog
|
||||
tools/cooja/apps/mrm/lib/
|
||||
tools/cooja/apps/mspsim/lib/
|
||||
tools/cooja/apps/powertracker/lib/
|
||||
tools/cooja/apps/serial_socket/lib/
|
||||
tools/coffee-manager/coffee.jar
|
||||
tools/cooja/apps/avrora/lib/cooja_avrora.jar
|
||||
tools/cooja/apps/collect-view/cooja-collect-view.jar
|
||||
|
||||
# sdcc build artifacts
|
||||
contiki-cc2530dk.lib
|
||||
*.ihx
|
||||
*.hex
|
||||
*.mem
|
||||
*.lk
|
||||
*.omf
|
||||
*.cdb
|
||||
*.banks
|
||||
*.cc2530dk
|
||||
|
||||
# VC++ build artifacts
|
||||
*.exp
|
||||
*.ilk
|
||||
*.lib
|
||||
*.pdb
|
||||
*.prg
|
||||
*.dsc
|
||||
|
||||
#cc65 build artifacts
|
||||
*.s
|
||||
*.eth
|
||||
*.dsk
|
||||
*.po
|
||||
*.atr
|
||||
*.d64
|
||||
*.d71
|
||||
*.d81
|
||||
|
||||
# Cooja Build Artifacts
|
||||
*.cooja
|
||||
|
||||
#regression tests artifacts
|
||||
*.testlog
|
||||
*.log.prog
|
||||
regression-tests/[0-9][0-9]-*/report
|
||||
regression-tests/[0-9][0-9]-*/org/
|
||||
|
||||
# rl78 build artifacts
|
||||
*.eval-adf7xxxmb4z
|
||||
*.eval-adf7xxxmb4z.srec
|
||||
|
||||
# cscope files
|
||||
cscope.*
|
||||
|
||||
# vim swap files
|
||||
*.swp
|
||||
*.swo
|
||||
|
||||
# x86 UEFI files
|
||||
cpu/x86/uefi/Makefile.uefi
|
||||
cpu/x86/uefi/edk2
|
||||
|
||||
# galileo bsp files
|
||||
platform/galileo/bsp/libc/Makefile.libc
|
||||
platform/galileo/bsp/libc/i586-elf/
|
||||
platform/galileo/bsp/libc/newlib-2.2.0-1*
|
||||
platform/galileo/bsp/grub/src/
|
||||
platform/galileo/bsp/grub/bin/
|
||||
|
||||
# galileo build and debug artefacts
|
||||
*.galileo
|
||||
*.galileo.dll
|
||||
*.galileo.efi
|
||||
LOG_OPENOCD
|
||||
|
||||
# nRF52 build artifacts
|
||||
*.jlink
|
||||
*.nrf52dk
|
||||
|
11
oracle/.project
Normal file
11
oracle/.project
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>11.coap-observable</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
</natures>
|
||||
</projectDescription>
|
16
oracle/Makefile
Normal file
16
oracle/Makefile
Normal file
@ -0,0 +1,16 @@
|
||||
CONTIKI_PROJECT = main
|
||||
|
||||
SMALL=1
|
||||
|
||||
CFLAGS += -DUIP_CONF_IPV6=1 -DRPL_CONF_STATS=1 -DUIP_CONF_IPV6_RPL=1 -DUIP_CONF_TCP=0 -DPROJECT_CONF_H=\"project-conf.h\"
|
||||
CONTIKI = /home/giomba/workspace/uni/contiki
|
||||
WITH_UIP6=1
|
||||
UIP_CONF_IPV6=1
|
||||
UIP_CONF_IPV6_RPL=1
|
||||
|
||||
APPS += er-coap rest-engine
|
||||
|
||||
all: $(CONTIKI_PROJECT)
|
||||
|
||||
include $(CONTIKI)/Makefile.include
|
||||
|
63
oracle/main.c
Normal file
63
oracle/main.c
Normal file
@ -0,0 +1,63 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include "contiki.h"
|
||||
#include "contiki-net.h"
|
||||
#include "rest-engine.h"
|
||||
#include "net/ip/uip-debug.h"
|
||||
|
||||
int precious_resource = 0;
|
||||
|
||||
/* handlers for coap */
|
||||
void res_get_handler(void* request, void* response, uint8_t* buffer, uint16_t preferred_size, int32_t* offset) {
|
||||
static char payload[16];
|
||||
sprintf(payload, "pr = %d", precious_resource);
|
||||
|
||||
REST.set_header_content_type(response, REST.type.TEXT_PLAIN);
|
||||
REST.set_response_payload(response, payload, strlen(payload));
|
||||
}
|
||||
|
||||
void res_periodic_handler();
|
||||
|
||||
/* declare resource and set handlers */
|
||||
PERIODIC_RESOURCE(myresource, "title=\"An observable resource\";rt=\"some descriptive text\";obs", res_get_handler, NULL, NULL, NULL, 10 * CLOCK_SECOND, res_periodic_handler);
|
||||
|
||||
void res_periodic_handler() {
|
||||
/* sample some sensor */
|
||||
/* byte mysample = *(some_bar + some_offset); */
|
||||
++precious_resource;
|
||||
|
||||
/* Notify subscribers of the new sample */
|
||||
REST.notify_subscribers(&myresource);
|
||||
}
|
||||
|
||||
/* contiki protothread, as usual... */
|
||||
PROCESS(main_process_name, "Simple-CoAP-Server");
|
||||
|
||||
AUTOSTART_PROCESSES(&main_process_name);
|
||||
|
||||
PROCESS_THREAD(main_process_name, ev, data) {
|
||||
PROCESS_BEGIN();
|
||||
|
||||
printf("Started....\n");
|
||||
/* print enabled addresses */
|
||||
printf("My addresses:\n");
|
||||
int i;
|
||||
for (i = 0; i < UIP_DS6_ADDR_NB; ++i) {
|
||||
if (uip_ds6_if.addr_list[i].isused) {
|
||||
uip_debug_ipaddr_print(&uip_ds6_if.addr_list[i].ipaddr);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* enable CoAP engine */
|
||||
rest_init_engine();
|
||||
rest_activate_resource(&myresource, "test/myresource");
|
||||
|
||||
while (1) {
|
||||
PROCESS_WAIT_EVENT();
|
||||
}
|
||||
|
||||
PROCESS_END();
|
||||
|
||||
}
|
||||
|
16
oracle/project-conf.h
Normal file
16
oracle/project-conf.h
Normal file
@ -0,0 +1,16 @@
|
||||
/* reduce RAM consumption */
|
||||
|
||||
#ifndef PROJECT_CONF_H_
|
||||
#define PROJECT_CONF_H_
|
||||
#undef REST_MAX_CHUNK_SIZE // Set the max response payload before fragmentation
|
||||
#define REST_MAX_CHUNK_SIZE 64
|
||||
#undef COAP_MAX_OPEN_TRANSACTIONS // Set the max number of concurrent transactions
|
||||
#define COAP_MAX_OPEN_TRANSACTIONS 4
|
||||
#undef NBR_TABLE_CONF_MAX_NEIGHBORS // Set the max number of entries in neighbors table
|
||||
#define NBR_TABLE_CONF_MAX_NEIGHBORS 10
|
||||
#undef UIP_CONF_MAX_ROUTES // Set the max number of routes handled by the node
|
||||
#define UIP_CONF_MAX_ROUTES 10
|
||||
#undef UIP_CONF_BUFFER_SIZE // Set the amount of memory reserved to the uIP packet buffer
|
||||
#define UIP_CONF_BUFFER_SIZE 280
|
||||
#endif
|
||||
|
20
proxy/.classpath
Normal file
20
proxy/.classpath
Normal file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<classpath>
|
||||
<classpathentry kind="src" output="target/classes" path="src">
|
||||
<attributes>
|
||||
<attribute name="optional" value="true"/>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
|
||||
<attributes>
|
||||
<attribute name="maven.pomderived" value="true"/>
|
||||
</attributes>
|
||||
</classpathentry>
|
||||
<classpathentry kind="output" path="target/classes"/>
|
||||
</classpath>
|
2
proxy/.gitignore
vendored
Normal file
2
proxy/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/bin/
|
||||
/target/
|
23
proxy/.project
Normal file
23
proxy/.project
Normal file
@ -0,0 +1,23 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>proxy</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
<buildCommand>
|
||||
<name>org.eclipse.m2e.core.maven2Builder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
||||
<nature>org.eclipse.m2e.core.maven2Nature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
8
proxy/.settings/org.eclipse.jdt.core.prefs
Normal file
8
proxy/.settings/org.eclipse.jdt.core.prefs
Normal file
@ -0,0 +1,8 @@
|
||||
eclipse.preferences.version=1
|
||||
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
|
||||
org.eclipse.jdt.core.compiler.compliance=1.8
|
||||
org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
|
||||
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
|
||||
org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore
|
||||
org.eclipse.jdt.core.compiler.release=disabled
|
||||
org.eclipse.jdt.core.compiler.source=1.8
|
59
proxy/Californium.properties
Normal file
59
proxy/Californium.properties
Normal file
@ -0,0 +1,59 @@
|
||||
#Californium CoAP Properties file
|
||||
#Thu Nov 07 17:22:31 CET 2019
|
||||
HEALTH_STATUS_INTERVAL=0
|
||||
ACK_TIMEOUT=2000
|
||||
UDP_CONNECTOR_SEND_BUFFER=0
|
||||
ACK_TIMEOUT_SCALE=2.0
|
||||
HTTP_SERVER_SOCKET_TIMEOUT=100000
|
||||
USE_RANDOM_MID_START=true
|
||||
BLOCKWISE_STRICT_BLOCK2_OPTION=false
|
||||
MAX_ACTIVE_PEERS=150000
|
||||
PROTOCOL_STAGE_THREAD_COUNT=8
|
||||
BLOCKWISE_STATUS_LIFETIME=300000
|
||||
MAX_RESOURCE_BODY_SIZE=8192
|
||||
HTTP_CACHE_SIZE=32
|
||||
UDP_CONNECTOR_DATAGRAM_SIZE=2048
|
||||
UDP_CONNECTOR_RECEIVE_BUFFER=0
|
||||
DTLS_CONNECTION_ID_NODE_ID=
|
||||
MAX_TRANSMIT_WAIT=93000
|
||||
NOTIFICATION_REREGISTRATION_BACKOFF=2000
|
||||
DEDUPLICATOR=DEDUPLICATOR_MARK_AND_SWEEP
|
||||
COAP_PORT=5683
|
||||
MID_TACKER=GROUPED
|
||||
COAP_SECURE_PORT=5684
|
||||
NETWORK_STAGE_RECEIVER_THREAD_COUNT=1
|
||||
HTTP_CACHE_RESPONSE_MAX_AGE=86400
|
||||
MULTICAST_BASE_MID=65000
|
||||
HTTP_SERVER_SOCKET_BUFFER_SIZE=8192
|
||||
EXCHANGE_LIFETIME=247000
|
||||
TLS_HANDSHAKE_TIMEOUT=10000
|
||||
DEDUPLICATOR_AUTO_REPLACE=true
|
||||
TCP_CONNECTION_IDLE_TIMEOUT=10
|
||||
LEISURE=5000
|
||||
HTTP_PORT=8080
|
||||
DTLS_CONNECTION_ID_LENGTH=
|
||||
NOTIFICATION_CHECK_INTERVAL=86400000
|
||||
CONGESTION_CONTROL_ALGORITHM=Cocoa
|
||||
RESPONSE_MATCHING=STRICT
|
||||
MID_TRACKER_GROUPS=16
|
||||
TOKEN_SIZE_LIMIT=8
|
||||
NETWORK_STAGE_SENDER_THREAD_COUNT=1
|
||||
TCP_WORKER_THREADS=1
|
||||
SECURE_SESSION_TIMEOUT=86400
|
||||
TCP_CONNECT_TIMEOUT=10000
|
||||
MAX_RETRANSMIT=4
|
||||
MAX_MESSAGE_SIZE=1024
|
||||
ACK_RANDOM_FACTOR=1.5
|
||||
NSTART=1
|
||||
MAX_LATENCY=100000
|
||||
PROBING_RATE=1.0
|
||||
USE_CONGESTION_CONTROL=false
|
||||
MAX_SERVER_RESPONSE_DELAY=250000
|
||||
CROP_ROTATION_PERIOD=247000
|
||||
MAX_PEER_INACTIVITY_PERIOD=600
|
||||
UDP_CONNECTOR_OUT_CAPACITY=2147483647
|
||||
DTLS_AUTO_RESUME_TIMEOUT=30000
|
||||
PREFERRED_BLOCK_SIZE=512
|
||||
NON_LIFETIME=145000
|
||||
NOTIFICATION_CHECK_INTERVAL_COUNT=100
|
||||
MARK_AND_SWEEP_INTERVAL=10000
|
74
proxy/pom.xml
Normal file
74
proxy/pom.xml
Normal file
@ -0,0 +1,74 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>it.unipi.ing.ce.netpp</groupId>
|
||||
<artifactId>proxy</artifactId>
|
||||
<version>2019.11.0</version>
|
||||
|
||||
<dependencies>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.eclipse.californium</groupId>
|
||||
<artifactId>californium-core</artifactId>
|
||||
<version>2.0.0-M18</version>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-eclipse-plugin</artifactId>
|
||||
<version>2.9</version>
|
||||
<configuration>
|
||||
<downloadSources>true</downloadSources>
|
||||
<downloadJavadocs>false</downloadJavadocs>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Set a compiler level -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.8.0</version>
|
||||
<configuration>
|
||||
<source>1.8</source>
|
||||
<target>1.8</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
<!-- Maven Assembly Plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-assembly-plugin</artifactId>
|
||||
<version>2.4.1</version>
|
||||
<configuration>
|
||||
<!-- get all project dependencies -->
|
||||
<descriptorRefs>
|
||||
<descriptorRef>jar-with-dependencies</descriptorRef>
|
||||
</descriptorRefs>
|
||||
<!-- MainClass in mainfest make a executable jar -->
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>netpp.Main</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>make-assembly</id>
|
||||
<!-- bind to the packaging phase -->
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>single</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
</project>
|
||||
|
26
proxy/src/netpp/Handler.java
Normal file
26
proxy/src/netpp/Handler.java
Normal file
@ -0,0 +1,26 @@
|
||||
package netpp;
|
||||
|
||||
import java.net.URI;
|
||||
import org.eclipse.californium.core.*;
|
||||
|
||||
public class Handler implements CoapHandler {
|
||||
|
||||
private URI uri;
|
||||
|
||||
public Handler(URI uri) {
|
||||
this.uri = uri;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onLoad(CoapResponse response) {
|
||||
String content = response.getResponseText();
|
||||
System.out.println("[D] resource: " + uri);
|
||||
System.out.println(" new value: " + content);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError() {
|
||||
System.err.println("[E] failed " + uri);
|
||||
}
|
||||
|
||||
}
|
40
proxy/src/netpp/Main.java
Normal file
40
proxy/src/netpp/Main.java
Normal file
@ -0,0 +1,40 @@
|
||||
package netpp;
|
||||
|
||||
public class Main {
|
||||
public final static String COOJA_MAGIC = "c30c";
|
||||
public final static String resource = "/test/myresource";
|
||||
|
||||
public static void main(String[] args) {
|
||||
if (args.length < 2) {
|
||||
System.err.println("[F] Bad parameters");
|
||||
System.err.println("Usage: ");
|
||||
System.err.println("$ exe <prefix> <n>");
|
||||
System.err.println(" prefix IPv6 /64 prefix (mind the format!)");
|
||||
System.err.println(" n number of nodes");
|
||||
System.err.println();
|
||||
System.err.println("Example:");
|
||||
System.err.println("$ exe 2001:db8:0:0 10");
|
||||
System.exit(1);
|
||||
}
|
||||
|
||||
final String prefix = args[0];
|
||||
final int n = Integer.parseInt(args[1]);
|
||||
System.err.println("[I] now subscribing to node [2; " + n + "] in " + prefix + "/64");
|
||||
|
||||
// TODO pay attention to this for-cycle and mind the hexadecimal values!
|
||||
/* subscribe to every node */
|
||||
for (int i = 2; i <= n; i++) { // node 1 is the gateway, skip. And mind the <=
|
||||
String uri_string = "coap://[" + prefix + ":" + COOJA_MAGIC + "::" + Integer.toString(i) + "]" + resource;
|
||||
System.err.println("[I] subscribing to " + uri_string);
|
||||
Node node = new Node(uri_string);
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
Thread.sleep(5 * 60 * 1000); // 5 min
|
||||
} catch (InterruptedException ex) {
|
||||
System.err.println(ex);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
31
proxy/src/netpp/Node.java
Normal file
31
proxy/src/netpp/Node.java
Normal file
@ -0,0 +1,31 @@
|
||||
package netpp;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
|
||||
import org.eclipse.californium.core.*;
|
||||
|
||||
public class Node {
|
||||
private URI uri;
|
||||
private CoapClient client;
|
||||
private CoapObserveRelation relation;
|
||||
|
||||
public Node(String uriString) {
|
||||
try {
|
||||
this.uri = new URI(uriString);
|
||||
this.client = new CoapClient(uri);
|
||||
this.relation = client.observe(new Handler(this.uri));
|
||||
|
||||
} catch (URISyntaxException e) {
|
||||
System.err.println("[F] Invalid URI: " + e.getMessage());
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/* be kind with the poor resource constrained node */
|
||||
@Override
|
||||
public void finalize() {
|
||||
this.relation.proactiveCancel();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user