1use bytes::Bytes;
4use serde::{Deserialize, Serialize};
5use std::time::{Duration, SystemTime};
6
7use super::{AgentId, MessageId, RequestId};
8
9#[derive(Debug, Clone, Serialize, Deserialize)]
11pub struct SecureMessage {
12 pub id: MessageId,
13 pub sender: AgentId,
14 pub recipient: Option<AgentId>, pub topic: Option<String>, pub payload: EncryptedPayload,
17 pub signature: MessageSignature,
18 pub timestamp: SystemTime,
19 pub ttl: Duration,
20 pub message_type: MessageType,
21}
22
23#[derive(Debug, Clone, Serialize, Deserialize)]
25pub enum MessageType {
26 Direct(AgentId),
27 Publish(String),
28 Subscribe(String),
29 Broadcast,
30 Request(RequestId),
31 Response(RequestId),
32}
33
34#[derive(Debug, Clone, Serialize, Deserialize)]
36pub struct EncryptedPayload {
37 pub data: Bytes,
38 pub encryption_algorithm: EncryptionAlgorithm,
39 pub nonce: Vec<u8>,
40}
41
42#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
44pub enum EncryptionAlgorithm {
45 #[default]
46 Aes256Gcm,
47 ChaCha20Poly1305,
48 None, }
50
51#[derive(Debug, Clone, Serialize, Deserialize)]
53pub struct MessageSignature {
54 pub signature: Vec<u8>,
55 pub algorithm: SignatureAlgorithm,
56 pub public_key: Vec<u8>,
57}
58
59#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
61pub enum SignatureAlgorithm {
62 #[default]
63 Ed25519,
64 EcdsaP256,
65 None, }
67
68#[derive(Debug, Clone)]
70pub struct ChannelHandle {
71 pub id: String,
72 pub agent_id: AgentId,
73 pub channel_type: ChannelType,
74 pub created_at: SystemTime,
75}
76
77#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
79pub enum ChannelType {
80 Direct,
81 Broadcast,
82 Topic(String),
83}
84
85#[derive(Debug, Clone)]
87pub struct RouteEntry {
88 pub destination: AgentId,
89 pub channel: ChannelHandle,
90 pub last_used: SystemTime,
91 pub message_count: u64,
92}
93
94#[derive(Debug, Clone)]
96pub struct DeadLetterQueue {
97 pub messages: Vec<DeadLetterMessage>,
98 pub max_size: usize,
99}
100
101impl DeadLetterQueue {
102 pub fn new(max_size: usize) -> Self {
103 Self {
104 messages: Vec::new(),
105 max_size,
106 }
107 }
108
109 pub fn add_message(&mut self, message: SecureMessage, reason: DeadLetterReason) {
110 if self.messages.len() >= self.max_size {
111 self.messages.remove(0); }
113
114 self.messages.push(DeadLetterMessage {
115 original_message: message,
116 reason,
117 timestamp: SystemTime::now(),
118 });
119 }
120}
121
122#[derive(Debug, Clone)]
124pub struct DeadLetterMessage {
125 pub original_message: SecureMessage,
126 pub reason: DeadLetterReason,
127 pub timestamp: SystemTime,
128}
129
130#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
132pub enum DeadLetterReason {
133 RecipientNotFound,
134 RecipientUnavailable,
135 MessageExpired,
136 PolicyViolation(String),
137 EncryptionFailure,
138 SignatureVerificationFailure,
139 MessageTooLarge,
140 RateLimitExceeded,
141 QueueFull,
142 AgentNotFound,
143 Expired,
144}
145
146#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, Default)]
148pub enum DeliveryGuarantee {
149 AtMostOnce,
151 #[default]
153 AtLeastOnce,
154 ExactlyOnce,
156}
157
158#[derive(Debug, Clone, Serialize, Deserialize)]
160pub struct RateLimitConfig {
161 pub messages_per_second: u32,
162 pub burst_size: u32,
163 pub window_duration: Duration,
164}
165
166impl Default for RateLimitConfig {
167 fn default() -> Self {
168 Self {
169 messages_per_second: 100,
170 burst_size: 200,
171 window_duration: Duration::from_secs(60),
172 }
173 }
174}
175
176#[derive(Debug, Clone, Serialize, Deserialize)]
178pub struct MessageSecurity {
179 pub encryption_enabled: bool,
180 pub signature_required: bool,
181 pub key_rotation_interval: Duration,
182 pub max_message_size: usize,
183 pub rate_limiting: RateLimitConfig,
184}
185
186impl Default for MessageSecurity {
187 fn default() -> Self {
188 Self {
189 encryption_enabled: true,
190 signature_required: true,
191 key_rotation_interval: Duration::from_secs(86400), max_message_size: 1024 * 1024, rate_limiting: RateLimitConfig::default(),
194 }
195 }
196}
197
198#[derive(Debug, Clone, Serialize, Deserialize)]
200pub struct CommunicationConfig {
201 pub max_concurrent_connections: usize,
202 pub message_buffer_size: usize,
203 pub connection_timeout: Duration,
204 pub message_timeout: Duration,
205 pub security: MessageSecurity,
206 pub dead_letter_queue_size: usize,
207}
208
209impl Default for CommunicationConfig {
210 fn default() -> Self {
211 Self {
212 max_concurrent_connections: 10000,
213 message_buffer_size: 1000,
214 connection_timeout: Duration::from_secs(30),
215 message_timeout: Duration::from_secs(60),
216 security: MessageSecurity::default(),
217 dead_letter_queue_size: 1000,
218 }
219 }
220}
221
222#[derive(Debug, Clone, Default)]
224pub struct CommunicationChannels {
225 pub direct_channel: Option<ChannelHandle>,
226 pub broadcast_channel: Option<ChannelHandle>,
227 pub subscribed_topics: Vec<String>,
228}