lib/net/ber/ber_parser.rb in net-ldap-0.7.0 vs lib/net/ber/ber_parser.rb in net-ldap-0.8.0

- old
+ new

@@ -146,17 +146,22 @@ ## # Reads a BER object from the including object. Requires that #getbyte is # implemented on the including object and that it returns a Fixnum value. # Also requires #read(bytes) to work. # + # Yields the object type `id` and the data `content_length` if a block is + # given. This is namely to support instrumentation. + # # This does not work with non-blocking I/O. def read_ber(syntax = nil) # TODO: clean this up so it works properly with partial packets coming # from streams that don't block when we ask for more data (like # StringIOs). At it is, this can throw TypeErrors and other nasties. id = getbyte or return nil # don't trash this value, we'll use it later content_length = read_ber_length + + yield id, content_length if block_given? if -1 == content_length raise Net::BER::BerError, "Indeterminite BER content length not implemented." else data = read(content_length)