lib.rs 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. mod capabilities;
  2. mod gnome;
  3. mod gnome_to_manager;
  4. mod internal;
  5. mod key_registry;
  6. mod manager_to_gnome;
  7. mod policy;
  8. mod requirement;
  9. use crate::gnome::Gnome;
  10. pub use crate::gnome::GnomeId;
  11. mod message;
  12. mod multicast;
  13. mod swarm;
  14. pub use crate::capabilities::CapabiliTree;
  15. pub use crate::capabilities::Capabilities;
  16. pub use crate::gnome::Nat;
  17. pub use crate::gnome::NetworkSettings;
  18. pub use crate::gnome::PortAllocationRule;
  19. pub use crate::key_registry::KeyRegistry;
  20. pub use crate::neighbor::SwarmSyncRequestParams;
  21. pub use crate::neighbor::SwarmSyncResponse;
  22. pub use crate::policy::Policy;
  23. pub use crate::requirement::Requirement;
  24. pub use crate::swarm::Swarm;
  25. pub use crate::swarm::SwarmID;
  26. pub use crate::swarm::SwarmName;
  27. pub use crate::swarm::SwarmTime;
  28. pub use crate::swarm::SwarmType;
  29. pub use data::CastData;
  30. pub use data::SyncData;
  31. pub use gnome_to_manager::GnomeToManager;
  32. pub use manager_to_gnome::ManagerToGnome;
  33. pub use message::BlockID;
  34. pub use message::Configuration;
  35. pub use message::{Header, Message, Payload, Signature, WrappedMessage};
  36. pub use neighbor::NeighborRequest;
  37. use std::net::IpAddr;
  38. mod neighbor;
  39. pub use crate::neighbor::Neighbor;
  40. pub use crate::neighbor::NeighborResponse;
  41. pub use crate::neighbor::Neighborhood;
  42. pub use multicast::CastContent;
  43. pub use multicast::CastMessage;
  44. pub use multicast::CastType;
  45. mod data;
  46. mod next_state;
  47. use crate::next_state::NextState;
  48. use std::fmt;
  49. use std::sync::mpsc::Receiver;
  50. use std::sync::mpsc::Sender;
  51. #[cfg(test)]
  52. mod tests;
  53. // TODO: Also update turn_number after committing proposal to
  54. // proposal_time + 2 * swarm_diameter
  55. const DEFAULT_NEIGHBORS_PER_GNOME: usize = 3;
  56. const DEFAULT_SWARM_DIAMETER: SwarmTime = SwarmTime(7);
  57. #[derive(Debug)]
  58. pub enum ToGnome {
  59. SetFounder(GnomeId),
  60. AddData(SyncData),
  61. AddNeighbor(Neighbor),
  62. DropNeighbor(GnomeId),
  63. ListNeighbors,
  64. AskData(GnomeId, NeighborRequest),
  65. SendData(GnomeId, NeighborResponse),
  66. Disconnect,
  67. Status,
  68. StartUnicast(GnomeId),
  69. StartMulticast(Vec<GnomeId>),
  70. StartBroadcast,
  71. EndBroadcast(CastID),
  72. UnsubscribeBroadcast(CastID),
  73. NetworkSettingsUpdate(bool, IpAddr, u16, Nat, (PortAllocationRule, i8)),
  74. SwarmNeighbors(SwarmName),
  75. Reconfigure(u8, SyncData),
  76. }
  77. #[derive(Debug, Clone, Copy, PartialEq, PartialOrd, Ord, Eq, Hash)]
  78. pub struct CastID(pub u8);
  79. pub enum GnomeToApp {
  80. SwarmReady(SwarmName),
  81. Block(BlockID, SyncData),
  82. DataInquiry(GnomeId, NeighborRequest),
  83. Listing(Vec<BlockID>),
  84. UnicastOrigin(SwarmID, CastID, Sender<CastData>),
  85. Unicast(SwarmID, CastID, Receiver<CastData>),
  86. MulticastOrigin(SwarmID, CastID, Sender<SyncData>),
  87. Multicast(SwarmID, CastID, Receiver<CastData>),
  88. BroadcastOrigin(SwarmID, CastID, Sender<CastData>, Receiver<CastData>),
  89. Broadcast(SwarmID, CastID, Receiver<CastData>),
  90. Neighbors(SwarmID, Vec<GnomeId>),
  91. NewNeighbor(SwarmName, Neighbor),
  92. ToGnome(NeighborResponse),
  93. BCastData(CastID, CastData),
  94. Custom(bool, u8, GnomeId, CastData),
  95. Reconfig(u8, SyncData),
  96. }
  97. impl fmt::Debug for GnomeToApp {
  98. fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
  99. match self {
  100. GnomeToApp::SwarmReady(s_name) => {
  101. write!(f, "{} Ready", s_name)
  102. }
  103. GnomeToApp::Block(prop_id, data) => {
  104. write!(f, "{:?} {}", prop_id, data)
  105. }
  106. GnomeToApp::BCastData(c_id, c_data) => {
  107. write!(f, "BCastData {} (len: {})", c_id.0, c_data.len())
  108. }
  109. GnomeToApp::DataInquiry(gnome_id, data_id) => {
  110. write!(f, "DataInquiry for {:?}: PropID-{:?}", gnome_id, data_id)
  111. }
  112. GnomeToApp::Listing(data) => {
  113. write!(f, "Listing with {:?} entries", data.len())
  114. }
  115. GnomeToApp::Unicast(_sid, _cid, _rdata) => {
  116. write!(f, "Unicast {:?}", _cid)
  117. }
  118. GnomeToApp::UnicastOrigin(_sid, _cid, _sdata) => {
  119. write!(f, "Unicast source {:?}", _cid)
  120. }
  121. GnomeToApp::Multicast(_sid, _cid, _rdata) => {
  122. write!(f, "Multicast {:?}", _cid)
  123. }
  124. GnomeToApp::MulticastOrigin(_sid, _cid, _sdata) => {
  125. write!(f, "Multicast source {:?}", _cid)
  126. }
  127. GnomeToApp::Neighbors(_sid, _nid) => {
  128. write!(f, "Neighbors: {:?}", _nid)
  129. }
  130. GnomeToApp::NewNeighbor(sname, n) => {
  131. write!(f, "{} has a new neighbor: {:?}", sname, n.id)
  132. }
  133. GnomeToApp::Broadcast(_sid, _cid, _rdata) => {
  134. write!(f, "Broadcast {:?}", _cid)
  135. }
  136. GnomeToApp::BroadcastOrigin(_sid, _cid, _sdata, _rdata) => {
  137. write!(f, "Broadcast source {:?}", _cid)
  138. }
  139. GnomeToApp::ToGnome(neighbor_response) => {
  140. write!(f, "ToGnome: {:?}", neighbor_response)
  141. }
  142. GnomeToApp::Custom(is_request, id, gnome_id, _sdata) => {
  143. if *is_request {
  144. write!(f, "Custom request {} from {}", id, gnome_id)
  145. } else {
  146. write!(f, "Custom response {} from {}", id, gnome_id)
  147. }
  148. }
  149. GnomeToApp::Reconfig(id, _s_data) => {
  150. write!(f, "Reconfig: {}", id)
  151. }
  152. }
  153. }
  154. }
  155. pub enum Notification {
  156. AddSwarm(NotificationBundle),
  157. SetFounder(GnomeId),
  158. }
  159. pub struct NotificationBundle {
  160. pub swarm_name: SwarmName,
  161. pub request_sender: Sender<ToGnome>,
  162. pub token_sender: Sender<u64>,
  163. pub network_settings_receiver: Receiver<NetworkSettings>,
  164. }