From 625d2b01dcaa0b15cc9ff7f98438bcd81a5bddc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Gustavsson?= Date: Tue, 8 Jan 2013 12:29:36 +0100 Subject: Teach encode functions to accept a bitstring term for a BIT STRING We do it in the simplest possible way by converting the bitstring to a compact bitstring tuple. The encoding of BIT STRINGs should be cleaned up and optimized. --- lib/asn1/src/asn1rtt_ber.erl | 4 ++++ lib/asn1/src/asn1rtt_per.erl | 4 ++++ lib/asn1/src/asn1rtt_uper.erl | 4 ++++ 3 files changed, 12 insertions(+) (limited to 'lib/asn1') diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl index 3c6ab3e1c4..7998c24465 100644 --- a/lib/asn1/src/asn1rtt_ber.erl +++ b/lib/asn1/src/asn1rtt_ber.erl @@ -799,6 +799,10 @@ decode_enumerated1(Val, NamedNumberList) -> %% C is constrint Len, only valid when identifiers %%============================================================================ +encode_bit_string(C, Bits, NamedBitList, TagIn) when is_bitstring(Bits) -> + PadLen = (8 - (bit_size(Bits) band 7)) band 7, + Compact = {PadLen,<>}, + encode_bin_bit_string(C, Compact, NamedBitList, TagIn); encode_bit_string(C,Bin={Unused,BinBits},NamedBitList,TagIn) when is_integer(Unused), is_binary(BinBits) -> encode_bin_bit_string(C,Bin,NamedBitList,TagIn); encode_bit_string(C, [FirstVal | RestVal], NamedBitList, TagIn) when is_atom(FirstVal) -> diff --git a/lib/asn1/src/asn1rtt_per.erl b/lib/asn1/src/asn1rtt_per.erl index d0a4de65e0..7903dcf9e9 100644 --- a/lib/asn1/src/asn1rtt_per.erl +++ b/lib/asn1/src/asn1rtt_per.erl @@ -528,6 +528,10 @@ decode_length(Buffer, SingleValue) when is_integer(SingleValue) -> %% Unused = integer(), %% BinBits = binary(). +encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) -> + PadLen = (8 - (bit_size(Bits) band 7)) band 7, + Compact = {PadLen,<>}, + encode_bin_bit_string(C, Compact, NamedBitList); encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList) when is_integer(Unused), is_binary(BinBits) -> encode_bin_bit_string(C,Bin,NamedBitList); diff --git a/lib/asn1/src/asn1rtt_uper.erl b/lib/asn1/src/asn1rtt_uper.erl index a9479471eb..2d91e0df24 100644 --- a/lib/asn1/src/asn1rtt_uper.erl +++ b/lib/asn1/src/asn1rtt_uper.erl @@ -494,6 +494,10 @@ encode_boolean(Val) -> %% Unused = integer(), %% BinBits = binary(). +encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) -> + PadLen = (8 - (bit_size(Bits) band 7)) band 7, + Compact = {PadLen,<>}, + encode_bit_string(C, Compact, NamedBitList); encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList) when is_integer(Unused), is_binary(BinBits) -> encode_bin_bit_string(C, Bin, NamedBitList); -- cgit v1.2.3