Example #1
0
        /// <summary>
        /// Processes the list of rate limitations -- SNAC(01,07)
        /// </summary>
        /// <param name="dp">A <see cref="DataPacket"/> object containing SNAC(01,07)</param>
        public static void ProcessRateLimitations(DataPacket dp)
        {
            Session sess = dp.ParentSession;

            ushort    num_classes = dp.Data.ReadUshort();
            Hashtable rcs         = new Hashtable();

            ushort[] classes = new ushort[num_classes];

            RateClassManager rcm = sess.RateClasses;

            // Get the rate class attributes out of the SNAC
            for (int i = 0; i < num_classes; i++)
            {
                ushort    id = dp.Data.ReadUshort();
                RateClass rc = sess.RateClasses.GetByID(id);
                rc.WindowSize      = dp.Data.ReadUint();
                rc.ClearLevel      = dp.Data.ReadUint();
                rc.AlertLevel      = dp.Data.ReadUint();
                rc.LimitLevel      = dp.Data.ReadUint();
                rc.DisconnectLevel = dp.Data.ReadUint();
                rc.CurrentLevel    = dp.Data.ReadUint();
                rc.MaxLevel        = dp.Data.ReadUint();
                if (dp.ParentSession.Families.GetFamilyVersion(0x0001) >= 3)
                {
                    rc.LastTime     = dp.Data.ReadUint();
                    rc.CurrentState = dp.Data.ReadByte();
                }
                sess.RateClasses.SetByID(id, rc);
                rc.StartLimitedTransmission();

                classes[i] = id;
            }

            // Register rates with the session's ConnectionList
            for (int i = 0; i < num_classes; i++)
            {
                ushort id        = dp.Data.ReadUshort();
                ushort num_pairs = dp.Data.ReadUshort();

                for (int j = 0; j < num_pairs; j++)
                {
                    ushort family  = dp.Data.ReadUshort();
                    ushort subtype = dp.Data.ReadUshort();
                    rcm.SetRateClassKey(family, subtype, id);
                }
            }

            AcknowledgeRateLimitations(dp, classes);
        }
Example #2
0
        /// <summary>
        /// Create a new OSCAR session
        /// </summary>
        /// <param name="screenname">The screenname to log in</param>
        /// <param name="password">The password associated with the screenname</param>
        /// <exception cref="ArgumentException">Thrown when <paramref name="screenname"/> is not
        /// a valid AIM or ICQ screenname.</exception>
        public Session(string screenname, string password)
        {
            // Check to make sure the screenname is something valid
            if (!ScreennameVerifier.IsValidAIM(screenname) &&
                !ScreennameVerifier.IsValidICQ(screenname))
            {
                throw new ArgumentException(screenname + " is not a valid AIM or ICQ screenname", "screenname");
            }

            // Save parameter values
            _screenname = screenname;
            _password = password;

            connectionManager = new ConnectionManager(this);
            serviceManager = new ServiceManager(this);
            ssiManager = new SSIManager(this);
            icqManager = new IcqManager(this);
            messageManager = new MessageManager(this);
            statusManager = new StatusManager(this);
            chatRoomManager = new ChatRoomManager(this);
            graphicsManager = new GraphicsManager(this);
            authManager = new AuthorizationManager(this);
            searchManager = new SearchManager(this);
            rateManager = new RateClassManager(this);
            statsManager = new UsageStatsManager(this);

            connectionManager.CreateNewConnection(0x0017);

            // Create a default set of capabilities for this session
            SetDefaultIdentification();

            // Set up some default values for public properties
            _publicidletime = true;

            // Set initial values for internal properties
            _loggedin = false;
            _privacy = PrivacySetting.AllowAllUsers;
            _parametercount = 0;
        }