SharpCifs.Smb.SmbFile.DoNetServerEnum C# (CSharp) Method

DoNetServerEnum() private method

private DoNetServerEnum ( List list, bool files, string wildcard, int searchAttributes, ISmbFilenameFilter fnf, ISmbFileFilter ff ) : void
list List
files bool
wildcard string
searchAttributes int
fnf ISmbFilenameFilter
ff ISmbFileFilter
return void
        internal virtual void DoNetServerEnum(List<object> list, bool files, string wildcard
            , int searchAttributes, ISmbFilenameFilter fnf, ISmbFileFilter ff)
        {
            int listType = Url.GetHost().Length == 0 ? 0 : GetType();
            SmbComTransaction req;
            SmbComTransactionResponse resp;
            if (listType == 0)
            {
                Connect0();
                req = new NetServerEnum2(Tree.Session.transport.Server.OemDomainName, NetServerEnum2
                    .SvTypeDomainEnum);
                resp = new NetServerEnum2Response();
            }
            else
            {
                if (listType == TypeWorkgroup)
                {
                    req = new NetServerEnum2(Url.GetHost(), NetServerEnum2.SvTypeAll);
                    resp = new NetServerEnum2Response();
                }
                else
                {
                    throw new SmbException("The requested list operations is invalid: " + Url);
                }
            }
            bool more;
            do
            {
                int n;
                Send(req, resp);
                if (resp.Status != WinError.ErrorSuccess && resp.Status != WinError.ErrorMoreData)
                {
                    throw new SmbException(resp.Status, true);
                }
                more = resp.Status == WinError.ErrorMoreData;
                n = more ? resp.NumEntries - 1 : resp.NumEntries;
                for (int i = 0; i < n; i++)
                {
                    IFileEntry e = resp.Results[i];
                    string name = e.GetName();
                    if (fnf != null && fnf.Accept(this, name) == false)
                    {
                        continue;
                    }
                    if (name.Length > 0)
                    {
                        // if !files we don't need to create SmbFiles here
                        SmbFile f = new SmbFile(this, name, e.GetType(), AttrReadonly
                             | AttrDirectory, 0L, 0L, 0L);
                        if (ff != null && ff.Accept(f) == false)
                        {
                            continue;
                        }
                        if (files)
                        {
                            list.Add(f);
                        }
                        else
                        {
                            list.Add(name);
                        }
                    }
                }
                if (GetType() != TypeWorkgroup)
                {
                    break;
                }
                req.SubCommand = unchecked(SmbComTransaction.NetServerEnum3);
                req.Reset(0, ((NetServerEnum2Response)resp).LastName);
                resp.Reset();
            }
            while (more);
        }