Пример #1
0
 private bool login(fastCSharp.net.tcp.commandServer.socket client, string user)
 {
     if (user.length() != 0)
     {
         hashString userHash = user;
         bool       isUser   = false;
         Monitor.Enter(userLock);
         try
         {
             if (!users.ContainsKey(userHash))
             {
                 users.Add(userHash, new userInfo {
                     User = user
                 });
                 client.ClientUserInfo = user;
                 ++userVersion;
                 isUser = true;
             }
         }
         finally { Monitor.Exit(userLock); }
         if (isUser)
         {
             if (userChangeHandle == null)
             {
                 userChangeHandle = userChange;
             }
             task.Tiny.Add(userChangeHandle, user);
             return(true);
         }
     }
     return(false);
 }
Пример #2
0
        private void logout(fastCSharp.net.tcp.commandServer.socket client)
        {
            string     user = (string)client.ClientUserInfo;
            userInfo   userInfo;
            hashString userHash = user;

            Monitor.Enter(userLock);
            try
            {
                if (users.TryGetValue(userHash, out userInfo))
                {
                    users.Remove(userHash);
                }
                ++userVersion;
            }
            finally { Monitor.Exit(userLock); }
            if (userInfo != null)
            {
                if (userChangeHandle == null)
                {
                    userChangeHandle = userChange;
                }
                task.Tiny.Add(userChangeHandle, null);
                if (OnLogout != null)
                {
                    task.Tiny.Add(OnLogout, user);
                }
            }
        }
Пример #3
0
        private fileState createDirectory(fastCSharp.net.tcp.commandServer.socket client, string path)
        {
            fileState fileState = fileState.NoPermission;

            try
            {
                if (verify(client))
                {
                    DirectoryInfo directory = new DirectoryInfo(path);
                    if (verify(client, path = directory.fullName().toLower(), permissionType.Write))
                    {
                        if (directory.Exists)
                        {
                            return(fileState.Success);
                        }
                        directory.Create();
                        return(fileState.FileNotFound);
                    }
                }
            }
            catch (Exception error)
            {
                fileState = fileState.Exception;
                log.Error.Add(error, path, false);
            }
            return(fileState);
        }
Пример #4
0
        private void download(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream
                              , Func <returnValue <listName>, bool> onDownload)
        {
            listName listNameState = new listName {
                Length = (long)(byte)fileState.NoPermission, LastWriteTime = DateTime.MinValue
            };

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    if (verify(client, listName.LowerName, permissionType.Read))
                    {
                        if (file.Exists)
                        {
                            fastCSharp.threading.threadPool.TinyPool.Start(downloader.GetDownload(onDownload, listName, fileStream));
                            return;
                        }
                        listNameState.Length = (long)(byte)fileState.FileNotFound;
                    }
                }
            }
            catch (Exception error)
            {
                listNameState.Length = (long)(byte)fileState.Exception;
                log.Error.Add(error, null, false);
            }
            pub.Dispose(ref fileStream);
            onDownload(listNameState);
        }
Пример #5
0
        /// <summary>
        /// 获取文件权限
        /// </summary>
        /// <param name="client">客户端标识</param>
        /// <param name="fileName">文件名</param>
        /// <returns>文件权限,失败返回null</returns>
        private unsafe static permission getPermission(fastCSharp.net.tcp.commandServer.socket client, string fileName)
        {
#if NotFastCSharpCode
            fastCSharp.log.Error.Throw(fastCSharp.log.exceptionType.NotFastCSharpCode);
#else
            string userName = ((user)client.ClientUserInfo).Name;
            fixed(char *pathFixed = fileName)
            {
                char directorySeparatorChar = Path.DirectorySeparatorChar;

                for (char *read = pathFixed + fileName.Length; read != pathFixed;)
                {
                    if (*--read == directorySeparatorChar)
                    {
                        permission permission = permission.Table.Cache.Get(new permission.primaryKey {
                            UserName = userName, Path = new string(pathFixed, 0, (int)(read - pathFixed) + 1)
                        });
                        if (permission != null)
                        {
                            return(permission);
                        }
                    }
                }
            }
#endif
            return(null);
        }
