📄 sms.vb
字号:
Public TP_VP As Byte
Sub New(ByVal PDUCode As String)
Type = SMSBase.SMSType.SMS_SUBMIT
GetOrignalData(PDUCode)
End Sub
Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
SCAddressLength = GetByte(PDUCode)
SCAddressType = GetByte(PDUCode)
SCAddressValue = GetAddress((GetString(PDUCode, (SCAddressLength - 1) * 2)))
FirstOctet = GetByte(PDUCode)
TP_MR = GetByte(PDUCode)
DesAddressLength = GetByte(PDUCode)
DesAddressType = GetByte(PDUCode)
DesAddressLength += DesAddressLength Mod 2
DesAddressValue = GetAddress((GetString(PDUCode, DesAddressLength)))
TP_PID = GetByte(PDUCode)
TP_DCS = GetByte(PDUCode)
TP_VP = GetByte(PDUCode)
TP_UDL = GetByte(PDUCode)
TP_UD = GetString(PDUCode, TP_UDL * 2)
End Sub
End Class
Public Class EMS_RECEIVED
Inherits SMS_RECEIVED
Public Structure InfoElem 'See document "How to create EMS"
Public Identifier As Byte
Public Length As Byte
Public Data As String
End Structure
Public TP_UDHL As Byte
Public IE() As InfoElem
Sub New(ByVal PDUCode As String)
MyBase.New(PDUCode)
End Sub
Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
SCAddressLength = GetByte(PDUCode)
SCAddressType = GetByte(PDUCode)
SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))
FirstOctet = GetByte(PDUCode)
SrcAddressLength = GetByte(PDUCode)
SrcAddressType = GetByte(PDUCode)
SrcAddressLength += SrcAddressLength Mod 2
SrcAddressValue = GetAddress((GetString(PDUCode, SrcAddressLength)))
TP_PID = GetByte(PDUCode)
TP_DCS = GetByte(PDUCode)
TP_SCTS = GetDate(GetString(PDUCode, 14))
TP_UDL = GetByte(PDUCode)
TP_UDHL = GetByte(PDUCode)
IE = GetIE(GetString(PDUCode, TP_UDHL * 2))
TP_UD = GetString(PDUCode, TP_UDL * 2)
End Sub
'Get Informat Elements
Shared Function GetIE(ByVal IECode As String) As InfoElem()
Dim tmp As String = IECode, t As Integer = 0
Dim result() As InfoElem
Do Until IECode = ""
ReDim Preserve result(t)
With result(t)
.Identifier = GetByte(IECode)
.Length = GetByte(IECode)
.Data = GetString(IECode, .Length * 2)
End With
t += 1
Loop
Return result
End Function
End Class
Public Class EMS_SUBMIT
Inherits SMS_SUBMIT
Sub New(ByVal PDUCode As String)
MyBase.New(PDUCode)
Type = SMSBase.SMSType.EMS_SUBMIT
End Sub
Public TP_UDHL As Byte
Public IE() As EMS_RECEIVED.InfoElem
Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
SCAddressLength = GetByte(PDUCode)
SCAddressType = GetByte(PDUCode)
SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))
FirstOctet = GetByte(PDUCode)
TP_MR = GetByte(PDUCode)
DesAddressLength = GetByte(PDUCode)
DesAddressType = GetByte(PDUCode)
DesAddressLength += DesAddressLength Mod 2
DesAddressValue = GetAddress(GetString(PDUCode, DesAddressLength))
TP_PID = GetByte(PDUCode)
TP_DCS = GetByte(PDUCode)
TP_VP = GetByte(PDUCode)
TP_UDL = GetByte(PDUCode)
TP_UDHL = GetByte(PDUCode)
IE = EMS_RECEIVED.GetIE(GetString(PDUCode, TP_UDHL * 2))
TP_UD = GetString(PDUCode, TP_UDL * 2)
End Sub
End Class
Public Class SMS_STATUS_REPORT
Inherits SMS_RECEIVED
Public TP_MR As Byte
Public TP_DP As Date
Public Status As EnumStatus
Public Enum EnumStatus
Success = 0
NotSend = 96
NoResponseFromSME = 98
End Enum
Sub New(ByVal PDUCode As String)
MyBase.New(PDUCode)
Type = SMSBase.SMSType.SMS_STATUS_REPORT
End Sub
Public Overrides Sub GetOrignalData(ByVal PDUCode As String)
SCAddressLength = GetByte(PDUCode)
SCAddressType = GetByte(PDUCode)
SCAddressValue = GetAddress(GetString(PDUCode, (SCAddressLength - 1) * 2))
FirstOctet = GetByte(PDUCode)
TP_MR = GetByte(PDUCode)
SrcAddressLength = GetByte(PDUCode)
SrcAddressType = GetByte(PDUCode)
SrcAddressLength += SrcAddressLength Mod 2
SrcAddressValue = GetAddress(GetString(PDUCode, SrcAddressLength))
TP_SCTS = GetDate(GetString(PDUCode, 14))
TP_DP = GetDate(GetString(PDUCode, 14))
Status = GetByte(PDUCode)
'Status report do not have content so I set it a zero length string
TP_UD = ""
End Sub
End Class
Public Class PDUDecoder
Public Structure BaseInfo
Public SourceNumber As String
Public DestinationNumber As String
Public ReceivedDate As Date
Public Text As String
Public Type As SMS.Decoder.SMSBase.SMSType
Public EMSTotolPiece As Integer
Public EMSCurrentPiece As Integer
Public StatusFromReport As SMS_STATUS_REPORT.EnumStatus
Public DestinationReceivedDate
End Structure
Sub New(ByVal PDUCode As String)
Decode(PDUCode)
End Sub
Public Shared Function Decode(ByVal PDUCode As String) As BaseInfo
Dim Result As BaseInfo
Try
Dim s As Object
Dim T As SMSBase.SMSType = SMSBase.GetSMSType(PDUCode)
Result.Type = T
Select Case T
Case SMSBase.SMSType.EMS_RECEIVED
s = New EMS_RECEIVED(PDUCode)
Result.SourceNumber = s.SrcAddressValue
If s.SrcAddressType = &H91 Then Result.SourceNumber = "+" + Result.SourceNumber
Result.ReceivedDate = s.TP_SCTS
If Not (s.IE Is Nothing) Then
Dim Data As String = s.IE(0).Data
Result.EMSTotolPiece = CInt(Mid(Data, 5, 2))
Result.EMSCurrentPiece = CInt(Mid(Data, 7, 2))
End If
Case SMSBase.SMSType.SMS_RECEIVED
s = New SMS_RECEIVED(PDUCode)
Result.SourceNumber = s.SrcAddressValue
If s.SrcAddressType = &H91 Then Result.SourceNumber = "+" + Result.SourceNumber
Result.ReceivedDate = s.TP_SCTS
Case SMSBase.SMSType.EMS_SUBMIT
s = New EMS_SUBMIT(PDUCode)
Result.DestinationNumber = s.DesAddressValue
If s.DesAddressType = &H91 Then Result.DestinationNumber = "+" + Result.DestinationNumber
If Not (s.IE Is Nothing) Then
Dim Data As String = s.IE(0).Data
Result.EMSTotolPiece = CInt(Mid(Data, 5, 2))
Result.EMSCurrentPiece = CInt(Mid(Data, 7, 2))
End If
Case SMSBase.SMSType.SMS_SUBMIT
s = New SMS_SUBMIT(PDUCode)
Result.DestinationNumber = s.DesAddressValue
If s.DesAddressType = &H91 Then Result.DestinationNumber = "+" + Result.DestinationNumber
Case SMSBase.SMSType.SMS_STATUS_REPORT
s = New SMS_STATUS_REPORT(PDUCode)
Result.SourceNumber = s.SrcAddressValue
If s.SrcAddressType = &H91 Then Result.SourceNumber = "+" + Result.SourceNumber
Result.ReceivedDate = s.TP_SCTS
Result.DestinationReceivedDate = s.TP_DP()
Result.StatusFromReport = s.status
Case Else
Stop
End Select
'###########################
'Correct when s is SMS type, no TP_UDL is found.
'Note:Only EMS has the TP_UDHL and TP_UDH see 3GPP TS 23.040 V6.5.0 (2004-09)
'###########################
If s.tp_DCS = 0 Then
If T = SMSBase.SMSType.SMS_RECEIVED Or T = SMSBase.SMSType.SMS_STATUS_REPORT Or T = SMSBase.SMSType.SMS_SUBMIT Then
'#############################
'add a parameter
'############################
Result.Text = s.decode7bit(s.tp_UD, s.TP_UDL)
End If
If T = SMSBase.SMSType.EMS_RECEIVED Or T = SMSBase.SMSType.EMS_SUBMIT Then
Result.Text = s.decode7bit(s.tp_ud, s.tp_udl - 8 * (1 + s.tp_udhl) / 7)
End If
Else
Result.Text = s.DecodeUnicode(s.TP_UD)
End If
Catch err As Exception
Result.Text = "PDU解码错误:" & PDUCode
End Try
Return Result
End Function
End Class
End Namespace
End Namespace
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -