/// <summary>sends SETQUOTA command</summary>
        /// <remarks>valid in authenticated/selected state (undocumented)</remarks>
        public ImapCommandResult SetQuota(string quotaRoot, ImapQuotaResource[] resourceLimits, out ImapQuota changedQuota)
        {
            if (quotaRoot == null)
            throw new ArgumentNullException("quotaRoot");
              if (resourceLimits == null)
            throw new ArgumentNullException("resourceLimits");

              var listOfResourceLimits = new List<ImapString>(resourceLimits.Length * 2);

              foreach (var resourceLimit in resourceLimits) {
            if (resourceLimit == null)
              throw new ArgumentException("contains null", "resourceLimits");

            listOfResourceLimits.Add(resourceLimit.Name);
            listOfResourceLimits.Add(resourceLimit.Limit.ToString());
              }

              RejectNonAuthenticatedState();

              changedQuota = null;

              using (var t = new SetQuotaTransaction(connection)) {
            // quota root
            t.RequestArguments["quota root"] = new ImapQuotedString(quotaRoot);
            // list of resource limits
            t.RequestArguments["list of resource limits"] = new ImapParenthesizedString(listOfResourceLimits.ToArray());

            if (ProcessTransaction(t).Succeeded)
              changedQuota = t.Result.Value;

            return t.Result;
              }
        }
 /// <summary>sends SETQUOTA command</summary>
 /// <remarks>valid in authenticated/selected state (undocumented)</remarks>
 public ImapCommandResult SetQuota(string quotaRoot, string resourceName, long resourceLimit, out ImapQuota changedQuota)
 {
     return SetQuota(quotaRoot, new[] {new ImapQuotaResource(resourceName, resourceLimit)}, out changedQuota);
 }
 /// <summary>sends SETQUOTA command</summary>
 /// <remarks>valid in authenticated/selected state (undocumented)</remarks>
 public ImapCommandResult SetQuota(string quotaRoot, ImapQuotaResource resourceLimit, out ImapQuota changedQuota)
 {
     return SetQuota(quotaRoot, new[] {resourceLimit}, out changedQuota);
 }
        /// <summary>sends GETQUOTA command</summary>
        /// <remarks>valid in authenticated/selected state (undocumented)</remarks>
        public ImapCommandResult GetQuota(string quotaRoot, out ImapQuota quota)
        {
            if (quotaRoot == null)
            throw new ArgumentNullException("quotaRoot");

              RejectNonAuthenticatedState();

              quota = null;

              using (var t = new GetQuotaTransaction(connection)) {
            // quota root
            t.RequestArguments["quota root"] = new ImapQuotedString(quotaRoot);

            if (ProcessTransaction(t).Succeeded)
              quota = t.Result.Value;

            return t.Result;
              }
        }