Object subclass: BSSAPHelper [ BSSAPHelper class >> msgManagemnt [ ^ 0 ] BSSAPHelper class >> msgDtap [ ^ 1 ] BSSAPHelper class >> prependManagement: aMsg [ "Prepent the BSSAP Management header" | tmp | tmp := OrderedCollection new. tmp add: self msgManagemnt. tmp add: aMsg size. aMsg prependByteArray: tmp asByteArray. ] BSSAPHelper class >> prependDTAP: aMsg dlci: sapi [ "Prepend the DTAP header" | tmp | tmp := OrderedCollection new. tmp add: self msgDtap. tmp add: sapi. tmp add: aMsg size. aMsg prependByteArray: tmp asByteArray. ] ] Object subclass: BSSAPMessage [ BSSAPMessage class >> decode: bssap [ | type | type := bssap at: 1. BSSAPMessage allSubclassesDo: [:each | each msgType = type ifTrue: [ ^ each parseFrom: bssap. ] ]. ^ Error signal: 'No handler for: ', type asString. ] ] BSSAPMessage subclass: BSSAPManagement [ | data | BSSAPManagement class >> msgType [ ^ BSSAPHelper msgManagemnt ] BSSAPManagement class >> initWith: data [ ^ (self new) data: data; yourself. ] BSSAPMessage class >> parseFrom: aByteArray [ | size data | size := aByteArray at: 2. data := aByteArray copyFrom: 3 to: 2 + size. ^ BSSAPManagement initWith: data. ] data: aPayload [ data := aPayload. ] data [ ^ data ] writeOn: aMsg [ | dat | aMsg putByte: BSSAPHelper msgManagemnt. dat := data toMessageOrByteArray. aMsg putByte: dat size. aMsg putByteArray: dat. ] ]