#Region " simple exception handler " '''----------------------------------------------------------------------------- ''' Project : DOTUCPEMI ''' Class : UCPPacketException ''' '''----------------------------------------------------------------------------- ''' Simple exception for packet errors ''' ''' ''' [bofh] 07-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Class UCPPacketException Inherits Exception '''----------------------------------------------------------------------------- ''' The packets that threw the exception '''----------------------------------------------------------------------------- Public ReadOnly rawPacket As String Public Sub New(ByVal message As String, ByVal inner As Exception, ByVal theRawPacket As String) MyBase.New(message, inner) rawPacket = theRawPacket End Sub ' New End Class #End Region #Region " Header class " '''----------------------------------------------------------------------------- ''' Project : DOTUCPEMI ''' Class : header ''' '''----------------------------------------------------------------------------- ''' All UCP packets consist of an header byt this specefiktaion ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Class header Private packet_header_TRN As String = "00" Private packet_header_LEN As String = "00000" Private packet_header_OR As String = "O" Private packet_header_OT As String = "30" '''----------------------------------------------------------------------------- ''' Takes an raw UCP packets and parses the headere so they corrospond ''' Raw packets ''' use this to identify the type of packets ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub parseHeader(ByVal dump As String) packet_header_TRN = "00" packet_header_LEN = "00000" packet_header_OR = "O" packet_header_OT = "30" If InStr(dump, "/") > 0 Then Dim aDump() As String = Split(dump, "/") If aDump.GetLength(0) >= 4 Then packet_header_TRN = aDump(0) packet_header_LEN = aDump(1) packet_header_OR = aDump(2) packet_header_OT = aDump(3) Else Throw New UCPPacketException("packets does not contain a full header", New Exception, dump) End If Else Throw New UCPPacketException("packets is not an UDP packets", New Exception, dump) End If End Sub '''----------------------------------------------------------------------------- ''' Returns and string representing the header of the packet ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public ReadOnly Property topacket() As String Get Return packet_header_TRN & "/" & packet_header_LEN & "/" & _ packet_header_OR & "/" & packet_header_OT End Get End Property '''----------------------------------------------------------------------------- ''' Gets or sets the transaction number of the packets ''' new transaction id, 2 octets ''' dont modify this manualy ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property transaction_number() As Integer Get Return packet_header_TRN End Get Set(ByVal Value As Integer) If Value > 0 And Value < 100 Then packet_header_TRN = Value.ToString If packet_header_TRN < 10 Then packet_header_TRN = "0" & packet_header_TRN End If End If End Set End Property '''----------------------------------------------------------------------------- ''' ''' Length of whole packets ''' ''' Length, in 5 octets ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property LEN() As Integer Get Return packet_header_LEN End Get Set(ByVal Value As Integer) If Value > 1 And Value < 10000 Then packet_header_LEN = Value.ToString If packet_header_LEN.Length < 5 Then packet_header_LEN = Space(5 - packet_header_LEN.Length) & packet_header_LEN packet_header_LEN = Replace(packet_header_LEN, " ", "0") End If End If End Set End Property '''----------------------------------------------------------------------------- ''' Type of operation this pacets represents ''' Sets the operation type. ''' Dont modify this manualy ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property Operation() As enumOT Get Return packet_header_OT End Get Set(ByVal Value As enumOT) packet_header_OT = Value If packet_header_OT.Length < 2 Then packet_header_OT = "0" & packet_header_OT End If End Set End Property '''----------------------------------------------------------------------------- ''' Is this an operation go request ( acknowledgement ) packet ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property is_Operation_or_Request() As enumOR Get If packet_header_OR = "O" Then Return enumOR.Operation Else Return enumOR.Request End If End Get Set(ByVal Value As enumOR) If Value = enumOR.Operation Then packet_header_OR = "O" Else packet_header_OR = "R" End If End Set End Property Public Sub New() transaction_number = TransActionNumber TransActionNumber += 1 If TransActionNumber > 99 Then TransActionNumber = 1 End If End Sub End Class #End Region '''----------------------------------------------------------------------------- ''' Project : DOTUCPEMI ''' Class : UCPPacket ''' '''----------------------------------------------------------------------------- ''' represents an single UCP packets. ''' use create[type} to create packet types. ''' for acknowledgement of packets, use acknowledgement and resend packets back to smsc ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Class UCPPacket Inherits header 'Protected Friend Packet_header As New header Private packet_message As String Private packet_checksum As String = "00" '''----------------------------------------------------------------------------- ''' Creates an "empty" packets ''' after this, use create[type} tp create the packets you need ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub New() End Sub '''----------------------------------------------------------------------------- ''' Parses raw ucp data, in to a UCP packets object. ''' ''' use this to "read" packets, and to send acknowledgements back to smsc ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub New(ByVal packetData As String) loadpacket = packetData End Sub '''----------------------------------------------------------------------------- ''' if this is an request packets, was the result an success ? ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public ReadOnly Property success() As Boolean Get Return packet_message_ACK = "A" End Get End Property '''----------------------------------------------------------------------------- ''' if not, what was the "custom" error messages from the SMSC ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public ReadOnly Property error_message() As String Get If packet_message_ACK = "N" Then Return packet_message_SM : Else : Return "" : End If End Get End Property '''----------------------------------------------------------------------------- ''' error number, in enumeration form, for easy look up of text and/or number ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public ReadOnly Property last_errorcode() As Error_code Get If packet_message_ACK = "N" Then Try Return packet_message_MVP Catch ex As Exception Return Error_code.unknown_error_code End Try End If Return Error_code.No_error End Get End Property '''----------------------------------------------------------------------------- ''' ''' who was this messages sendt to. ''' typically mobil number but can be ip_address-port or other ''' ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property receiver() As String Get Return packet_message_AdC End Get Set(ByVal Value As String) packet_message_AdC = Value End Set End Property '''----------------------------------------------------------------------------- ''' ''' who was this messages designated for. ''' typically mobil number but can be ip_address-port or other ''' ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property Originator() As String Get Return packet_message_OAdC End Get Set(ByVal Value As String) packet_message_OAdC = Value End Set End Property '''----------------------------------------------------------------------------- ''' Theres 3 types of messages. Numeric, AlphaNumeric and Binary messages. This finds the type in the packets and returns that. ''' ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Property Message() As String Get If packet_message_MT = "2" Then Return packet_message_NMsg ElseIf packet_message_MT = "3" Then Return IA5ToStr(packet_message_AMsg) ElseIf packet_message_MT = "4" Then Return IA5ToStr(packet_message_AMsg) Else If packet_message_AMsg <> "" Then Return IA5ToStr(packet_message_AMsg) Else Return "" End If End If End Get Set(ByVal Value As String) If Value.Length > 160 Then Value = Mid(Value, 1, 160) packet_message_AMsg = StrToIA5(Value) End Set End Property '''----------------------------------------------------------------------------- ''' Loads and RAW packets, and parses it to and UCP packets object ''' The RAW packets ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public WriteOnly Property loadpacket() As String Set(ByVal Value As String) Value = Replace(Value, UCP_STX, "") Value = Replace(Value, UCP_ETX, "") Try parseHeader(Value) Catch ex As Exception Throw New UCPPacketException("caught an exception parsing header", ex, Value) End Try Dim aPacket() As String = Split(Value, "/") If is_Operation_or_Request = enumOR.Request Then If (Operation = enumOT.Session_management_operation And aPacket.GetLength(0) <> 7) Or _ (Operation <> enumOT.Session_management_operation And aPacket.GetLength(0) <> 8) Then Throw New UCPPacketException("packet has an invalid syntax", New Exception, Value) End If packet_message_ACK = aPacket(4) packet_message_MVP = aPacket(5) If Operation = enumOT.Session_management_operation And packet_message_ACK = "A" Then packet_checksum = aPacket(6) Else packet_message_SM = aPacket(6) packet_checksum = aPacket(7) End If If InStr(packet_message_SM, ":") > 0 Then packet_message_SM_AdC = packet_message_SM.Split(":")(0) packet_message_SM_SCTC = packet_message_SM.Split(":")(1) Try packet_message_AMsg = StrToIA5("Messages to " & packet_message_SM_AdC & " was accepted at " & _ packet_message_SM_SCTC.Substring(0, 2) & "-" & _ packet_message_SM_SCTC.Substring(2, 2) & "-" & _ packet_message_SM_SCTC.Substring(4, 2) & " " & _ packet_message_SM_SCTC.Substring(6, 2) & ":" & _ packet_message_SM_SCTC.Substring(8, 2) & ":" & _ packet_message_SM_SCTC.Substring(10, 2)) Catch ex As Exception ' dont bothere throwing an exception here. End Try End If Else Select Case Operation Case enumOT.Call_Input_Operation, enumOT.SMS_message_transfer_operation If aPacket.GetLength(0) <> 10 Then Throw New UCPPacketException("packet has an invalid syntax", New Exception, Value) End If packet_message_AdC = aPacket(4) packet_message_OAdC = aPacket(5) packet_message_AC = aPacket(6) packet_message_MT = aPacket(7) If packet_message_MT = 2 Then ' Numeric message packet_message_NMsg = aPacket(8) ElseIf packet_message_MT = 3 Then ' Message is IA5 packet_message_AMsg = aPacket(8) Else ' What happend ? packet_message_AMsg = aPacket(8) End If packet_checksum = aPacket(9) Case enumOT.Deliver_notification, enumOT.Deliver_short_message If aPacket.GetLength(0) <> 38 Then Throw New UCPPacketException("packet has an invalid syntax", New Exception, Value) End If packet_message_AdC = aPacket(4) packet_message_OAdC = aPacket(5) packet_message_AC = aPacket(6) packet_message_NRq = aPacket(7) packet_message_NAdC = aPacket(8) packet_message_NT = aPacket(9) packet_message_NPID = aPacket(10) packet_message_LRq = aPacket(11) packet_message_LRAd = aPacket(12) packet_message_LPID = aPacket(13) packet_message_DD = aPacket(14) packet_message_DDT = aPacket(15) packet_message_VP = aPacket(16) packet_message_RPID = aPacket(17) packet_message_SCTS = aPacket(18) packet_message_Dst = aPacket(19) packet_message_Rsn = aPacket(20) packet_message_DSCTS = aPacket(21) packet_message_MT = aPacket(22) If packet_message_MT = "2" Then packet_message_NB = aPacket(23) packet_message_NMsg = aPacket(24) ElseIf packet_message_MT = "3" Then packet_message_NB = aPacket(23) packet_message_AMsg = aPacket(24) Else ' if = "4" packet_message_NB = aPacket(23) packet_message_TMsg = aPacket(24) End If packet_message_MMS = aPacket(25) packet_message_PR = aPacket(26) packet_message_DCs = aPacket(27) packet_message_MCLs = aPacket(28) packet_message_RPI = aPacket(29) packet_message_CPg = aPacket(30) packet_message_RPLy = aPacket(31) packet_message_OTOA = aPacket(32) packet_message_HPLMN = aPacket(33) packet_message_XSer = aPacket(34) packet_message_RES4 = aPacket(35) packet_message_RES5 = aPacket(36) packet_checksum = aPacket(37) Case Else If aPacket.GetLength(0) <> 15 Then Throw New UCPPacketException("packet has an invalid syntax", New Exception, Value) End If packet_message_AdC = aPacket(4) packet_message_OAdC = aPacket(5) packet_message_AC = aPacket(6) packet_message_NRq = aPacket(7) packet_message_NAd = aPacket(8) packet_message_NPID = aPacket(9) packet_message_DD = aPacket(10) packet_message_DDT = aPacket(11) packet_message_VP = aPacket(12) packet_message_AMsg = aPacket(13) packet_checksum = aPacket(14) End Select End If End Set End Property '''----------------------------------------------------------------------------- ''' Creates and ready-to-send packets by the data specefied on object ''' RAW UCP packets ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public ReadOnly Property createpacket() As String Get If is_Operation_or_Request = enumOR.Operation Then Select Case Operation Case enumOT.Call_Input_Operation ' UCP 1.0 messages. packet_message = packet_message_ACK packet_message = packet_message & "/" & packet_message_MVP packet_message = packet_message & "/" & packet_message_SM Case enumOT.Submit_short_message, enumOT.Deliver_notification ' 50 Series way. More advanced. packet_message = packet_message_AdC packet_message = packet_message & "/" & packet_message_OAdC If packet_message_AC.Length = 4 Then packet_message = packet_message & "/" & packet_message_AC Else packet_message = packet_message & "/" & "" End If packet_message = packet_message & "/" & packet_message_NRq packet_message = packet_message & "/" & packet_message_NAdC packet_message = packet_message & "/" & packet_message_NT packet_message = packet_message & "/" & packet_message_NPID packet_message = packet_message & "/" & packet_message_LRq packet_message = packet_message & "/" & packet_message_LRAd packet_message = packet_message & "/" & packet_message_LPID If packet_message_DD <> "" And packet_message_DDT <> "" Then packet_message = packet_message & "/" & packet_message_DD packet_message = packet_message & "/" & packet_message_DDT Else packet_message = packet_message & "/" & "" packet_message = packet_message & "/" & "" End If packet_message = packet_message & "/" & packet_message_VP packet_message = packet_message & "/" & packet_message_RPID packet_message = packet_message & "/" & packet_message_SCTS packet_message = packet_message & "/" & packet_message_Dst packet_message = packet_message & "/" & packet_message_Rsn packet_message = packet_message & "/" & packet_message_DSCTS packet_message = packet_message & "/" & packet_message_MT If packet_message_MT = "2" Then packet_message = packet_message & "/" & packet_message_NB packet_message = packet_message & "/" & packet_message_NMsg ElseIf packet_message_MT = "3" Then packet_message = packet_message & "/" & packet_message_NB packet_message = packet_message & "/" & packet_message_AMsg Else ' if = "4" packet_message = packet_message & "/" & packet_message_NB packet_message = packet_message & "/" & packet_message_TMsg End If packet_message = packet_message & "/" & packet_message_MMS packet_message = packet_message & "/" & packet_message_PR packet_message = packet_message & "/" & packet_message_DCs packet_message = packet_message & "/" & packet_message_MCLs packet_message = packet_message & "/" & packet_message_RPI packet_message = packet_message & "/" & packet_message_CPg packet_message = packet_message & "/" & packet_message_RPLy packet_message = packet_message & "/" & packet_message_OTOA packet_message = packet_message & "/" & packet_message_HPLMN packet_message = packet_message & "/" & packet_message_XSer packet_message = packet_message & "/" & packet_message_RES4 packet_message = packet_message & "/" & packet_message_RES5 If packet_message_RPID = "0127" Then If packet_message_MT <> "4" Or packet_message_MCLs <> "2" Then ' Messages will be rejected but let user find out the hard way. End If End If Case enumOT.SMS_message_transfer_operation ' Old UCP way. allways work packet_message = packet_message_AdC packet_message = packet_message & "/" & packet_message_OAdC packet_message = packet_message & "/" & packet_message_AC packet_message = packet_message & "/" & packet_message_NRq packet_message = packet_message & "/" & packet_message_NAd packet_message = packet_message & "/" & packet_message_NPID packet_message = packet_message & "/" & packet_message_DD packet_message = packet_message & "/" & packet_message_DDT packet_message = packet_message & "/" & packet_message_VP packet_message = packet_message & "/" & packet_message_AMsg Case enumOT.Session_management_operation ' 60 series. Auth f.eks packet_message = packet_message_OAdC & "/" & _ packet_message_OTON & "/" & _ packet_message_ONPI & "/" & _ packet_message_STYP & "/" & _ packet_message_PWD & "/" & _ packet_message_NPWD & "/" & _ packet_message_VERS & "/" & _ packet_message_LAdC & "/" & _ packet_message_LTON & "/" & _ packet_message_LNPI & "/" & _ packet_message_OPID & "/" & _ packet_message_RES1 Case Else ' not implementet yet packet_message = "" End Select Else Select Case Operation Case enumOT.Deliver_notification If packet_message_ACK = "A" Then packet_message = packet_message_ACK packet_message = packet_message & "/" & packet_message_MVP packet_message = packet_message & "/" & packet_message_SM Else packet_message = packet_message_ACK packet_message = packet_message & "/" & packet_message_EC packet_message = packet_message & "/" & packet_message_SM End If Case Else packet_message = packet_message_ACK If packet_message_ACK = "A" Then packet_message = packet_message & "/" & packet_message_SM Else packet_message = packet_message & "/" & packet_message_MVP packet_message = packet_message & "/" & packet_message_SM End If End Select End If LEN = topacket.Length + packet_message.Length ' Add 1 for the leading / for checksum ' and the one between header and massage ' plus 2 for check sum LEN += 4 packet_checksum = CheckSum(topacket & "/" & packet_message & "/") Return UCP_STX & topacket & "/" & packet_message & "/" & packet_checksum & UCP_ETX End Get End Property '''----------------------------------------------------------------------------- ''' ''' modify packets to be and acknowledgement on an operation. ''' ''' Did we succesfullt understand and operated the operation = ''' Custom messages to system ''' If an error, suply error number here ''' use this to reply to operation requests from SMSC. typecaly SMS receipts ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub acknowledgement(ByVal posetive As Boolean, ByVal SystemMessage As String, Optional ByVal Errorcode As Error_code = 0) is_Operation_or_Request = enumOR.Request If posetive Then packet_message_ACK = "A" packet_message_MVP = "" packet_message_SM = SystemMessage Else packet_message_ACK = "N" packet_message_EC = Errorcode packet_message_SM = SystemMessage End If End Sub '''----------------------------------------------------------------------------- ''' Most SMSC requere login. This creates and authentication packets by using management operations. ''' ''' ''' dont send this, id SMSC dont requere you to logon ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub CreateLoginPacket(ByVal uid As String, ByVal password As String) Operation = enumOT.Session_management_operation packet_message_OAdC = uid packet_message_OTON = "6" packet_message_ONPI = "5" packet_message_STYP = "1" '1 = open session '2 = reserved '3 = change password '4 = open provisioning session '5 = reserved '6 = change provisioning password packet_message_PWD = StrToIA5(password) packet_message_VERS = "0100" ' Version number ‘0100' i.flg doc End Sub '''----------------------------------------------------------------------------- ''' ALL UCP complaint devices understand this simple code 31 operation messages. use this to send simple sms messages. ''' ''' who is SMS from ''' who is SMS to ''' The alpha numeric messages ''' we allways presume aphanumeric. pages will not accept this, but hey. buy a new device then. ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub CreateSimpleSMSpacket( _ ByVal from As String, ByVal sto As String, _ ByVal msg As String) Operation = enumOT.SMS_message_transfer_operation packet_message_OAdC = from packet_message_AdC = sto packet_message_AMsg = StrToIA5(msg) End Sub '''----------------------------------------------------------------------------- ''' Overload function to simplyfy sending SMS throug code 51 operation ''' ''' who is sms from ''' who is sms to ''' The alpha numeric messages ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub Create_Submit_AlphaNum_SMS( _ ByVal from As String, ByVal sto As String, _ ByVal msg As String, ByVal FlashSMS As Boolean) Create_Submit_AlphaNum_SMS(from, sto, msg, FlashSMS, False, "", New Notification_Type, Notification_PID.Mobile_Station) End Sub '''----------------------------------------------------------------------------- ''' ''' ''' ''' ''' who is sms from ''' who is sms to ''' The alpha numeric messages ''' request notification on messages ''' leave blank for senders number ''' what kind of mesages notifications do we want ''' what type of device is the receivere of the notifications ''' ''' ''' [bofh] 06-02-2003 Created ''' '''----------------------------------------------------------------------------- Public Sub Create_Submit_AlphaNum_SMS( _ ByVal from As String, ByVal sto As String, _ ByVal msg As String, _ ByVal FlashSMS As Boolean, _ ByVal notification As Boolean, _ ByVal notificationAddr As String, _ ByVal NotificationType As Notification_Type, _ ByVal NotificationPID As Notification_PID) Operation = enumOT.Submit_short_message 'packet_message_ packet_message_OAdC = from packet_message_AdC = sto packet_message_MT = "3" packet_message_NB = "" ' should this be set for non DT packets ? packet_message_AMsg = StrToIA5(msg) If FlashSMS Then packet_message_MCLs = "0" End If If notification Then packet_message_NT = NotificationType.value '0 = NAdC not used '1 = NAdC used If notificationAddr = "" Then packet_message_NRq = "0" Else packet_message_NRq = "1" packet_message_NAdC = notificationAddr packet_message_NPID = NotificationPID If packet_message_NPID.Length < 4 Then ' its allways 3, so .... packet_message_NPID = "0" & packet_message_NPID End If End If End If End Sub ' Operation message fields Private packet_message_AdC As String = "" Private packet_message_OAdC As String = "" Private packet_message_AC As String = "" Private packet_message_NRq As String = "" Private packet_message_NAd As String = "" Private packet_message_NPID As String = "" Private packet_message_DD As String = "" Private packet_message_DDT As String = "" Private packet_message_VP As String = "" Private packet_message_AMsg As String = "" ' 51 Submit Short Messages operation specefik fields 'Private packet_message_AdC As String = "" 'Private packet_message_OAdC As String = "" 'Private packet_message_AC As String = "" 'Private packet_message_NRq As String = "" Private packet_message_NAdC As String = "" Private packet_message_NT As String = "" 'Private packet_message_NPID As String = "" Private packet_message_LRq As String = "" Private packet_message_LRAd As String = "" Private packet_message_LPID As String = "" 'Private packet_message_DD As String = "" 'Private packet_message_DDT As String = "" 'Private packet_message_VP As String = "" Private packet_message_RPID As String = "" Private packet_message_SCTS As String = "" Private packet_message_Dst As String = "" Private packet_message_Rsn As String = "" Private packet_message_DSCTS As String = "" Private packet_message_MT As String = "" Private packet_message_NB As String = "" Private packet_message_NMsg As String = "" ' Numeric message 'Private packet_message_AMsg As String = "" ' Alpha numeric massega Private packet_message_TMsg As String = "" ' Transparent Data message Private packet_message_MMS As String = "" Private packet_message_PR As String = "" Private packet_message_DCs As String = "" Private packet_message_MCLs As String = "" Private packet_message_RPI As String = "" Private packet_message_CPg As String = "" Private packet_message_RPLy As String = "" Private packet_message_OTOA As String = "" Private packet_message_HPLMN As String = "" Private packet_message_XSer As String = "" Private packet_message_RES4 As String = "" Private packet_message_RES5 As String = "" ' &0 Series messages fields 'OAdC 'Address code originator 'OTON ' Originator Type of Number Private packet_message_OTON As String = "" 'ONPI ' Originator Numbering Plan Id Private packet_message_ONPI As String = "" 'STYP ' Subtype of operation Private packet_message_STYP As String = "" 'PWD ' Current password encoded into IA5 characters Private packet_message_PWD As String = "" 'NPWD ' New password encoded into IA5 characters Private packet_message_NPWD As String = "" 'VERS ' Version number Private packet_message_VERS As String = "" 'LAdC ' Address for VSMSC list operation Private packet_message_LAdC As String = "" 'LTON ' Type of Number list address Private packet_message_LTON As String = "" 'LNPI ' Numbering Plan Id list address Private packet_message_LNPI As String = "" 'OPID ' Originator Protocol Identifier Private packet_message_OPID As String = "" 'RES1 ' (reserved for future use) Private packet_message_RES1 As String = "" ' Response message fields Private packet_message_ACK As String = "" Private packet_message_MVP As String = "" ' Positive or negative acknowledgement text Private packet_message_SM As String = "" ' if ACK = A = Positive acknowledgement Private packet_message_SM_AdC As String = "" Private packet_message_SM_SCTC As String = "" Private packet_message_EC As String = "" ' Call input Operation 'Private packet_message_MT As String = "" End Class