示例#1
0
        // Parses incomming message, determines IP version and then if the
        // message is operational forwards it to Etic batch mode that will
        // then forward messages the specified destination
        private void ParseAndForwardData(byte[] byteData, int nReceived)
        {
            TreeNode           rootNode = new TreeNode();
            Common_Header_Data ipHeader = new Common_Header_Data();
            IPHeader_IPV4      ipHeader_IPV4;

            if (!Is_IPV6)
            {
                ipHeader_IPV4 = new IPHeader_IPV4(byteData, nReceived);
                ipHeader.Data = ipHeader_IPV4.Data;
                ipHeader.DestinationAddress = ipHeader_IPV4.DestinationAddress;
                ipHeader.SourceAddress      = ipHeader_IPV4.SourceAddress;
                ipHeader.ProtocolType       = ipHeader_IPV4.ProtocolType;
                ipHeader.MessageLength      = ipHeader_IPV4.MessageLength;
            }
            else
            {
                // In .NET for IPV6 no header data is provided
                // so we just take in TCP part.
                ipHeader.Data          = byteData;
                ipHeader.MessageLength = (ushort)nReceived;
                ipHeader.ProtocolType  = Protocol.TCP;
            }

            // Only process TCP
            if (ipHeader.ProtocolType == Protocol.TCP)
            {
                TCPHeader tcpHeader = new TCPHeader(ipHeader.Data,           //IPHeader.Data stores the data being carried by the IP datagram
                                                    ipHeader.MessageLength); //Length of the data field

                // Make sure the data is belongs to the FMTP specifed port (usually 8500)
                if (tcpHeader.SourcePort == Properties.Settings.Default.SourcePort || tcpHeader.DestinationPort == Properties.Settings.Default.SourcePort)
                {
                    // Parse the data in order to determine data validity and message type
                    //  { Operational, Operator, Identification, System }
                    FMTP_Parser.FMPT_Header_and_Data FMTP_Data = FMTP_Parser.FMTP_Msg_Parser(tcpHeader.Data);

                    if (FMTP_Data.Valid_FMTP_Data)
                    {
                        string Source;
                        string Destination;

                        if (tcpHeader.SourcePort == Properties.Settings.Default.SourcePort)
                        {
                            Source      = Properties.Settings.Default.Sender;
                            Destination = Properties.Settings.Default.Receiver;
                        }
                        else
                        {
                            Destination = Properties.Settings.Default.Sender;
                            Source      = Properties.Settings.Default.Receiver;
                        }

                        switch (FMTP_Data.msg_type)
                        {
                        case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Operational:

                            bool Filter_By_Sender_Passed = true;

                            // Check if fiter by sender name is enabled
                            if (this.checkBoxFilterBySender.Checked)
                            {
                                if (OLDI_Decoder.Sender_Name(FMTP_Data.msg_content) != Properties.Settings.Default.Sender)
                                {
                                    Filter_By_Sender_Passed = false;
                                }
                            }

                            if (Filter_By_Sender_Passed)
                            {
                                // Check if Auto forward to ETIC is requested
                                if (this.radioButtonClient.Checked && (Source == Properties.Settings.Default.Receiver))
                                {
                                    ETIC_Forwarder.Forward_To_ETIC_Operational_Msg(FMTP_Data.msg_content);
                                }
                                else if (this.radioButtonServer.Checked && Source == Properties.Settings.Default.Sender)
                                {
                                    ETIC_Forwarder.Forward_To_ETIC_Operational_Msg(FMTP_Data.msg_content);
                                }
                            }

                            if (Properties.Settings.Default.Show_Operational)
                            {
                                Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                            }
                            break;

                        case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Identification:
                            if (Properties.Settings.Default.Show_Identification)
                            {
                                Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                            }
                            break;

                        case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Operator:
                            if (Properties.Settings.Default.Show_Operator)
                            {
                                Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                            }
                            break;

                        case FMTP_Parser.FMPT_Header_and_Data.Message_Type.System:
                            if (Properties.Settings.Default.Show_System)
                            {
                                Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                            }
                            break;
                        }
                    }
                }
            }
        }
        // Parses incomming message, determines IP version and then if the
        // message is operational forwards it to Etic batch mode that will
        // then forward messages the specified destination
        private void ParseAndForwardData(byte[] byteData, int nReceived)
        {
            TreeNode rootNode = new TreeNode();
            Common_Header_Data ipHeader = new Common_Header_Data();
            IPHeader_IPV4 ipHeader_IPV4;

            if (!Is_IPV6)
            {
                ipHeader_IPV4 = new IPHeader_IPV4(byteData, nReceived);
                ipHeader.Data = ipHeader_IPV4.Data;
                ipHeader.DestinationAddress = ipHeader_IPV4.DestinationAddress;
                ipHeader.SourceAddress = ipHeader_IPV4.SourceAddress;
                ipHeader.ProtocolType = ipHeader_IPV4.ProtocolType;
                ipHeader.MessageLength = ipHeader_IPV4.MessageLength;
            }
            else
            {
                // In .NET for IPV6 no header data is provided
                // so we just take in TCP part.
                ipHeader.Data = byteData;
                ipHeader.MessageLength = (ushort)nReceived;
                ipHeader.ProtocolType = Protocol.TCP;
            }

            // Only process TCP
            if (ipHeader.ProtocolType == Protocol.TCP)
            {
                TCPHeader tcpHeader = new TCPHeader(ipHeader.Data,//IPHeader.Data stores the data being carried by the IP datagram
                                                    ipHeader.MessageLength);//Length of the data field

                // Make sure the data is belongs to the FMTP specifed port (usually 8500)
                if (tcpHeader.SourcePort == Properties.Settings.Default.SourcePort || tcpHeader.DestinationPort == Properties.Settings.Default.SourcePort)
                {
                    // Parse the data in order to determine data validity and message type
                    //  { Operational, Operator, Identification, System }
                    FMTP_Parser.FMPT_Header_and_Data FMTP_Data = FMTP_Parser.FMTP_Msg_Parser(tcpHeader.Data);

                    if (FMTP_Data.Valid_FMTP_Data)
                    {
                        string Source;
                        string Destination;

                        if (tcpHeader.SourcePort == Properties.Settings.Default.SourcePort)
                        {
                            Source = Properties.Settings.Default.Sender;
                            Destination = Properties.Settings.Default.Receiver;

                        }
                        else
                        {
                            Destination = Properties.Settings.Default.Sender;
                            Source = Properties.Settings.Default.Receiver;
                        }

                        switch (FMTP_Data.msg_type)
                        {
                            case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Operational:

                                bool Filter_By_Sender_Passed = true;

                                // Check if fiter by sender name is enabled
                                if (this.checkBoxFilterBySender.Checked)
                                {
                                    if (OLDI_Decoder.Sender_Name(FMTP_Data.msg_content) != Properties.Settings.Default.Sender)
                                        Filter_By_Sender_Passed = false;
                                }

                                if (Filter_By_Sender_Passed)
                                {
                                    // Check if Auto forward to ETIC is requested
                                    if (this.radioButtonClient.Checked && (Source == Properties.Settings.Default.Receiver))
                                        ETIC_Forwarder.Forward_To_ETIC_Operational_Msg(FMTP_Data.msg_content);
                                    else if (this.radioButtonServer.Checked && Source == Properties.Settings.Default.Sender)
                                        ETIC_Forwarder.Forward_To_ETIC_Operational_Msg(FMTP_Data.msg_content);
                                }

                                if (Properties.Settings.Default.Show_Operational)
                                    Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                                break;
                            case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Identification:
                                if (Properties.Settings.Default.Show_Identification)
                                    Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                                break;
                            case FMTP_Parser.FMPT_Header_and_Data.Message_Type.Operator:
                                if (Properties.Settings.Default.Show_Operator)
                                    Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                                break;
                            case FMTP_Parser.FMPT_Header_and_Data.Message_Type.System:
                                if (Properties.Settings.Default.Show_System)
                                    Build_Tree_View(rootNode, FMTP_Data, Source, Destination);
                                break;
                        }
                    }
                }
            }
        }