GSM48: Fix the optional parsing with multiple entries
This commit is contained in:
parent
7a8a3f1ad3
commit
d616368ba0
25
GSM48.st
25
GSM48.st
|
@ -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
|
||||
]
|
||||
|
||||
|
|
Reference in New Issue