1
0
Fork 0

GSM48: Fix the optional parsing with multiple entries

This commit is contained in:
Holger Hans Peter Freyther 2010-11-30 20:45:36 +01:00
parent 7a8a3f1ad3
commit d616368ba0
1 changed files with 22 additions and 3 deletions

View File

@ -430,18 +430,37 @@ IEMessage subclass: GSM48MSG [
"Types must appear in order"
self Optional do: [:each |
| tag |
tag := dat at: 1.
"We have consumed everything"
dat size = 0
ifTrue: [
^ res
].
tag := (dat at: 1) bitAnd: each value ieMask.
tag = each value elementId
ifTrue: [
| len data |
data := dat copyFrom: 2.
len := each value length: data.
res instVarNamed: each key put: (each value parseFrom: data).
dat := dat copyFrom: len + 1.
"treat the T only tags specially"
len = 0
ifTrue: [
res instVarNamed: each key
put: (each value initWithData: (dat at: 1)).
dat := data.
]
ifFalse: [
res instVarNamed: each key
put: (each value parseFrom: data).
dat := data copyFrom: len + 1.
].
].
].
"TODO: Complain if we have not consumed everything"
^ res
]