patch - for resolv.rb to support mDNS "cache flush" bit

Discussion in 'Ruby' started by Sam Roberts, Feb 6, 2005.

  1. Sam Roberts

    Sam Roberts Guest

    mDNS uses the high-bit of the CLASS of a resource record to store a
    "cache flush" bit.

    This is DNS-incompatible, of course, but note only 2 bits of the 16
    CLASS bits are used so far, and classes other than "1" (internet) are
    rarely seen. It is unlikely that DNS will be needing the next thousands
    of values anytime soon.

    Functional requirements for mDNS are:

    1 - have the cache flush bit not be considered when choosing a Class to
    decode the rdata

    2 - be able to retrieve the saved cache flush bit later


    A way of doing this with a small set of changes to resolv.rb is:

    Index: resolv.rb
    ===================================================================
    RCS file: /src/ruby/lib/resolv.rb,v
    retrieving revision 1.17.2.9
    diff -u -r1.17.2.9 resolv.rb
    --- resolv.rb 5 Feb 2005 18:31:20 -0000 1.17.2.9
    +++ resolv.rb 6 Feb 2005 22:32:59 -0000
    @@ -1322,8 +1322,10 @@
    def get_rr
    name = self.get_name
    type, klass, ttl = self.get_unpack('nnN')
    - typeclass = Resource.get_class(type, klass)
    - return name, ttl, self.get_length16 {typeclass.decode_rdata(self)}
    + typeclass = Resource.get_class(type, klass % 0x8000)
    + data = self.get_length16 {typeclass.decode_rdata(self)}
    + data.instance_variable_set:)@cacheflush, true) if (klass >> 15) == 1
    + return name, ttl, data
    end
    end
    end


    Another way would be to add


    class Resource
    attr_accessor :cacheflush
    ...


    and use the attribute rather than #instance_variable_set. This is less
    "weird", but instance_variable_set is more backwards compatible (i.e.,
    if the bit isn't set (DNS' case) then no extra attributes exist in the
    resource data class).


    Thoughts please?


    Thank you,
    Sam

    Example packet:


    require 'resolv.rb'
    require 'pp'

    class Resolv
    class DNS
    class Name

    # NOTE - could #inspect be added to Name? An array of labels every
    # time I do a 'pp' is making output much harder to read than
    # necessary.
    def inspect
    to_s + (absolute? ? '.' : '')
    end
    end
    end
    end

    data1 = "\000\000\204\000\000\000\000\002\000\000\000\001\010ensemble\005_http\004_tcp\005local\000\000!\200\001\000\000\000<\000\021\000\000\000\000\000P\010ensemble\300 \300\f\000\020\200\001\000\000\000<\000\001\000\3007\000\001\200\001\000\000\000<\000\004\300\250{\232"

    msg = Resolv::DNS::Message.decode(data1)

    pp msg
    Sam Roberts, Feb 6, 2005
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Sam Roberts
    Replies:
    4
    Views:
    199
    Tanaka Akira
    Jan 21, 2005
  2. Sam Roberts
    Replies:
    5
    Views:
    247
    Sam Roberts
    Feb 4, 2005
  3. Sam Roberts
    Replies:
    0
    Views:
    206
    Sam Roberts
    Mar 20, 2005
  4. Doug Beaver
    Replies:
    0
    Views:
    119
    Doug Beaver
    Dec 17, 2005
  5. Iñaki Baz Castillo

    Doesn't Resolv support NAPTR queries?

    Iñaki Baz Castillo, Jun 26, 2008, in forum: Ruby
    Replies:
    0
    Views:
    89
    Iñaki Baz Castillo
    Jun 26, 2008
Loading...

Share This Page