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)