⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sms.vb

📁 收到gsm moden得内容。解析pdu格式。转换成能够失败的字符串
💻 VB
📖 第 1 页 / 共 2 页
字号:
            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 + -