Example #1
0
        //PROPFIND
        public int PropFind()
        {
            if (_webDavKind == WebDavKind.Non)
            {
                return(500);
            }

            if (_targetKind == TargetKind.Non)
            {
                return(404);
            }

            if (_depth == Depth.Null)
            {
                _depth = Depth.DepthInfinity;//指定されない場合は、「infinity」とする RFC2518(8.1 PROPFIND)
            }
            const int responseCode = 207;

            //PROPFINDの情報を蓄積してレスポンスを生成するクラス
            var propFindResponce = new PropFindResponce(_webDavDb);

            //if(target.Kind == TARGET_KIND.DIR) {//1コレクションのプロパテイ値の取得
            if (_targetKind == TargetKind.Dir)  //1コレクションのプロパテイ値の取得
            {
                const bool isCollection = true; //コレクション
                var        di           = new DirectoryInfo(_fullPath);
                propFindResponce.Add(isCollection,
                                     di.Name,
                                     _hrefHost,
                                     _hrefUri,
                                     "", //contentType
                                     "", //etag
                                     0,  //Directoryのサイズは0で初期化する
                                     di.CreationTime,
                                     di.LastWriteTime);
                if (_depth != Depth.Depth0)
                {
                    //直下のリソースのプロパテイ値の取得
                    FindAll(propFindResponce, _depth, _hrefHost, _hrefUri, _fullPath, _useEtag);
                }
            }
            else                                 //1リソースのプロパテイ値の取得
            {
                const bool isCollection = false; //非コレクション
                var        info         = new FileInfo(_fullPath);
                propFindResponce.Add(isCollection,
                                     info.Name,
                                     _hrefHost,
                                     _hrefUri,
                                     _contentType.Get(_fullPath),
                                     _useEtag ? WebServerUtil.Etag(info) : "",
                                     info.Length,
                                     info.CreationTime,
                                     info.LastWriteTime);
            }
            //レスポンス作成
            _document.CreateFromXml(propFindResponce.ToString());
            return(responseCode);
        }
Example #2
0
        //階層下リソースのプロパティ値の取得
        void FindAll(PropFindResponce propFindResponce, Depth depth, string hrefHost, string hrefUri, string path, bool useEtag)
        {
            if (hrefUri.Length > 1 && hrefUri[hrefUri.Length - 1] != '/')
            {
                hrefUri = hrefUri + "/";
            }
            var di           = new DirectoryInfo(path);
            var isCollection = true;

            foreach (DirectoryInfo info in di.GetDirectories("*.*"))
            {
                propFindResponce.Add(isCollection,
                                     info.Name,
                                     hrefHost,
                                     hrefUri + info.Name + "/",
                                     "", //contentType
                                     "", //etag
                                     0,  //Directoryのサイズは0で初期化する
                                     info.CreationTime,
                                     info.LastWriteTime);
                if (depth == Depth.DepthInfinity)
                {
                    //さらに階層下を再帰処理
                    string newPath = path + info.Name;
                    if (path[path.Length - 1] != '\\')
                    {
                        newPath = path + "\\" + info.Name;
                    }
                    FindAll(propFindResponce, depth, hrefHost, hrefUri + info.Name + "/", newPath, useEtag);
                }
            }
            isCollection = false;
            foreach (FileInfo info in di.GetFiles("*.*"))
            {
                propFindResponce.Add(isCollection,
                                     info.Name,
                                     hrefHost,
                                     hrefUri + info.Name,
                                     _contentType.Get(info.Name),
                                     useEtag ? WebServerUtil.Etag(info) : "", //Etag
                                     info.Length,
                                     info.CreationTime,
                                     info.LastWriteTime);
            }
        }
Example #3
0
 //階層下リソースのプロパティ値の取得
 void FindAll(PropFindResponce propFindResponce, Depth depth, string hrefHost, string hrefUri, string path, bool useEtag)
 {
     if (hrefUri.Length > 1 && hrefUri[hrefUri.Length - 1] != '/') {
         hrefUri = hrefUri + "/";
     }
     var di = new DirectoryInfo(path);
     var isCollection = true;
     foreach (DirectoryInfo info in di.GetDirectories("*.*")) {
         propFindResponce.Add(isCollection,
             info.Name,
             hrefHost,
             hrefUri + info.Name + "/",
             "", //contentType
             "", //etag
             0, //Directoryのサイズは0で初期化する
             info.CreationTime,
             info.LastWriteTime);
         if (depth == Depth.DepthInfinity) {
             //さらに階層下を再帰処理
             string newPath = path + info.Name;
             if (path[path.Length - 1] != '\\')
                 newPath = path + "\\" + info.Name;
             FindAll(propFindResponce, depth, hrefHost, hrefUri + info.Name + "/", newPath, useEtag);
         }
     }
     isCollection = false;
     foreach (FileInfo info in di.GetFiles("*.*")) {
         propFindResponce.Add(isCollection,
             info.Name,
             hrefHost,
             hrefUri + info.Name,
             _contentType.Get(info.Name),
             useEtag ? WebServerUtil.Etag(info) : "", //Etag
             info.Length,
             info.CreationTime,
             info.LastWriteTime);
     }
 }
Example #4
0
        //PROPFIND
        public int PropFind()
        {
            if (_webDavKind == WebDavKind.Non)
                return 500;

            if (_targetKind == TargetKind.Non)
                return 404;

            if (_depth == Depth.Null)
                _depth = Depth.DepthInfinity;//指定されない場合は、「infinity」とする RFC2518(8.1 PROPFIND)

            const int responseCode = 207;

            //PROPFINDの情報を蓄積してレスポンスを生成するクラス
            var propFindResponce = new PropFindResponce(_webDavDb);

            //if(target.Kind == TARGET_KIND.DIR) {//1コレクションのプロパテイ値の取得
            if (_targetKind == TargetKind.Dir) { //1コレクションのプロパテイ値の取得
                const bool isCollection = true; //コレクション
                var di = new DirectoryInfo(_fullPath);
                propFindResponce.Add(isCollection,
                    di.Name,
                    _hrefHost,
                    _hrefUri,
                    "", //contentType
                    "", //etag
                    0, //Directoryのサイズは0で初期化する
                    di.CreationTime,
                    di.LastWriteTime);
                if (_depth != Depth.Depth0) {
                    //直下のリソースのプロパテイ値の取得
                    FindAll(propFindResponce, _depth, _hrefHost, _hrefUri, _fullPath, _useEtag);
                }
            } else { //1リソースのプロパテイ値の取得
                const bool isCollection = false; //非コレクション
                var info = new FileInfo(_fullPath);
                propFindResponce.Add(isCollection,
                    info.Name,
                    _hrefHost,
                    _hrefUri,
                    _contentType.Get(_fullPath),
                    _useEtag ? WebServerUtil.Etag(info) : "",
                    info.Length,
                    info.CreationTime,
                    info.LastWriteTime);
            }
            //レスポンス作成
            _document.CreateFromXml(propFindResponce.ToString());
            return responseCode;
        }