pub struct Catalog { /* private fields */ }Expand description
Set of zones and zone handlers available to this server.
Implementations§
Source§impl Catalog
impl Catalog
Sourcepub fn upsert(&mut self, name: LowerName, handlers: Vec<Arc<dyn ZoneHandler>>)
pub fn upsert(&mut self, name: LowerName, handlers: Vec<Arc<dyn ZoneHandler>>)
Insert or update the provided zone handlers
§Arguments
name- zone name, e.g. example.com.handlers- a vec of zone handler objects
Sourcepub fn remove(&mut self, name: &LowerName) -> Option<Vec<Arc<dyn ZoneHandler>>>
pub fn remove(&mut self, name: &LowerName) -> Option<Vec<Arc<dyn ZoneHandler>>>
Remove a zone from the catalog
Sourcepub fn set_nsid(&mut self, payload: Option<NSIDPayload>)
pub fn set_nsid(&mut self, payload: Option<NSIDPayload>)
Set a specified name server identifier (NSID) in responses
The provided NSIDPayload will be included in responses to requests that
specify the NSID option in EDNS. Set to None to disable NSID.
By default, no NSID is sent.
Sourcepub fn nsid(&self) -> Option<&NSIDPayload>
pub fn nsid(&self) -> Option<&NSIDPayload>
Return the name server identifier (NSID) that is used for responses (if enabled)
See set_nsid() for more information.
Sourcepub async fn update<R: ResponseHandler>(
&self,
update: &Request,
response_edns: Option<&Edns>,
now: u64,
response_handle: R,
) -> ResponseInfo
pub async fn update<R: ResponseHandler>( &self, update: &Request, response_edns: Option<&Edns>, now: u64, response_handle: R, ) -> ResponseInfo
Update the zone given the Update request.
RFC 2136, DNS Update, April 1997
3.1 - Process Zone Section
3.1.1. The Zone Section is checked to see that there is exactly one
RR therein and that the RR's ZTYPE is SOA, else signal FORMERR to the
requestor. Next, the ZNAME and ZCLASS are checked to see if the zone
so named is one of this server's authority zones, else signal NOTAUTH
to the requestor. If the server is a zone Secondary, the request will be
forwarded toward the Primary Zone Server.
3.1.2 - Pseudocode For Zone Section Processing
if (zcount != 1 || ztype != SOA)
return (FORMERR)
if (zone_type(zname, zclass) == SECONDARY)
return forward()
if (zone_type(zname, zclass) == PRIMARY)
return update()
return (NOTAUTH)
Sections 3.2 through 3.8 describe the primary's behaviour,
whereas Section 6 describes a forwarder's behaviour.
3.8 - Response
At the end of UPDATE processing, a response code will be known. A
response message is generated by copying the ID and Opcode fields
from the request, and either copying the ZOCOUNT, PRCOUNT, UPCOUNT,
and ADCOUNT fields and associated sections, or placing zeros (0) in
the these "count" fields and not including any part of the original
update. The QR bit is set to one (1), and the response is sent back
to the requestor. If the requestor used UDP, then the response will
be sent to the requestor's source UDP port. If the requestor used
TCP, then the response will be sent back on the requestor's open TCP
connection.The “request” should be an update formatted message. The response will be in the alternate, all 0’s format described in RFC 2136 section 3.8 as this is more efficient.
§Arguments
request- an update messageresponse_ednsan optionalEdnsvalue for the response messageresponse_handle- sink for the response message to be sent
Sourcepub fn contains(&self, name: &LowerName) -> bool
pub fn contains(&self, name: &LowerName) -> bool
Checks whether the Catalog contains DNS records for name
Use this when you know the exact LowerName that was used when
adding a zone handler and you don’t care about the zone handler it
contains. For public domain names, LowerName is usually the
top level domain name like example.com..
If you do not know the exact domain name to use or you actually
want to use the zone handler it contains, use find instead.
Sourcepub async fn lookup<R: ResponseHandler>(
&self,
request: &Request,
response_edns: Option<&Edns>,
now: u64,
response_handle: R,
) -> ResponseInfo
pub async fn lookup<R: ResponseHandler>( &self, request: &Request, response_edns: Option<&Edns>, now: u64, response_handle: R, ) -> ResponseInfo
Given the requested query, lookup and return any matching results.
§Arguments
request- the query message.response_ednsan optionalEdnsvalue for the response messageresponse_handle- sink for the response message to be sent
Trait Implementations§
Source§impl RequestHandler for Catalog
impl RequestHandler for Catalog
Source§fn handle_request<'life0, 'life1, 'async_trait, R, T>(
&'life0 self,
request: &'life1 Request,
response_handle: R,
) -> Pin<Box<dyn Future<Output = ResponseInfo> + Send + 'async_trait>>where
R: 'async_trait + ResponseHandler,
T: 'async_trait + Time,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn handle_request<'life0, 'life1, 'async_trait, R, T>(
&'life0 self,
request: &'life1 Request,
response_handle: R,
) -> Pin<Box<dyn Future<Output = ResponseInfo> + Send + 'async_trait>>where
R: 'async_trait + ResponseHandler,
T: 'async_trait + Time,
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Determines what needs to happen given the type of request, i.e. Query or Update.
§Arguments
request- the requested action to perform.response_handle- sink for the response message to be sent
Auto Trait Implementations§
impl Freeze for Catalog
impl !RefUnwindSafe for Catalog
impl Send for Catalog
impl Sync for Catalog
impl Unpin for Catalog
impl UnsafeUnpin for Catalog
impl !UnwindSafe for Catalog
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more