bacnet-server 0.15.0

BACnet server: APDU dispatch and service handlers
Documentation
//! Service handlers for incoming BACnet requests.
//!
//! Each handler function processes a decoded service request against an
//! ObjectDatabase and returns the encoded response bytes.

use std::collections::HashSet;
use std::time::Duration;

use bacnet_encoding::npdu::NpduAddress;
use bacnet_encoding::primitives::encode_property_value;
use bacnet_objects::database::ObjectDatabase;
use bacnet_services::alarm_event::{
    AcknowledgeAlarmRequest, EventSummary, GetEventInformationAck, GetEventInformationRequest,
};
use bacnet_services::cov::SubscribeCOVRequest;
use bacnet_services::device_mgmt::{DeviceCommunicationControlRequest, ReinitializeDeviceRequest};
use bacnet_services::object_mgmt::{CreateObjectRequest, DeleteObjectRequest, ObjectSpecifier};
use bacnet_services::read_property::{ReadPropertyACK, ReadPropertyRequest};
use bacnet_services::rpm::{
    ReadAccessResult, ReadPropertyMultipleACK, ReadPropertyMultipleRequest, ReadResultElement,
};
use bacnet_services::who_has::{IHaveRequest, WhoHasObject, WhoHasRequest};
use bacnet_services::wpm::{WritePropertyMultipleCursor, WritePropertyMultipleEvent};
use bacnet_services::write_property::WritePropertyRequest;
use bacnet_types::MacAddr;
use bacnet_types::constructed::BACnetObjectPropertyReference;
use bacnet_types::enums::{
    EnableDisable, ErrorClass, ErrorCode, EventState, EventType, ObjectType, PropertyIdentifier,
    RejectReason,
};
use bacnet_types::error::{Error, ErrorDetail, RemoteError};
use bacnet_types::primitives::{BACnetTimeStamp, ObjectIdentifier, PropertyValue};

use bytes::BytesMut;

use crate::cov::active::LiveCovSelection;
use crate::cov::{
    CovNotificationKind, CovSubscription, CovSubscriptionKey, CovSubscriptionSnapshot,
    CovSubscriptionTable, MultipleContextKey, SubscriberEndpoint,
};
use crate::device_view::DeviceReadContext;

mod alarm_event;
mod audit_log_query;
mod audit_notification;
mod cov;
pub(crate) mod device_mgmt;
mod file;
mod group_present_value;
mod list;
mod object_mgmt;
mod read_budget;
pub(crate) use read_budget::ReadFailure;
mod read_property;
mod read_range;
mod rpm_budget;
pub(crate) use rpm_budget::RpmPlan;
pub(crate) mod relinquish;
mod write_property;

pub use alarm_event::*;
pub use audit_log_query::*;
pub use audit_notification::*;
pub use cov::*;
pub use device_mgmt::*;
pub use file::*;
pub use list::*;
pub use object_mgmt::*;
pub use read_property::*;
pub use read_range::*;
pub use write_property::*;

#[cfg(test)]
mod tests;