Пример #6
0
        /// <summary>
        /// 客户端计数事件
        /// </summary>
        /// <param name="client"></param>
        private void onClient(fastCSharp.net.tcp.commandServer.socket client)
        {
            int clientCount = Interlocked.Increment(ref this.clientCount);

            if (OnClient != null)
            {
                OnClient(clientCount);
            }
        }
Пример #7
0
        private void send(fastCSharp.net.tcp.commandServer.socket client, string message, string[] users)
        {
            list <userInfo> userInfos = new list <userInfo>(this.users.Count);
            string          user      = (string)client.ClientUserInfo;
            hashString      userHash  = user;

            Monitor.Enter(userLock);
            try
            {
                if (this.users.ContainsKey(userHash))
                {
                    if (users == null)
                    {
                        foreach (userInfo userInfo in this.users.Values)
                        {
                            if (userInfo.User != user && userInfo.OnMessage != null)
                            {
                                userInfos.Add(userInfo);
                            }
                        }
                    }
                    else
                    {
                        userInfo userInfo;
                        foreach (string receiveUser in users)
                        {
                            if (receiveUser != user && this.users.TryGetValue(receiveUser, out userInfo))
                            {
                                if (userInfo.OnMessage != null)
                                {
                                    userInfos.Add(userInfo);
                                }
                            }
                        }
                    }
                }
            }
            finally { Monitor.Exit(userLock); }
            if (OnMessage != null)
            {
                OnMessage(new message {
                    User = user, Time = date.NowSecond, Message = message
                });
            }
            if (userInfos.Count != 0)
            {
                if (newMessageHandle == null)
                {
                    newMessageHandle = newMessage;
                }
                task.Tiny.Add(newMessageHandle, new messageUsers {
                    Users = userInfos, Message = new message {
                        User = user, Time = date.NowSecond, Message = message
                    }
                });
            }
        }
Пример #8
0
 private listName[] list(fastCSharp.net.tcp.commandServer.socket client, string path)
 {
     if (verify(client))
     {
         DirectoryInfo pathInfo = new DirectoryInfo(path);
         if (pathInfo.Exists && verify(client, pathInfo.fullName().toLower(), permissionType.List))
         {
             return(getListName(pathInfo));
         }
     }
     return(null);
 }
Пример #9
0
        /// <summary>
        /// 客户端标识验证
        /// </summary>
        /// <param name="client">客户端标识</param>
        /// <returns>是否验证成功</returns>
        private static bool verify(fastCSharp.net.tcp.commandServer.socket client)
        {
            user user = (user)client.ClientUserInfo;

            if (user != null)
            {
                user cacheUser = user.Table.Cache.Get(user.Name);
                if (cacheUser != null && user.Password == cacheUser.Password)
                {
                    return(true);
                }
            }
            return(false);
        }
Пример #10
0
        private void receive(fastCSharp.net.tcp.commandServer.socket client, Func <returnValue <message>, bool> onMessage)
        {
            userInfo   userInfo;
            hashString user = (string)client.ClientUserInfo;

            Monitor.Enter(userLock);
            try
            {
                if (users.TryGetValue(user, out userInfo))
                {
                    userInfo.OnMessage = onMessage;
                }
            }
            finally { Monitor.Exit(userLock); }
        }
Пример #11
0
 private pathPermission[] getPermissions(fastCSharp.net.tcp.commandServer.socket client)
 {
     if (verify(client))
     {
         ICollection <permission> permissions = permission.UserCache.GetCache(((user)client.ClientUserInfo).Name);
         pathPermission[]         paths       = new pathPermission[permissions.Count];
         int index = 0;
         foreach (permission value in permissions)
         {
             paths[index++].Set(value.Path, value.Type);
         }
         return(paths);
     }
     return(null);
 }
Пример #12
0
        private bool login(fastCSharp.net.tcp.commandServer.socket client, string userName, byte[] password, DateTime verifyTime)
        {
            user cacheUser = user.Table.Cache.Get(userName);

            if (cacheUser != null)
            {
                if (cacheUser.LoginVerify(userName, password, verifyTime))
                {
                    client.ClientUserInfo = new user {
                        Name = userName, Password = cacheUser.Password
                    };
                    return(true);
                }
            }
            return(false);
        }
