@@ -147,6 +147,10 @@ pub enum KademliaStoreInserts {
147147 /// Whenever a (provider) record is received,
148148 /// the record is forwarded immediately to the [`RecordStore`].
149149 Unfiltered ,
150+ /// Whenever a (provider) record is received, an event is emitted.
151+ /// Provider records generate a [`InboundRequest::AddProvider`] under [`KademliaEvent::InboundRequest`],
152+ /// normal records generate a [`InboundRequest::PutRecord`] under [`KademliaEvent::InboundRequest`].
153+ ///
150154 /// When deemed valid, a (provider) record needs to be explicitly stored in
151155 /// the [`RecordStore`] via [`RecordStore::put`] or [`RecordStore::add_provider`],
152156 /// whichever is applicable. A mutable reference to the [`RecordStore`] can
@@ -1621,11 +1625,23 @@ where
16211625 // is a waste of resources.
16221626 match self . record_filtering {
16231627 KademliaStoreInserts :: Unfiltered => match self . store . put ( record. clone ( ) ) {
1624- Ok ( ( ) ) => debug ! (
1625- "Record stored: {:?}; {} bytes" ,
1626- record. key,
1627- record. value. len( )
1628- ) ,
1628+ Ok ( ( ) ) => {
1629+ debug ! (
1630+ "Record stored: {:?}; {} bytes" ,
1631+ record. key,
1632+ record. value. len( )
1633+ ) ;
1634+ self . queued_events
1635+ . push_back ( NetworkBehaviourAction :: GenerateEvent (
1636+ KademliaEvent :: InboundRequest {
1637+ request : InboundRequest :: PutRecord {
1638+ source,
1639+ connection,
1640+ record : None ,
1641+ } ,
1642+ } ,
1643+ ) ) ;
1644+ }
16291645 Err ( e) => {
16301646 info ! ( "Record not stored: {:?}" , e) ;
16311647 self . queued_events
@@ -1634,22 +1650,23 @@ where
16341650 handler : NotifyHandler :: One ( connection) ,
16351651 event : KademliaHandlerIn :: Reset ( request_id) ,
16361652 } ) ;
1653+
16371654 return ;
16381655 }
16391656 } ,
1640- KademliaStoreInserts :: FilterBoth => { }
1657+ KademliaStoreInserts :: FilterBoth => {
1658+ self . queued_events
1659+ . push_back ( NetworkBehaviourAction :: GenerateEvent (
1660+ KademliaEvent :: InboundRequest {
1661+ request : InboundRequest :: PutRecord {
1662+ source,
1663+ connection,
1664+ record : Some ( record. clone ( ) ) ,
1665+ } ,
1666+ } ,
1667+ ) ) ;
1668+ }
16411669 }
1642-
1643- self . queued_events
1644- . push_back ( NetworkBehaviourAction :: GenerateEvent (
1645- KademliaEvent :: InboundRequest {
1646- request : InboundRequest :: PutRecord {
1647- source,
1648- connection,
1649- record : record. clone ( ) ,
1650- } ,
1651- } ,
1652- ) ) ;
16531670 }
16541671
16551672 // The remote receives a [`KademliaHandlerIn::PutRecordRes`] even in the
@@ -1686,16 +1703,25 @@ where
16861703 info ! ( "Provider record not stored: {:?}" , e) ;
16871704 return ;
16881705 }
1706+
1707+ self . queued_events
1708+ . push_back ( NetworkBehaviourAction :: GenerateEvent (
1709+ KademliaEvent :: InboundRequest {
1710+ request : InboundRequest :: AddProvider { record : None } ,
1711+ } ,
1712+ ) ) ;
1713+ }
1714+ KademliaStoreInserts :: FilterBoth => {
1715+ self . queued_events
1716+ . push_back ( NetworkBehaviourAction :: GenerateEvent (
1717+ KademliaEvent :: InboundRequest {
1718+ request : InboundRequest :: AddProvider {
1719+ record : Some ( record) ,
1720+ } ,
1721+ } ,
1722+ ) ) ;
16891723 }
1690- KademliaStoreInserts :: FilterBoth => { }
16911724 }
1692-
1693- self . queued_events
1694- . push_back ( NetworkBehaviourAction :: GenerateEvent (
1695- KademliaEvent :: InboundRequest {
1696- request : InboundRequest :: AddProvider { record } ,
1697- } ,
1698- ) ) ;
16991725 }
17001726 }
17011727
@@ -2437,18 +2463,25 @@ pub enum InboundRequest {
24372463 num_closer_peers : usize ,
24382464 num_provider_peers : usize ,
24392465 } ,
2440- /// Request to store a peer as a provider.
2441- AddProvider { record : ProviderRecord } ,
2466+ /// A peer sent a [`KademliaHandlerIn::AddProvider`] request.
2467+ /// If filtering [`KademliaStoreInserts::FilterBoth`] is enabled, the [`ProviderRecord`] is
2468+ /// included.
2469+ ///
2470+ /// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`] for details..
2471+ AddProvider { record : Option < ProviderRecord > } ,
24422472 /// Request to retrieve a record.
24432473 GetRecord {
24442474 num_closer_peers : usize ,
24452475 present_locally : bool ,
24462476 } ,
2447- /// Request to store a record.
2477+ /// A peer sent a [`KademliaHandlerIn::PutRecord`] request.
2478+ /// If filtering [`KademliaStoreInserts::FilterBoth`] is enabled, the [`Record`] is included.
2479+ ///
2480+ /// See [`KademliaStoreInserts`] and [`KademliaConfig::set_record_filtering`].
24482481 PutRecord {
24492482 source : PeerId ,
24502483 connection : ConnectionId ,
2451- record : Record ,
2484+ record : Option < Record > ,
24522485 } ,
24532486}
24542487
0 commit comments