Ejemplo n.º 1
0
 private void Ready(int StatusCode, string StatusLine)
 {
     SocketStatus = NNTPStatus.Singleline;
     if (Connected != null)
     {
         Connected(StatusCode, StatusLine, this);
     }
 }
Ejemplo n.º 2
0
        public bool Connect()
        {
            try
            {
                if (iConnection.Cancelled)
                {
                    return(false);
                }

                if (SocketStatus == NNTPStatus.Multiline)
                {
                    SocketStatus = NNTPStatus.Singleline;
                }

                if (SocketStatus == NNTPStatus.Singleline)
                {
                    Ready(0, "");
                    return(true);
                }

                SocketStatus = NNTPStatus.Connecting;

                if (iSocket == null)
                {
                    if (!iServer.SSL)
                    {
                        iSocket = new Socket();
                    }
                    else
                    {
                        iSocket = new SSLSocket();
                    }

                    iSocket.Received     += new EventHandler <WorkArgs>(iReceived);
                    iSocket.Connected    += new EventHandler <WorkArgs>(iConnected);
                    iSocket.Disconnected += new EventHandler <WorkArgs>(iDisconnected);
                }

                return(iSocket.Connect(iServer));
            }
            catch (Exception ex)
            {
                Disconnect(996, ex.Message, false);
                return(false);
            }
        }
Ejemplo n.º 3
0
        private void iDisconnected(object sender, WorkArgs e)
        {
            iSocket      = null;
            SocketStatus = NNTPStatus.Closed;

            //Debug.WriteLine("iDisconnected: " + e.Message);

            try
            {
                if ((e != null) && (Failed != null))
                {
                    Failed(e.Code, e.Message, iServer.Log, this);
                }
            }
            catch { }

            if (Closed != null)
            {
                Closed(this);
            }
        }
Ejemplo n.º 4
0
        private void Process(int NNTPCode, Stream bData)
        {
            string sHeader = "Binary (" + bData.Length + " bytes)";

            if (SocketStatus != NNTPStatus.Multiline)
            {
                sHeader = Common.GetReader(bData).ReadLine();
            }

            //iServer.WriteDebug(Module.VbLeft((Convert.ToString(NNTPCode) + "000"), 3), sHeader);

            if ((NNTPCode == (int)NNTPCodes.GoodBye) || (iConnection.Cancelled) || (NNTPCode == 512))
            {
                if (NNTPCode <= 0)
                {
                    NNTPCode = 991;
                }
                Disconnect(NNTPCode, sHeader, iConnection.Cancelled);
                return;
            }

            switch (SocketStatus)
            {
            case NNTPStatus.Connecting:

                switch (NNTPCode)
                {
                case (int)NNTPCodes.PostingAllowed:
                case (int)NNTPCodes.PostingDisallowed:

                    StatusLine   = sHeader;
                    SocketStatus = NNTPStatus.Authenticating;
                    SendLines("MODE READER");
                    return;

                default:

                    if (NNTPCode <= 0)
                    {
                        NNTPCode = 991;
                    }
                    Disconnect(NNTPCode, sHeader, true);
                    break;
                }

                break;

            case NNTPStatus.Authenticating:

                switch (NNTPCode)
                {
                case (int)NNTPCodes.Authenticated1:
                case (int)NNTPCodes.Authenticated2:

                    Ready(NNTPCode, StatusLine);
                    break;

                case (int)NNTPCodes.MoreAuthentication:

                    SendLines("AUTHINFO PASS " + iServer.Password);
                    break;

                case (int)NNTPCodes.PostingAllowed:
                case (int)NNTPCodes.PostingDisallowed:

                    if (iServer.Username.Trim().Length == 0)
                    {
                        Ready(NNTPCode, StatusLine);
                    }
                    else
                    {
                        SendLines("AUTHINFO USER " + iServer.Username);
                    }
                    break;

                case (int)NNTPCodes.AuthRequired:
                case (int)NNTPCodes.TransferDenied:

                    SendLines("AUTHINFO USER " + iServer.Username);
                    break;

                case (int)NNTPCodes.AuthRejected:
                case (int)NNTPCodes.AuthFailed1:
                case (int)NNTPCodes.AuthFailed2:

                default:

                    if (NNTPCode <= 0)
                    {
                        NNTPCode = 991;
                    }
                    Disconnect(NNTPCode, sHeader, true);
                    break;
                }

                break;

            case NNTPStatus.Singleline:

                if (Response != null)
                {
                    Response(NNTPCode, sHeader, this);
                }
                break;

            case NNTPStatus.Multiline:

                if (Received != null)
                {
                    Received(bData, this);
                }
                break;

            default:
                Disconnect(993, "Status", true);
                break;
            }
        }
Ejemplo n.º 5
0
        private void iReceived(object sender, WorkArgs e)
        {
            string sBOF = "";
            string sEOF = "";

            byte lBOFLength = 3;
            byte lEOFLength = 5;

            bool bFinished = false;

            try
            {
                if (SocketStatus != NNTPStatus.Multiline)
                {
                    if (e.Data.Length >= lBOFLength)
                    {
                        sBOF = Common.GetBOF(e.Data, lBOFLength);

                        StatusCode = Common.GetCode(sBOF);

                        switch (StatusCode)
                        {
                        case (int)NNTPCodes.GroupsFollow:
                        case (int)NNTPCodes.XINDEXFollows:
                        case (int)NNTPCodes.ArticleFollows:
                        case (int)NNTPCodes.HeadFollows:
                        case (int)NNTPCodes.BodyFollows:
                        case (int)NNTPCodes.StatFollows:
                        case (int)NNTPCodes.XOVERFollows:
                        case (int)NNTPCodes.NewNewsFollows:
                        case (int)NNTPCodes.XGTITLEFollows:
                        case (int)NNTPCodes.XTHREADFollows:

                            SocketStatus = NNTPStatus.Multiline;
                            break;
                        }
                    }
                }

                int lPos = Convert.ToInt32(e.Data.Length - lEOFLength);

                if (lPos >= 0)
                {
                    sEOF = Common.GetEOF(e.Data, lEOFLength);

                    switch (SocketStatus)
                    {
                    case NNTPStatus.Multiline:

                        bFinished = (sEOF == (Environment.NewLine + "." + Environment.NewLine));
                        break;

                    default:

                        bFinished = (Common.VbRight(sEOF, 2) == Environment.NewLine);
                        break;
                    }
                }

                if (!bFinished)
                {
                    Receive();
                    return;
                }

                e.Data.Seek(0, SeekOrigin.Begin);
                Process(StatusCode, e.Data);
            }
            catch (Exception ex)
            {
                Disconnect(992, "Received: " + ex.Message, false);
            }
        }