Struct trust_dns_server::authority::Catalog[][src]

pub struct Catalog { /* fields omitted */ }

Set of authorities, zones, available to this server.

Implementations

impl Catalog[src]

pub fn new() -> Self[src]

Constructs a new Catalog

pub fn upsert(&mut self, name: LowerName, authority: Box<dyn AuthorityObject>)[src]

Insert or update a zone authority

Arguments

  • name - zone name, e.g. example.com.
  • authority - the zone data

pub fn remove(
    &mut self,
    name: &LowerName
) -> Option<Arc<RwLock<Box<dyn AuthorityObject>>>>
[src]

Remove a zone from the catalog

pub fn update<'q, R: ResponseHandler + 'static>(
    &self,
    update: &'q MessageRequest,
    response_edns: Option<Edns>,
    response_handle: R
) -> Result<()>
[src]

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 slave, the request will be
  forwarded toward the primary master.

  3.1.2 - Pseudocode For Zone Section Processing

     if (zcount != 1 || ztype != SOA)
          return (FORMERR)
     if (zone_type(zname, zclass) == SLAVE)
          return forward()
     if (zone_type(zname, zclass) == MASTER)
          return update()
     return (NOTAUTH)

  Sections 3.2 through 3.8 describe the primary master'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 message
  • response_handle - sink for the response message to be sent

pub fn contains(&self, name: &LowerName) -> bool[src]

Checks whether the Catalog contains DNS records for name

Use this when you know the exact LowerName that was used when adding an authority and you don’t care about the authority 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 authority it contains, use find instead.

pub fn lookup<R: ResponseHandler>(
    &self,
    request: MessageRequest,
    response_edns: Option<Edns>,
    response_handle: R
) -> LookupFuture<R>
[src]

Given the requested query, lookup and return any matching results.

Arguments

  • request - the query message.
  • response_handle - sink for the response message to be sent

pub fn find(
    &self,
    name: &LowerName
) -> Option<&Arc<RwLock<Box<dyn AuthorityObject>>>>
[src]

Recursively searches the catalog for a matching authority

Trait Implementations

impl Default for Catalog[src]

impl RequestHandler for Catalog[src]

type ResponseFuture = HandleRequest

A future for execution of the request

fn handle_request<R: ResponseHandler>(
    &self,
    request: Request,
    response_handle: R
) -> Self::ResponseFuture
[src]

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 RefUnwindSafe for Catalog

impl Send for Catalog

impl Sync for Catalog

impl Unpin for Catalog

impl UnwindSafe for Catalog

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,