Пример #13
0
 private long httpUpload(fastCSharp.net.tcp.commandServer.socket client)
 {
     fastCSharp.code.cSharp.tcpBase.httpPage httpPage = client.HttpPage;
     foreach (fastCSharp.net.tcp.http.requestForm.value file in httpPage.Form.Files)
     {
         if (file.SaveFileName == null)
         {
             return(file.Value.Count);
         }
         FileInfo fileInfo = new FileInfo(file.SaveFileName);
         long     length   = fileInfo.Length;
         fileInfo.Delete();
         File.Delete(file.SaveFileName);
         return(length);
     }
     return(long.MinValue);
 }
Пример #14
0
        /// <summary>
        /// 停止计数
        /// </summary>
        /// <param name="client"></param>
        private void onClose(fastCSharp.net.tcp.commandServer.socket client)
        {
            int clientCount = Interlocked.Decrement(ref this.clientCount);

            if (OnClient != null)
            {
                OnClient(clientCount);
            }
            if (clientCount == 0)
            {
                if (OnStop != null)
                {
                    OnStop(receiveSize);
                }
                receiveSize = 0;
            }
        }
Пример #15
0
        private void getUsers(fastCSharp.net.tcp.commandServer.socket client, Func <returnValue <string[]>, bool> onUserChanged)
        {
            string[]   users = null;
            hashString user  = (string)client.ClientUserInfo;

            Monitor.Enter(userLock);
            try
            {
                userInfo userInfo;
                if (this.users.TryGetValue(user, out userInfo))
                {
                    userInfo.OnUserChanged = onUserChanged;
                    users = this.users.Keys.getArray(value => value.ToString());
                }
            }
            finally
            {
                Monitor.Exit(userLock);
                onUserChanged(users);
            }
        }
Пример #16
0
        private unsafe bool login(fastCSharp.net.tcp.commandServer.socket client, string user, string password)
        {
            switch (user)
            {
            case "userA":
                if (password == "A")
                {
                    client.ClientUserInfo = user;
                    return(true);
                }
                break;

            case "userB":
                if (password == "B")
                {
                    client.ClientUserInfo = user;
                    return(true);
                }
                break;
            }
            return(false);
        }
Пример #17
0
        private fileState upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, byte[] data, int backupIdentity, bool isTimeVersion)
        {
            fileState fileState = fileState.NoPermission;

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    permission permission = getPermission(client, listName.LowerName);
                    if (verify(permission, permissionType.Write))
                    {
                        bool isFile = file.Exists;
                        if (isFile && isTimeVersion && file.LastWriteTimeUtc > listName.LastWriteTime)
                        {
                            return(server.fileState.TimeVersionError);
                        }
                        if (!isFile || file.LastWriteTimeUtc != listName.LastWriteTime || listName.Length != file.Length)
                        {
                            if (isFile)
                            {
                                permission.Backup(file, backupIdentity);
                            }
                            File.WriteAllBytes(listName.Name, data);
                            new FileInfo(listName.Name).LastWriteTimeUtc = listName.LastWriteTime;
                        }
                        fileState = fileState.Success;
                    }
                }
            }
            catch (Exception error)
            {
                fileState = fileState.Exception;
                log.Error.Add(error, listName.Name, false);
            }
            return(fileState);
        }
Пример #18
0
        private void upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream, int backupIdentity, bool isTimeVersion
                            , Func <returnValue <fileState>, bool> onUpload)
        {
            fileState fileState = fileState.NoPermission;

            try
            {
                if (verify(client))
                {
                    FileInfo file = new FileInfo(listName.Name);
                    listName.Set(file.FullName);
                    permission permission = getPermission(client, listName.LowerName);
                    if (verify(permission, permissionType.Write))
                    {
                        DirectoryInfo directory = file.Directory;
                        if (!directory.Exists)
                        {
                            directory.Create();
                        }
                        Action upload = uploader.GetUpload(permission, onUpload, listName, fileStream, backupIdentity, isTimeVersion);
                        onUpload   = null;
                        fileStream = null;
                        fastCSharp.threading.threadPool.TinyPool.Start(upload);
                    }
                }
            }
            catch (Exception error)
            {
                fileState = fileState.Exception;
                log.Error.Add(error, listName.Name, false);
            }
            pub.Dispose(ref fileStream);
            if (onUpload != null)
            {
                onUpload(fileState);
            }
        }
