Module: Net::BER::BERParser

Included in:
IO, OpenSSL::SSL::SSLSocket, String, StringIO
Defined in:
lib/net/ber/ber_parser.rb

Overview

Implements Basic Encoding Rules parsing to be mixed into types as needed.

Constant Summary collapse

BuiltinSyntax =

The universal, built-in ASN.1 BER syntax.

Net::BER.compile_syntax(:universal => universal,
:context_specific => context)

Instance Method Summary collapse

Instance Method Details

#read_ber(syntax = nil) ⇒ Object

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.

This does not work with non-blocking I/O.



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'lib/net/ber/ber_parser.rb', line 152

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

  if -1 == content_length
    raise Net::BER::BerError, "Indeterminite BER content length not implemented."
  else
    data = read(content_length)
  end

  parse_ber_object(syntax, id, data)
end