/// <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); }
/// <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; }