Пример #19
0
 /// <summary>
 /// 获取文件权限
 /// </summary>
 /// <param name="client">客户端标识</param>
 /// <param name="fileName">文件名</param>
 /// <param name="permissionType">文件权限</param>
 /// <returns>是否成功</returns>
 private unsafe static bool verify(fastCSharp.net.tcp.commandServer.socket client, string fileName, permissionType permissionType)
 {
     return((getPermissionType(client, fileName) & permissionType) != permissionType.None);
 }
Пример #20
0
 private string getSession(fastCSharp.net.tcp.commandServer.socket client)
 {
     fastCSharp.code.cSharp.tcpBase.httpPage httpPage = client.HttpPage;
     return(httpPage.GetSession <string>());
 }
Пример #21
0
 private listName[] delete(fastCSharp.net.tcp.commandServer.socket client, string path, listName[] listNames, int backupIdentity)
 {
     if (verify(client))
     {
         DirectoryInfo pathInfo = new DirectoryInfo(path);
         if (pathInfo.Exists)
         {
             permission permission = getPermission(client, path = pathInfo.fullName().toLower());
             if (verify(permission, permissionType.Write))
             {
                 directoryDeleter directoryDeleter = new directoryDeleter {
                     Client = client, BackupIdentity = backupIdentity
                 };
                 Monitor.Enter(deleteLock);
                 try
                 {
                     deleteFileNames.Clear();
                     deleteDirectoryNames.Clear();
                     foreach (listName listName in listNames)
                     {
                         (listName.IsFile ? deleteFileNames : deleteDirectoryNames).Add(listName.LowerName);
                     }
                     if (deleteFileNames.Count != 0)
                     {
                         foreach (FileInfo file in pathInfo.GetFiles())
                         {
                             if (deleteFileNames.Contains(file.Name.toLower()))
                             {
                                 try
                                 {
                                     permission.Backup(file, backupIdentity);
                                 }
                                 catch (Exception error)
                                 {
                                     log.Error.Add(error, null, false);
                                 }
                             }
                         }
                     }
                     if (deleteDirectoryNames.Count != 0)
                     {
                         foreach (DirectoryInfo directory in pathInfo.GetDirectories())
                         {
                             if (deleteDirectoryNames.Contains(directory.Name.toLower()))
                             {
                                 try
                                 {
                                     directoryDeleter.Delete(directory);
                                 }
                                 catch (Exception error)
                                 {
                                     log.Error.Add(error, null, false);
                                 }
                             }
                         }
                     }
                 }
                 finally { Monitor.Exit(deleteLock); }
                 return(getListName(pathInfo));
             }
         }
     }
     return(null);
 }
Пример #22
0
 private bool setSession(fastCSharp.net.tcp.commandServer.socket client, string value)
 {
     fastCSharp.code.cSharp.tcpBase.httpPage httpPage = client.HttpPage;
     return(httpPage.SetSession(value));
 }
Пример #23
0
        /// <summary>
        /// 获取文件权限
        /// </summary>
        /// <param name="client">客户端标识</param>
        /// <param name="fileName">文件名</param>
        /// <returns>文件权限</returns>
        private unsafe static permissionType getPermissionType(fastCSharp.net.tcp.commandServer.socket client, string fileName)
        {
            permission permission = getPermission(client, fileName);

            return(permission != null ? permission.Type : permissionType.None);
        }
Пример #24
0
 private unsafe string myName(fastCSharp.net.tcp.commandServer.socket client)
 {
     return((string)client.ClientUserInfo);
 }
Пример #25
0
 private void setCookie(fastCSharp.net.tcp.commandServer.socket client, string name, string value)
 {
     fastCSharp.code.cSharp.tcpBase.httpPage httpPage = client.HttpPage;
     httpPage.SetCookie(new net.tcp.http.cookie(name, value));
 }