Skip to content

Commit 80bdee9

Browse files
committed
extract the parsing of the SDSTransfer header part into a public
function for reuse
1 parent f79551f commit 80bdee9

File tree

1 file changed

+28
-20
lines changed

1 file changed

+28
-20
lines changed

sds/sds.go

Lines changed: 28 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,33 @@ func (r SDSShortReport) Encode(bytes []byte, bits int) ([]byte, int) {
301301

302302
// ParseSDSTransfer parses a SDS-TRANSFER PDU from the given bytes
303303
func ParseSDSTransfer(bytes []byte) (SDSTransfer, error) {
304+
result, userdataStart, err := ParseSDSTransferHeader(bytes)
305+
if err != nil {
306+
return SDSTransfer{}, err
307+
}
308+
309+
var sdu any
310+
311+
switch result.Protocol {
312+
case TextMessaging, ImmediateTextMessaging:
313+
sdu, err = ParseTextSDU(bytes[userdataStart:])
314+
case UserDataHeaderMessaging:
315+
sdu, err = ParseConcatenatedTextSDU(bytes[userdataStart:])
316+
default:
317+
return SDSTransfer{}, fmt.Errorf("protocol 0x%x is not supported as SDS-TRANSFER content", bytes[0])
318+
}
319+
320+
if err != nil {
321+
return SDSTransfer{}, err
322+
}
323+
result.UserData = sdu
324+
325+
return result, nil
326+
}
327+
328+
func ParseSDSTransferHeader(bytes []byte) (SDSTransfer, int, error) {
304329
if len(bytes) < 4 {
305-
return SDSTransfer{}, fmt.Errorf("SDS-TRANSFER PDU too short: %d", len(bytes))
330+
return SDSTransfer{}, 0, fmt.Errorf("SDS-TRANSFER PDU too short: %d", len(bytes))
306331
}
307332

308333
var result SDSTransfer
@@ -317,31 +342,14 @@ func ParseSDSTransfer(bytes []byte) (SDSTransfer, error) {
317342
if storeForwardControl {
318343
sfc, err := ParseStoreForwardControl(bytes[3:])
319344
if err != nil {
320-
return SDSTransfer{}, err
345+
return SDSTransfer{}, 0, err
321346
}
322347

323348
result.StoreForwardControl = sfc
324349
userdataStart += sfc.Length()
325350
}
326351

327-
var sdu any
328-
var err error
329-
330-
switch result.Protocol {
331-
case TextMessaging, ImmediateTextMessaging:
332-
sdu, err = ParseTextSDU(bytes[userdataStart:])
333-
case UserDataHeaderMessaging:
334-
sdu, err = ParseConcatenatedTextSDU(bytes[userdataStart:])
335-
default:
336-
return SDSTransfer{}, fmt.Errorf("protocol 0x%x is not supported as SDS-TRANSFER content", bytes[0])
337-
}
338-
339-
if err != nil {
340-
return SDSTransfer{}, err
341-
}
342-
result.UserData = sdu
343-
344-
return result, nil
352+
return result, userdataStart, nil
345353
}
346354

347355
// NewTextMessageTransfer returns a new SDS-TRANSFER PDU for text messaging with the given parameters

0 commit comments

Comments
 (0)