public void DontSplitShortMessage()
        {
            var          messageSplitter = new MessageSplitter(maxMessageLength: 100);
            const string message         = "This message has few enough characters to not get split.";

            Assert.That(
                messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[] { message }));
        }
示例#2
0
 public MainView()
 {
     this.InitializeComponent();
     this.presenter           = new MainPresenter(this);
     this.splitter            = new MessageSplitter();
     this.splitter.OnMessage += splitter_OnMessage;
     this.UpdatePorts();
 }
示例#3
0
        // called from the tcp sniffer, so it needs to lock
        private void HandleTcpDataReceived(TcpConnection connection, ArraySegment <byte> data)
        {
            lock (_eventLock)
            {
                if (data.Count == 0)
                {
                    return;
                }
                if (_isNew.Contains(connection))
                {
                    if (_serversByIp.ContainsKey(connection.Source.Address.ToString()) &&
                        data.Array.Skip(data.Offset).Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 }))
                    {
                        _isNew.Remove(connection);
                        var server = _serversByIp[connection.Source.Address.ToString()];
                        _serverToClient = connection;
                        _clientToServer = null;

                        _decrypter = new ConnectionDecrypter(server.Region);
                        _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted;
                        _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted;

                        _messageSplitter = new MessageSplitter();
                        _messageSplitter.MessageReceived += HandleMessageReceived;
                        OnNewConnection(server);
                    }
                    if (_serverToClient != null && _clientToServer == null &&
                        _serverToClient.Destination.Equals(connection.Source) &&
                        _serverToClient.Source.Equals(connection.Destination))
                    {
                        _isNew.Remove(connection);
                        _clientToServer = connection;
                    }
                }

                if (!(connection == _clientToServer || connection == _serverToClient))
                {
                    return;
                }
                if (_decrypter == null)
                {
                    return;
                }
                var dataArray = data.Array.Skip(data.Offset).Take(data.Count).ToArray();
                if (connection == _clientToServer)
                {
                    _decrypter.ClientToServer(dataArray);
                }
                else
                {
                    _decrypter.ServerToClient(dataArray);
                }
            }
        }
示例#4
0
        public IrcHandler()
        {
            MessageSplitter  = new MessageSplitter();
            ChatConnection   = new IrcConnection();
            BackgroundWorker = new BackgroundWorker();

            BackgroundWorker.WorkerReportsProgress      = true;
            BackgroundWorker.WorkerSupportsCancellation = true;

            BackgroundWorker.DoWork          += new DoWorkEventHandler(ChatConnection.GetMessages);
            BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(ReceiveMessage);
        }
示例#5
0
        private ITrackMessageProvider DownloaderStub()
        {
            var directory  = AppDomain.CurrentDomain.BaseDirectory;
            var htmlSource = File.ReadAllText(
                directory + "/QSP/RouteFinding/Tracks/Nats/North Atlantic Tracks.html");
            var msgs = new MessageSplitter(htmlSource).Split();

            int westIndex = msgs[0].Direction == NatsDirection.West ? 0 : 1;
            int eastIndex = 1 - westIndex;
            var msg       = new NatsMessage(msgs[westIndex], msgs[eastIndex]);

            return(new TrackMessageProvider(msg));
        }
        public void LastSplitPerfectLength()
        {
            var          messageSplitter = new MessageSplitter(maxMessageLength: 25);
            const string message         = "This message's last part fits perfectly without continuation dots";

            Assert.That(
                messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[]
            {
                "This message's last ...",
                "part fits perfectly ...",
                "without continuation dots"
            }));
        }
        public void SplitAtMaxIfNoSpace()
        {
            var          messageSplitter = new MessageSplitter(maxMessageLength: 30);
            const string message         = "This-message-gets-forcefully-split-because-it-has-no-spaces.";

            Assert.That(
                messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[]
            {
                "This-message-gets-forcefull...",
                "y-split-because-it-has-no-s...",
                "paces."
            }));
        }
        public void SplitAtSpace()
        {
            var          messageSplitter = new MessageSplitter(maxMessageLength: 30);
            const string message         = "This message gets split into space-separated parts no longer than 30 chars.";

            Assert.That(
                messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[]
            {
                "This message gets split ...",
                "into space-separated parts ...",
                "no longer than 30 chars."
            }));
        }
示例#9
0
        /// <exception cref="Exception"></exception>
        public List <AusTrack> Parse()
        {
            allTracks = new List <AusTrack>();
            var msgs = MessageSplitter.Split(allTxt);

            if (msgs.Count == 0)
            {
                throw new Exception("Failed to interpret AUSOTS message.");
            }

            foreach (var i in msgs)
            {
                TryAddTrk(i);
            }

            return(allTracks);
        }
示例#10
0
        public void OnlyEastboundExists()
        {
            string html =
                @"<i>- Last updated at 2016/02/02 15:05 GMT</i>
<tr valign=>The following are active North Atlantic Tracks issued by Shanwick Center (EGGX) ...</th></tr>

<font color=""#000099"">
021356 CZQXZQZX
[Message E1]

<font color=""#000099"">
021357 CZQXZQZX
[Message E2]

<font color=""#000099"">
021357 CZQXZQZX
[Message E3]

</td></tr></table>";

            var msg = new MessageSplitter(html).Split();

            Assert.AreEqual(1, msg.Count);
            var west = GetMsg(msg, NatsDirection.West);
            var east = GetMsg(msg, NatsDirection.East);

            Assert.IsTrue(west == null);

            Assert.IsTrue(east.Header ==
                          "The following are active North Atlantic Tracks issued by Shanwick Center (EGGX) ...");
            Assert.IsTrue(east.LastUpdated == "Last updated at 2016/02/02 15:05 GMT");
            Assert.IsTrue(east.Message == @"021356 CZQXZQZX
[Message E1]


021357 CZQXZQZX
[Message E2]


021357 CZQXZQZX
[Message E3]

");
        }
        // called from the tcp sniffer, so it needs to lock
        private void HandleTcpDataReceived(TcpConnection connection, byte[] data, int needToSkip)
        {
            {
                if (data.Length == 0)
                {
                    if (needToSkip == 0 || !(connection == _clientToServer || connection == _serverToClient))
                    {
                        return;
                    }
                    if (_decrypter == null)
                    {
                        return;
                    }
                    if (connection == _clientToServer)
                    {
                        _decrypter.Skip(MessageDirection.ClientToServer, needToSkip);
                    }
                    else
                    {
                        _decrypter.Skip(MessageDirection.ServerToClient, needToSkip);
                    }
                    return;
                }
                if (_isNew.ContainsKey(connection))
                {
                    if (_serversByIp.ContainsKey(connection.Source.Address.ToString()) &&
                        data.Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 }))
                    {
                        byte q;
                        _isNew.TryRemove(connection, out q);
                        var server = _serversByIp[connection.Source.Address.ToString()];
                        _serverToClient = connection;
                        _clientToServer = null;

                        ServerProxyOverhead = (int)connection.BytesReceived;
                        _decrypter          = new ConnectionDecrypter(server.Region);
                        _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted;
                        _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted;

                        _messageSplitter = new MessageSplitter();
                        _messageSplitter.MessageReceived += HandleMessageReceived;
                        _messageSplitter.Resync          += OnResync;
                    }
                    if (_serverToClient != null && _clientToServer == null &&
                        _serverToClient.Destination.Equals(connection.Source) &&
                        _serverToClient.Source.Equals(connection.Destination))
                    {
                        ClientProxyOverhead = (int)connection.BytesReceived;
                        byte q;
                        _isNew.TryRemove(connection, out q);
                        _clientToServer = connection;
                        var server = _serversByIp[connection.Destination.Address.ToString()];
                        OnNewConnection(server);
                    }
                    if (connection.BytesReceived > 0x10000) //if received more bytes but still not recognized - not interesting.
                    {
                        byte q;
                        _isNew.TryRemove(connection, out q);
                        connection.DataReceived -= HandleTcpDataReceived;
                        connection.RemoveCallback();
                    }
                }

                if (!(connection == _clientToServer || connection == _serverToClient))
                {
                    return;
                }
                if (_decrypter == null)
                {
                    return;
                }
                if (connection == _clientToServer)
                {
                    _decrypter.ClientToServer(data, needToSkip);
                }
                else
                {
                    _decrypter.ServerToClient(data, needToSkip);
                }
            }
        }
示例#12
0
        public void SplitMessageTest()
        {
            string str =
                @"20 JANUARY 2016

INTERNATIONAL FLEX TRACKS GROUP A: SOUTH EAST ASIA

TDM TRK MY13 160119233001 
1601192330 1601201400 
JAMOR IBABI LEC CALAR OOD ARNTU LEESA 20S128E SANDY 
15S122E ATMAP 
RTS/YMML ML H164 JAMOR 
RMK/AUSOTS GROUP A
      
TDM TRK KS13 160120120001 
1601201300 1601202300 
SVC TRK KS13 NO TRACK - USE PUBLISHED FIXED ROUTES 
RMK/AUSOTS GROUP A
     
INTERNATIONAL FLEX TRACKS GROUP B: MIDDLE EAST
      
TDM TRK XB13 160120060001 
1601200900 1601202200 
DOGAR DAOVO PIBED CC 15S100E 20S106E JOLLY CAR NIPEM 
LST BOBET 30S132E 30S135E 30S140E IDODA AROLI CRANE 
RTS/CRANE Y94 PARRY Y195 GLENN BN YBBN 
RMK/AUSOTS GROUP B
      
DOMESTIC FLEX TRACKS GROUP E

TDM TRK BP13 160120093001 
1601200930 1601201530 
TAM CV PHONE 28S138E VIRUV 30S131E FRT NSM 
RTS/YBBN BN V179 TAM 
NSM Q10 HAMTN Q158 PH YPPH 
RMK/AUSOTS GROUP E
      ";

            var splitResult = MessageSplitter.Split(str);

            Assert.AreEqual(4, splitResult.Count);

            Assert.IsTrue(splitResult[0] == (@"TDM TRK MY13 160119233001 
1601192330 1601201400 
JAMOR IBABI LEC CALAR OOD ARNTU LEESA 20S128E SANDY 
15S122E ATMAP 
RTS/YMML ML H164 JAMOR 
RMK/AUSOTS GROUP A"));

            Assert.IsTrue(splitResult[1] == (@"TDM TRK KS13 160120120001 
1601201300 1601202300 
SVC TRK KS13 NO TRACK - USE PUBLISHED FIXED ROUTES 
RMK/AUSOTS GROUP A"));

            Assert.IsTrue(splitResult[2] == (@"TDM TRK XB13 160120060001 
1601200900 1601202200 
DOGAR DAOVO PIBED CC 15S100E 20S106E JOLLY CAR NIPEM 
LST BOBET 30S132E 30S135E 30S140E IDODA AROLI CRANE 
RTS/CRANE Y94 PARRY Y195 GLENN BN YBBN 
RMK/AUSOTS GROUP B"));

            Assert.IsTrue(splitResult[3] == (@"TDM TRK BP13 160120093001 
1601200930 1601201530 
TAM CV PHONE 28S138E VIRUV 30S131E FRT NSM 
RTS/YBBN BN V179 TAM 
NSM Q10 HAMTN Q158 PH YPPH 
RMK/AUSOTS GROUP E"));
        }
示例#13
0
        // called from the tcp sniffer, so it needs to lock
        void HandleTcpDataReceived(TcpConnection connection, ArraySegment<byte> data)
        {
            lock (_eventLock)
            {
                if (data.Count == 0)
                    return;
                if (_isNew.Contains(connection))
                {
                    _isNew.Remove(connection);
                    if (_interestingIps.Contains(connection.Source.Address.ToString()) &&
                        data.Array.Skip(data.Offset).Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 }))
                    {
                        _serverToClient = connection;
                        _clientToServer = null;

                        _decrypter = new ConnectionDecrypter();
                        _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted;
                        _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted;

                        _messageSplitter = new MessageSplitter();
                        _messageSplitter.MessageReceived += HandleMessageReceived;
                        OnNewConnection();
                    }
                    if (_serverToClient != null && _clientToServer == null &&
                        (_serverToClient.Destination.Equals(connection.Source) &&
                         _serverToClient.Source.Equals(connection.Destination)))
                    {
                        _clientToServer = connection;
                    }
                }

                if (!(connection == _clientToServer || connection == _serverToClient))
                    return;
                if (_decrypter == null)
                    return;
                var dataArray = data.Array.Skip(data.Offset).Take(data.Count).ToArray();
                if (connection == _clientToServer)
                    _decrypter.ClientToServer(dataArray);
                else
                    _decrypter.ServerToClient(dataArray);
            }
        }