1 unstable release
0.1.0 | Mar 19, 2024 |
---|
#14 in #der
135KB
2.5K
SLoC
SEP2 Client Library
sep2_client
is a (WIP) Rust library for developing IEEE 2030.5 compliant clients on Linux[^1] based operating systems.
It relies on, and should be used alongside, the sep2_common
crate, and it's implementation of the IEEE 2030.5 XSD.
This crate uses async rust, and currently only supports the tokio
runtime.
Contents
sep2_client
- Implementation of an IEEE 2030.5 Client Library, including documentation & examples
sep2_test_server
- Dumb IEEE 2030.5 Server for testing
docs
- Thesis Project Reports & Seminars
Progress
Core Features
- Application Support Function Set (TCP, HTTP)
- Security Function Set (TLS + Certificate Verification, HTTPS)
- IEEE 2030.5 Base Client Capabilities (GET, POST, PUT, DELETE)
- Asynchronous Resource Polling
- Notification / Subscription Client Server Mechanism
- Global Time Offset (Server Time Sync)
- Event Scheduler
- DER
- DRLC
- Messaging
- Pricing
- Per-Schedule Time Offset
- Tests / Documentation
- IEEE 2030.5 Examples as System Tests
- Event Scheduler Tests
- Subscription/Notification Tests
- DER Non-Aggregate Client Sample Impl.
- Australian CSIP Extensions
Future
Examples
A client that synchronises it's time with the server:
use sep2_client::{client::Client, time::update_time_offset};
use sep2_common::packages::{dcap::DeviceCapability, time::Time};
#[tokio::main]
async fn main() {
// Create a HTTPS client for a specific server
let client = Client::new_https(
"https://127.0.0.1:1337",
"client_cert.pem",
"client_private_key.pem",
"serca.pem",
// No KeepAlive
None,
// Default Poll Tick Rate (10 minutes)
None,
)
.expect("Couldn't create client");
let dcap = client
.get::<DeviceCapability>("/dcap")
.await
.expect("Couldn't retrieve dcap");
let time_link = &dcap.time_link.unwrap();
let time = client.get::<Time>(&time_link.href).await.unwrap();
// Sync client time
update_time_offset(time);
}
More comprehensive examples can be found in the sep2_client/examples
directory.
Cargo Features
Features can be enabled or disabled through your crate's Cargo.toml
[dependencies.sep2_client]
features = ["der","pubsub"]
Full list of features
default
: All mandatory IEEE 2030.5 Client function sets. Application Support, Security & Time.event
: A Generic Event Schedule interfaceder
: A Scheduler for DER Function Set Eventspricing
: A Scheduler for Pricing Function Set Eventsmessaging
: A Scheduler for Messaging Function Set Eventsdrlc
: A Scheduler for DRLC Function Set Eventspubsub
: A lightweight server for the Subscription / Notification function set.csip_aus
: CSIP-AUS Extensionsall
: All of the above
Dependencies
Due to the security requirements of IEEE 2030.5, this library only supports TLS using OpenSSL.
To use this library you will require a local installation of OpenSSL with support for ECDHE-ECDSA-AES128-CCM8
.
[^1]: The library happens to performs as expected on macOS. If you would like to test the client locally on macOS, ensure openssl
does not refer to libressl
, as is the case by default.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~12–21MB
~304K SLoC