Cleaned up the layout quite a bit to make Gemifying and including into Rails 3 less painful. Some steps to 1.9 compatibility
This commit is contained in:
parent
ba08042d75
commit
d37c3b3ae6
22 changed files with 603 additions and 2313 deletions
52
lib/net/ldap/core_ext/fixnum.rb
Normal file
52
lib/net/ldap/core_ext/fixnum.rb
Normal file
|
@ -0,0 +1,52 @@
|
|||
module Net
|
||||
class LDAP
|
||||
module Extensions
|
||||
module Fixnum
|
||||
def to_ber
|
||||
"\002" + to_ber_internal
|
||||
end
|
||||
|
||||
def to_ber_enumerated
|
||||
"\012" + to_ber_internal
|
||||
end
|
||||
|
||||
def to_ber_length_encoding
|
||||
if self <= 127
|
||||
[self].pack('C')
|
||||
else
|
||||
i = [self].pack('N').sub(/^[\0]+/,"")
|
||||
[0x80 + i.length].pack('C') + i
|
||||
end
|
||||
end
|
||||
|
||||
# Generate a BER-encoding for an application-defined INTEGER.
|
||||
# Example: SNMP's Counter, Gauge, and TimeTick types.
|
||||
#
|
||||
def to_ber_application tag
|
||||
[0x40 + tag].pack("C") + to_ber_internal
|
||||
end
|
||||
|
||||
#--
|
||||
# Called internally to BER-encode the length and content bytes of a Fixnum.
|
||||
# The caller will prepend the tag byte.
|
||||
def to_ber_internal
|
||||
# PLEASE optimize this code path. It's awfully ugly and probably slow.
|
||||
# It also doesn't understand negative numbers yet.
|
||||
raise Net::BER::BerError.new( "range error in fixnum" ) unless self >= 0
|
||||
z = [self].pack("N")
|
||||
zlen = if self < 0x80
|
||||
1
|
||||
elsif self < 0x8000
|
||||
2
|
||||
elsif self < 0x800000
|
||||
3
|
||||
else
|
||||
4
|
||||
end
|
||||
[zlen].pack("C") + z[0-zlen,zlen]
|
||||
end
|
||||
private :to_ber_internal
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue