Beispiel #1
0
        private void Start()
        {
            try
            {
                Messages.protocol = this;
                Core.SystemForm.Chat.scrollback.InsertText(messages.get("loading-server", Core.SelectedLanguage, new List<string> { this.Server }),
                    Client.ContentLine.MessageStyle.System);

                if (!SSL)
                {
                    _networkStream = new System.Net.Sockets.TcpClient(Server, Port).GetStream();
                    _StreamWriter = new System.IO.StreamWriter(_networkStream);
                    _StreamReader = new System.IO.StreamReader(_networkStream, NetworkEncoding);
                }

                if (SSL)
                {
                    System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient(Server, Port);
                    _networkSsl = new System.Net.Security.SslStream(client.GetStream(), true,
                        new System.Net.Security.RemoteCertificateValidationCallback(Protocol.ValidateServerCertificate), null);
                    _networkSsl.AuthenticateAsClient(Server);
                    _StreamWriter = new System.IO.StreamWriter(_networkSsl);
                    _StreamReader = new System.IO.StreamReader(_networkSsl, NetworkEncoding);
                }

                Hooks._Protocol.BeforeConnect(this);

                Connected = true;

                if (!string.IsNullOrEmpty(Password))
                {
                    Send("PASS " + Password);
                }

                Send("USER " + _IRCNetwork.Ident + " 8 * :" + _IRCNetwork.UserName);
                Send("NICK " + _IRCNetwork.Nickname);

                Core.SystemForm.Status("");

                keep = new Thread(_Ping);
                keep.Name = "pinger thread";
                keep.Start();
                Core.SystemThreads.Add(keep);

            }
            catch (Exception b)
            {
                Core.SystemForm.Chat.scrollback.InsertText(b.Message, Client.ContentLine.MessageStyle.System);
                return;
            }
            string text = "";
            try
            {
                deliveryqueue = new System.Threading.Thread(Messages.Run);
                deliveryqueue.Start();

                while (!_StreamReader.EndOfStream && IsConnected)
                {
                    if (!_IRCNetwork.IsConnected)
                    {
                        _IRCNetwork.flagConnection();
                    }
                    while (Core.IsBlocked)
                    {
                        System.Threading.Thread.Sleep(100);
                    }
                    text = _StreamReader.ReadLine();
                    Core.trafficscanner.Insert(Server, " >> " + text);
                    ProcessorIRC processor = new ProcessorIRC(_IRCNetwork, text, ref pong);
                    processor.ProfiledResult();
                    pong = processor.pong;
                }
            }
            catch (ThreadAbortException)
            {
                return;
            }
            catch (System.Net.Sockets.SocketException)
            {
                SafeDc();
            }
            catch (System.IO.IOException)
            {
                SafeDc();
            }
            catch (Exception ex)
            {
                Core.handleException(ex);
            }
            Core.KillThread(System.Threading.Thread.CurrentThread);
            return;
        }
Beispiel #2
0
            /// <summary>
            /// Data
            /// </summary>
            /// <param name="curr">XmlNode</param>
            /// <param name="protocol">Protocol which owns this request</param>
            public static void sData(XmlNode curr, ProtocolSv protocol)
            {
                long date = 0;
                bool backlog = false;
                bool IsBacklog = false;
                string MQID = null;
                bool range = false;
                string id = "";
                foreach (XmlAttribute xx in curr.Attributes)
                {
                    switch (xx.Name)
                    {
                        case "time":
                            if (!long.TryParse(xx.Value, out date))
                            {
                                Core.DebugLog("Warning: " + xx.Value + " is not a correct time");
                            }
                            break;
                        case "MQID":
                            MQID = xx.Value;
                            break;
                        case "buffer":
                            if (xx.Name == "buffer")
                            {
                                id = xx.Value;
                                backlog = true;
                            }
                            break;
                        case "range":
                            range = true;
                            break;
                    }
                }
                string name = curr.Attributes[0].Value;
                Network server = null;
                server = protocol.retrieveNetwork(name);
                if (server == null)
                {
                    server = new Network(name, protocol);
                    protocol.NetworkList.Add(server);
                    protocol.cache.Add(new Cache());
                    server.Nickname = protocol.nick;
                    server.flagConnection();
                }
                if (Configuration.Services.UsingCache)
                {
                    if (MQID != null)
                    {
                        string UID = protocol.sBuffer.getUID(name);

                        if (UID != null)
                        {
                            protocol.sBuffer.networkInfo[UID].MQID(MQID);
                        }
                    }
                }

                ProcessorIRC processor = null;

                if (backlog || range)
                {
                    if (Core.SystemForm.DisplayingProgress == false)
                    {
                        Core.SystemForm.progress = double.Parse(id);
                        Core.SystemForm.DisplayingProgress = true;
                        protocol.FinishedLoading = false;
                        protocol.SuppressChanges = true;
                        Core.SystemForm.ProgressMax = protocol.cache[protocol.NetworkList.IndexOf(server)].size;
                    }

                    IsBacklog = true;
                    Core.SystemForm.progress = double.Parse(id);
                    Core.SystemForm.Status("Retrieving backlog from " + name + ", got " + id + "/"
                        + protocol.cache[protocol.NetworkList.IndexOf(server)].size.ToString() + " datagrams");
                    if ((protocol.cache[protocol.NetworkList.IndexOf(server)].size - 2) < double.Parse(id))
                    {
                        IsBacklog = false;
                        Core.SystemForm.Status(protocol.getInfo());
                        Core.SystemForm.DisplayingProgress = false;
                        Core.SystemForm.progress = 0;
                        protocol.SuppressChanges = false;
                        if (Configuration.Services.UsingCache && Configuration.Services.MissingFix)
                        {
                            // get all holes we are missing from backlog
                            protocol.sBuffer.retrieveData(name);
                        }
                        foreach (Channel i in server.Channels)
                        {
                            i.TemporarilyHidden = false;
                            i.IsParsingExceptionData = false;
                            i.IsParsingBanData = false;
                            i.IsParsingWhoData = false;
                        }
                    }
                    processor = new ProcessorIRC(server, curr.InnerText, ref protocol.pong, date, false);
                    processor.IsBacklog = IsBacklog;
                    processor.ProfiledResult();
                    return;
                }
                processor = new ProcessorIRC(server, curr.InnerText, ref protocol.pong, date);
                processor.IsBacklog = IsBacklog;
                processor.ProfiledResult();
            }