@@ -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 
303303func  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