Class: Dnsruby::MessageEncoder
- Inherits:
-
Object
- Object
- Dnsruby::MessageEncoder
- Defined in:
- lib/Dnsruby/message.rb
Overview
:nodoc: all
Instance Method Summary collapse
-
#initialize {|_self| ... } ⇒ MessageEncoder
constructor
A new instance of MessageEncoder.
- #put_bytes(d) ⇒ Object
- #put_label(d) ⇒ Object
- #put_labels(d, do_canonical) ⇒ Object
- #put_length16 ⇒ Object
- #put_name(d, canonical = false) ⇒ Object
- #put_name_canonical(d) ⇒ Object
- #put_pack(template, *d) ⇒ Object
- #put_string(d) ⇒ Object
- #put_string_list(ds) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize {|_self| ... } ⇒ MessageEncoder
Returns a new instance of MessageEncoder.
743 744 745 746 747 |
# File 'lib/Dnsruby/message.rb', line 743 def initialize @data = '' @names = {} yield self end |
Instance Method Details
#put_bytes(d) ⇒ Object
753 754 755 |
# File 'lib/Dnsruby/message.rb', line 753 def put_bytes(d) @data << d end |
#put_label(d) ⇒ Object
805 806 807 808 809 |
# File 'lib/Dnsruby/message.rb', line 805 def put_label(d) s, = Name.encode(d) raise RuntimeError, "length of #{s} is #{s.string.length} (larger than 63 octets)" if s.string.length > 63 self.put_string(s.string) end |
#put_labels(d, do_canonical) ⇒ Object
789 790 791 792 793 794 795 796 797 798 799 800 801 802 |
# File 'lib/Dnsruby/message.rb', line 789 def put_labels(d, do_canonical) d.each_index {|i| domain = d[i..-1].join(".") if (!do_canonical && (idx = @names[domain])) self.put_pack("n", 0xc000 | idx) return else @names[domain] = @data.length first = d[i] self.put_label(first) end } @data << "\0" end |
#put_length16 ⇒ Object
761 762 763 764 765 766 767 768 |
# File 'lib/Dnsruby/message.rb', line 761 def put_length16 length_index = @data.length @data << "\0\0" data_start = @data.length yield data_end = @data.length @data[length_index, 2] = [data_end - data_start].pack("n") end |
#put_name(d, canonical = false) ⇒ Object
781 782 783 |
# File 'lib/Dnsruby/message.rb', line 781 def put_name(d, canonical=false) put_labels(d.to_a, canonical) end |
#put_name_canonical(d) ⇒ Object
785 786 787 |
# File 'lib/Dnsruby/message.rb', line 785 def put_name_canonical(d) put_name(d, true) end |
#put_pack(template, *d) ⇒ Object
757 758 759 |
# File 'lib/Dnsruby/message.rb', line 757 def put_pack(template, *d) @data << d.pack(template) end |
#put_string(d) ⇒ Object
770 771 772 773 |
# File 'lib/Dnsruby/message.rb', line 770 def put_string(d) self.put_pack("C", d.length) @data << d end |
#put_string_list(ds) ⇒ Object
775 776 777 778 779 |
# File 'lib/Dnsruby/message.rb', line 775 def put_string_list(ds) ds.each {|d| self.put_string(d) } end |
#to_s ⇒ Object
749 750 751 |
# File 'lib/Dnsruby/message.rb', line 749 def to_s return @data end |