Exemple #1
0
        public void SockaddrIn6Test()
        {
            if (!Socket.OSSupportsIPv6)
            {
                Assert.Ignore("OS does not support IPv6.");
            }

            var address1 = new SockaddrIn6 {
                sin6_family   = UnixAddressFamily.AF_INET6,
                sin6_port     = Syscall.htons(1234),
                sin6_flowinfo = 2,
                sin6_addr     = NativeConvert.ToIn6Addr(IPAddress.IPv6Loopback),
                sin6_scope_id = 3
            };

            var storage  = address1.ToSockaddrStorage();
            var address2 = SockaddrIn6.FromSockaddrStorage(storage);

            Assert.AreEqual(address1, address2);

            var sockaddr = Sockaddr.FromSockaddrStorage(storage);

            Assert.AreEqual(sockaddr.sa_family, address1.sa_family);

            Assert.AreEqual("{sin6_family=AF_INET6, sin6_port=htons(1234), sin6_flowinfo=2, sin6_addr=::1, sin6_scope_id=3}", address1.ToString());
        }
Exemple #2
0
        public void should_set_file_permissions()
        {
            var tempFile = GetTempFilePath();

            File.WriteAllText(tempFile, "File1");
            SetWritePermissions(tempFile, false);

            // Verify test setup
            Syscall.stat(tempFile, out var fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0444");

            Subject.SetPermissions(tempFile, "644");
            Syscall.stat(tempFile, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0644");

            Subject.SetPermissions(tempFile, "0644");
            Syscall.stat(tempFile, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0644");

            if (OsInfo.Os != Os.Bsd)
            {
                // This is not allowed on BSD
                Subject.SetPermissions(tempFile, "1664");
                Syscall.stat(tempFile, out fileStat);
                NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("1664");
            }
        }
Exemple #3
0
        static internal void SetStatInfo(Entry entry, ref Stat stat)
        {
            stat.st_mode = NativeConvert.FromOctalPermissionString("0444");
            switch (entry.Kind)
            {
            case EntryKind.Directory:
            case EntryKind.ZipDirectoryEntry:
            case EntryKind.ZipFile:
                stat.st_mode |= FilePermissions.S_IFDIR | NativeConvert.FromOctalPermissionString("0222");
                stat.st_nlink = 2 + ((entry.Node != null) ? (ulong)GetEntriesCount(entry.Node, new EntryKind[] { EntryKind.Directory, EntryKind.ZipFile, EntryKind.ZipDirectoryEntry }) : 0);
                break;

            case EntryKind.File:
                stat.st_mode |= FilePermissions.S_IFLNK | NativeConvert.FromOctalPermissionString("0777");
                stat.st_nlink = 1;
                break;

            case EntryKind.ZipFileEntry:
                stat.st_mode |= FilePermissions.S_IFREG;
                stat.st_nlink = 1;
                break;
            }
            stat.st_size  = entry.Size;
            stat.st_mtime = NativeConvert.FromDateTime(entry.LastWriteTime);
        }
Exemple #4
0
        public void SockaddrInTest()
        {
            var address1 = new SockaddrIn {
                sin_family = UnixAddressFamily.AF_INET,
                sin_port   = Syscall.htons(5678),
                sin_addr   = NativeConvert.ToInAddr(IPAddress.Loopback),
            };

            var storage  = address1.ToSockaddrStorage();
            var address2 = SockaddrIn.FromSockaddrStorage(storage);

            Assert.AreEqual(address1, address2);

            var sockaddr = Sockaddr.FromSockaddrStorage(storage);

            Assert.AreEqual(sockaddr.sa_family, address1.sa_family);

            var storage2 = storage.ToSockaddrStorage();

            Assert.AreEqual(storage, storage2);

            var storage3 = new SockaddrStorage(123);

            storage2.CopyTo(storage3);
            Assert.AreEqual(storage, storage3);

            Assert.AreEqual("{sin_family=AF_INET, sin_port=htons(5678), sin_addr=127.0.0.1}", address1.ToString());
        }
Exemple #5
0
        private static int EventSystemGroupMemberDecrease(int subType, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ)
        {
            CqGroupMemberDecreaseEventArgs args = new CqGroupMemberDecreaseEventArgs();

            args.SendTime       = NativeConvert.FotmatUnixTime(sendTime.ToString());
            args.FromGroup      = fromGroup;
            args.FromQQ         = fromQQ;
            args.BeingOperateQQ = beingOperateQQ;
            args.Handler        = false;

            if (subType == 1)                   // 群员离开
            {
                args.FromQQ = beingOperateQQ;   // 此时 FormQQ 为操作者QQ
                ReceiveMemberLeave(null, args);
            }
            else if (subType == 2)
            {
                ReceiveMemberRemove(null, args);
            }
            else
            {
                Common.CqApi.AddLoger(LogerLevel.Info, "Native提示", "EventSystemGroupMemberDecrease 方法发现新的消息类型");
            }

            return((int)(args.Handler ? MessageHanding.Intercept : MessageHanding.Ignored));            //如果处理过就截断消息
        }
Exemple #6
0
        public void should_set_folder_permissions()
        {
            var tempPath = GetTempFilePath();

            Directory.CreateDirectory(tempPath);
            SetWritePermissions(tempPath, false);

            // Verify test setup
            Syscall.stat(tempPath, out var fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0555");

            Subject.SetPermissions(tempPath, "644");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0755");

            Subject.SetPermissions(tempPath, "0644");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0755");

            Subject.SetPermissions(tempPath, "1664");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("1775");

            Subject.SetPermissions(tempPath, "775");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0775");

            Subject.SetPermissions(tempPath, "640");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0750");

            Subject.SetPermissions(tempPath, "0041");
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0051");
        }
Exemple #7
0
        public override bool IsValidFolderPermissionMask(string mask)
        {
            try
            {
                var permissions = NativeConvert.FromOctalPermissionString(mask);

                if ((permissions & ~FilePermissions.ACCESSPERMS) != 0)
                {
                    // Only allow access permissions
                    return(false);
                }

                if ((permissions & FilePermissions.S_IRWXU) != FilePermissions.S_IRWXU)
                {
                    // We expect at least full owner permissions (700)
                    return(false);
                }

                return(true);
            }
            catch (FormatException)
            {
                return(false);
            }
        }
        protected override Errno OnGetPathStatus(string path, out Stat stbuf)
        {
            Trace.WriteLine("(OnGetPathStatus {0})", path);

            stbuf = new Stat();
            switch (path)
            {
            case "/":
                stbuf.st_mode = FilePermissions.S_IFDIR |
                                NativeConvert.FromOctalPermissionString("0755");
                stbuf.st_nlink = 2;
                return(0);

            case hello_path:
            case data_path:
            case data_im_path:
                stbuf.st_mode = FilePermissions.S_IFREG |
                                NativeConvert.FromOctalPermissionString("0444");
                stbuf.st_nlink = 1;
                int size = 0;
                switch (path)
                {
                case hello_path:   size = hello_str.Length; break;

                case data_path:
                case data_im_path: size = data_size; break;
                }
                stbuf.st_size = size;
                return(0);

            default:
                return(Errno.ENOENT);
            }
        }
Exemple #9
0
        protected override Errno OnGetPathStatus(string path, out Stat stbuf)
        {
            var pathSegments = path.Split('/', StringSplitOptions.RemoveEmptyEntries).AsMemory();
            var parentDir    = pathSegments.Length < 2 ? Trie : Trie.TryFindDirectory(pathSegments.Slice(0, pathSegments.Length - 1));
            var file         = pathSegments.Length > 0
                            ? parentDir?.TryFindFile(pathSegments.Span[pathSegments.Length - 1])
                            : null;
            var dir = pathSegments.Length > 0
                            ? parentDir?.TryFindDirectory(pathSegments.Span[pathSegments.Length - 1])
                            : parentDir;

            if (dir != null)
            {
                stbuf = new Stat
                {
                    st_mode  = FilePermissions.S_IFDIR | NativeConvert.FromOctalPermissionString("0755"),
                    st_nlink = 2
                };
                return(0);
            }

            if (file != null)
            {
                stbuf = new Stat
                {
                    st_mode  = FilePermissions.S_IFREG | NativeConvert.FromOctalPermissionString("0444"),
                    st_nlink = 1,
                    st_size  = file.Length
                };
                return(0);
            }

            stbuf = new Stat();
            return(Errno.ENOENT);
        }
Exemple #10
0
        public void IPv6()
        {
            if (!Socket.OSSupportsIPv6)
            {
                Assert.Ignore("OS does not support IPv6.");
            }

            var address = new SockaddrIn6 {
                sin6_family = UnixAddressFamily.AF_INET6,
                sin6_port   = Syscall.htons(0),
                sin6_addr   = NativeConvert.ToIn6Addr(IPAddress.IPv6Loopback),
            };

            WithSockets(UnixAddressFamily.AF_INET6, UnixSocketType.SOCK_STREAM, 0, (so1, so2) => {
                if (Syscall.bind(so1, address) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }

                var address1Stor = new SockaddrStorage();
                if (Syscall.getsockname(so1, address1Stor) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }
                var address1 = new SockaddrIn6();
                address1Stor.CopyTo(address1);

                // Check getsockname(socket, null)
                if (Syscall.getsockname(so1, null) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }

                var address2 = new SockaddrIn6();
                if (Syscall.getsockname(so1, address2) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }

                Assert.AreEqual(address1, address2);
                Assert.IsTrue(Syscall.ntohs(address1.sin6_port) != 0);
                address1.sin6_port = 0;
                Assert.AreEqual(address, address1);

                var address3 = new Sockaddr();
                if (Syscall.getsockname(so1, address3) < 0)
                {
                    UnixMarshal.ThrowExceptionForLastError();
                }
                Assert.AreEqual(address.sa_family, address3.sa_family);

                // Try to store a sockaddr_in6 into a Sockaddr. Should fail because sockaddr_in6 should be larger than sockaddr_in
                var address4 = new SockaddrIn();
                if (Syscall.getsockname(so1, address4) == 0)
                {
                    Assert.Fail("getsockname() should have failed");
                }
                Assert.AreEqual(Errno.ENOBUFS, Stdlib.GetLastError());
            });
        }
Exemple #11
0
        public int _OnLockHandle(string file, IntPtr fi, int cmd, IntPtr lockp)
        {
            Errno errno;

            try
            {
                PathInfo info = new PathInfo();
                PathInfo.CopyFromPtr(fi, info);
                FcntlCommand _cmd = NativeConvert.ToFcntlCommand(cmd);
                Flock        @lock;
                Interop.CopyFlock(lockp, out @lock);
                errno = _filesystem.OnLockHandle(file, info, _cmd, ref @lock);
                if (errno == 0)
                {
                    Interop.CopyFlock(ref @lock, lockp);
                    PathInfo.CopyToPtr(info, fi);
                }
            }
            catch (Exception e)
            {
                Trace.WriteLine(e.ToString());
                errno = Errno.EIO;
            }
            return(Interop.ConvertErrno(errno));
        }
Exemple #12
0
 public UnixSocket(string path, uint?permissions) : this(CreateEndPoint(path))
 {
     if (path == null)
     {
         throw new ArgumentNullException("path");
     }
     this.path = path;
     try {
         if (path.StartsWith("\0"))
         {
             inode = null;
         }
         else
         {
             inode = new UnixFileInfo(path).Inode;
             if (permissions != null)
             {
                 Syscall.chmod(path, NativeConvert.ToFilePermissions(permissions.Value));
             }
         }
     } catch (InvalidOperationException) {
         Logger.Write(LogLevel.Error, "Path \"{0}\" doesn't exist?", path);
         throw;
     }
 }
Exemple #13
0
        protected override Errno OnGetPathStatus(string path, out Stat stat)
        {
            stat = new Stat();
            if (path == "/")
            {
                DirectoryInfo di = new DirectoryInfo(Source);
                stat.st_mode  = FilePermissions.S_IFDIR | NativeConvert.FromOctalPermissionString("0666");
                stat.st_size  = (4096 * (long)Math.Ceiling(walker.RootNode.Nodes.Count * 0.1));
                stat.st_mtime = NativeConvert.FromDateTime(di.LastWriteTime);
                stat.st_nlink = 2 + (ulong)Helpers.GetEntriesCount(walker.RootNode, new EntryKind[] { EntryKind.Directory, EntryKind.ZipFile, EntryKind.ZipDirectoryEntry });
            }

            else
            {
                try
                {
                    Entry fsEntry = walker.SearchEntry(path.Substring(1));
                    if (fsEntry == null)
                    {
                        return(Errno.ENOENT);
                    }
                    Helpers.SetStatInfo(fsEntry, ref stat);
                }
                catch (DirectoryNotFoundException)
                {
                    return(Errno.ENOTDIR);
                }
                catch (IOException)
                {
                    return(Errno.EIO);
                }
            }
            return(0);
        }
Exemple #14
0
        private static string ToFopenMode(string file, FileMode mode)
        {
            string fopenMode = NativeConvert.ToFopenMode(mode);

            StdioFileStream.AssertFileMode(file, mode);
            return(fopenMode);
        }
Exemple #15
0
        public override bool IsValidFilePermissionMask(string mask)
        {
            try
            {
                var permissions = NativeConvert.FromOctalPermissionString(mask);

                if ((permissions & (FilePermissions.S_ISUID | FilePermissions.S_ISGID | FilePermissions.S_ISVTX)) != 0)
                {
                    return(false);
                }

                if ((permissions & (FilePermissions.S_IXUSR | FilePermissions.S_IXGRP | FilePermissions.S_IXOTH)) != 0)
                {
                    return(false);
                }

                if ((permissions & (FilePermissions.S_IRUSR | FilePermissions.S_IWUSR)) != (FilePermissions.S_IRUSR | FilePermissions.S_IWUSR))
                {
                    return(false);
                }

                return(true);
            }
            catch (FormatException)
            {
                return(false);
            }
        }
Exemple #16
0
        private static int EventRequestAddGroup(int subType, int sendTime, long fromGroup, long fromQQ, IntPtr msg, string responseFlag)
        {
            GroupAddRequestEventArgs args = new GroupAddRequestEventArgs();

            args.SendTime  = NativeConvert.FotmatUnixTime(sendTime.ToString());
            args.FromGroup = fromGroup;
            args.FromQQ    = fromQQ;
            args.AppendMsg = NativeConvert.ToPtrString(msg, Encoding.GetEncoding("GB18030"));
            args.Tag       = responseFlag;
            args.Handled   = false;

            if (subType == 1)                   // 申请加入群
            {
                ReceiveGroupAddApply(null, args);
            }
            else if (subType == 2)              // 机器人被邀请
            {
                ReceiveGroupAddInvitee(null, args);
            }
            else
            {
                Common.CqApi.AddLoger(LogerLevel.Info, "Native提示", "EventRequestAddGroup 方法发现新的消息类型");
            }

            return(0);
        }
Exemple #17
0
        private static int EventGroupMsg(int subType, int msgId, long fromGroup, long fromQQ, string fromAnonymous, IntPtr msg, int font)
        {
            GroupMessageEventArgs args = new GroupMessageEventArgs();

            args.MsgId          = msgId;
            args.FromGroup      = fromGroup;
            args.FromQQ         = fromQQ;
            args.Msg            = NativeConvert.ToPtrString(msg, Encoding.GetEncoding("GB18030"));
            args.FromAnonymous  = null;
            args.IsAnonymousMsg = false;
            args.Handled        = false;

            if (fromQQ == 80000000 && !string.IsNullOrEmpty(fromAnonymous))
            {
                args.FromAnonymous  = Common.CqApi.GetAnonymous(fromAnonymous);                 //获取匿名成员信息
                args.IsAnonymousMsg = true;
            }

            if (subType == 1)               // 群消息
            {
                ReceiveGroupMessage(null, args);
            }
            else                            // 其它类型
            {
                Common.CqApi.AddLoger(LogerLevel.Info, "Native提示", "EventGroupMsg 方法发现新的消息类型");
            }

            return((int)(args.Handled ? MessageHanding.Intercept : MessageHanding.Ignored));            //如果处理过就截断消息
        }
Exemple #18
0
        private static int EventSystemGroupMemberIncrease(int subType, int sendTime, long fromGroup, long fromQQ, long beingOperateQQ)
        {
            GroupMemberAlterEventArgs args = new GroupMemberAlterEventArgs();

            args.SendTime       = NativeConvert.FotmatUnixTime(sendTime.ToString());
            args.FromGroup      = fromGroup;
            args.FromQQ         = fromQQ;
            args.BeingOperateQQ = beingOperateQQ;
            args.Handled        = false;

            if (subType == 1)                   // 管理员同意
            {
                ReceiveMemberJoin(null, args);
            }
            else if (subType == 2)              // 管理员邀请
            {
                ReceiveMemberInvitee(null, args);
            }
            else
            {
                Common.CqApi.AddLoger(LogerLevel.Info, "Native提示", "EventSystemGroupMemberIncrease 方法发现新的消息类型");
            }

            return((int)(args.Handled ? MessageHanding.Intercept : MessageHanding.Ignored));            //如果处理过就截断消息
        }
Exemple #19
0
        public void should_clear_setgid_on_set_folder_permissions()
        {
            var tempPath = GetTempFilePath();

            Directory.CreateDirectory(tempPath);
            SetWritePermissionsInternal(tempPath, false, true);
            _tempPath = tempPath;

            // Verify test setup
            Syscall.stat(tempPath, out var fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("2555");

            Subject.SetPermissions(tempPath, "0755", null);
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0755");

            Subject.SetPermissions(tempPath, "0775", null);
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0775");

            Subject.SetPermissions(tempPath, "0750", null);
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0750");

            Subject.SetPermissions(tempPath, "0051", null);
            Syscall.stat(tempPath, out fileStat);
            NativeConvert.ToOctalPermissionString(fileStat.st_mode).Should().Be("0051");
        }
Exemple #20
0
        private static int EventPrivateMsg(int subType, int msgId, long fromQQ, IntPtr msg, int font)
        {
            PrivateMessageEventArgs args = new PrivateMessageEventArgs();

            args.MsgId   = msgId;
            args.FromQQ  = fromQQ;
            args.Msg     = NativeConvert.ToPtrString(msg, Encoding.GetEncoding("GB18030"));
            args.Handled = false;

            if (subType == 11)                  // 来自好友
            {
                ReceiveFriendMessage(null, args);
            }
            else if (subType == 1)              // 来自在线状态
            {
                ReceiveQnlineStatusMessage(null, args);
            }
            else if (subType == 2)              // 来自群
            {
                ReceiveGroupPrivateMessage(null, args);
            }
            else if (subType == 3)              // 来自讨论组
            {
                ReceiveDiscussPrivateMessage(null, args);
            }
            else
            {
                Common.CqApi.AddLoger(LogerLevel.Info, "Native提示", "EventPrivateMsg 方法发现新的消息类型");
            }

            return((int)(args.Handled ? MessageHanding.Intercept : MessageHanding.Ignored));            //如果处理过就截断消息
        }
Exemple #21
0
        public void Signal()
        {
            SignalTest st = new SignalTest();

            // Insert handler
            SignalHandler oh = Stdlib.signal(Signum.SIGURG,
                                             new SignalHandler(st.Handler));

            st.signalReceived = ~NativeConvert.FromSignum(Signum.SIGURG);

            // Send signal
            Stdlib.raise(Signum.SIGURG);

            Assert.IsTrue(
                NativeConvert.ToSignum(st.signalReceived) == Signum.SIGURG,
                "#IH: Signal handler not invoked for SIGURG");

            // Reset old signal
            Stdlib.signal(Signum.SIGURG, oh);

            st.signalReceived = NativeConvert.FromSignum(Signum.SIGUSR1);
            Stdlib.raise(Signum.SIGURG);

            Assert.IsFalse(NativeConvert.ToSignum(st.signalReceived) == Signum.SIGURG,
                           "#IH: Signal Handler invoked when it should have been removed!");
        }
Exemple #22
0
        /// <summary>
        /// 获取群成员信息
        /// </summary>
        /// <param name="groupId">目标群</param>
        /// <param name="qqId">目标QQ</param>
        /// <param name="member">如果成功, 返回群成员信息</param>
        /// <param name="notCache">默认为 "Flase", 通常忽略本参数, 仅在必要的是否使用</param>
        /// <returns>成功返回 0, 失败返回 负数</returns>
        public int GetMemberInfo(long groupId, long qqId, out GroupMember member, bool notCache = false)
        {
            string result = CQP.CQ_getGroupMemberInfoV2(_authCode, groupId, qqId, notCache);

            if (string.IsNullOrEmpty(result))
            {
                member = null;
                return(-1000);
            }
            #region --其它_转换_文本到群成员信息--
            member = new GroupMember();
            UnPack unpack = new UnPack(Convert.FromBase64String(result));
            member.GroupId                  = unpack.GetInt64();
            member.QQId                     = unpack.GetInt64();
            member.Nick                     = unpack.GetString(Encoding.GetEncoding("GB18030"));
            member.Card                     = unpack.GetString(Encoding.GetEncoding("GB18030"));
            member.Sex                      = (Sex)unpack.GetInt32();
            member.Age                      = unpack.GetInt32();
            member.Area                     = unpack.GetString(Encoding.GetEncoding("GB18030"));
            member.JoiningTime              = NativeConvert.FotmatUnixTime(unpack.GetInt32().ToString());
            member.LastDateTime             = NativeConvert.FotmatUnixTime(unpack.GetInt32().ToString());
            member.Level                    = unpack.GetString(Encoding.GetEncoding("GB18030"));
            member.PermitType               = (PermitType)unpack.GetInt32();
            member.BadRecord                = unpack.GetInt32() == 1;
            member.SpecialTitle             = unpack.GetString(Encoding.GetEncoding("GB18030"));
            member.SpecialTitleDurationTime = NativeConvert.FotmatUnixTime(unpack.GetInt32().ToString());
            member.CanModifiedCard          = unpack.GetInt32() == 1;
            #endregion
            return(0);
        }
Exemple #23
0
        public static SocketError?ErrorToSocketError(int errno)
        {
            var err = NativeConvert.ToErrno(errno);

            switch (err)
            {
            case Errno.EAFNOSUPPORT:
                return(SocketError.AddressFamilyNotSupported);

            case Errno.EMFILE:
            case Errno.ENFILE:
                return(SocketError.TooManyOpenSockets);

            case Errno.EPROTONOSUPPORT:
                return(SocketError.ProtocolNotSupported);

            case Errno.EPROTOTYPE:
                return(SocketError.ProtocolType);

            case Errno.EOPNOTSUPP:
                return(SocketError.OperationNotSupported);

            case Errno.ENOTCONN:
                return(SocketError.NotConnected);

            case Errno.EADDRINUSE:
                return(SocketError.AddressAlreadyInUse);

            case Errno.EADDRNOTAVAIL:
                return(SocketError.AddressNotAvailable);

            case Errno.EISCONN:
                return(SocketError.IsConnected);

            case Errno.ECONNRESET:
                return(SocketError.ConnectionReset);

            case Errno.ENETDOWN:
                return(SocketError.NetworkDown);

            case Errno.EHOSTUNREACH:
                return(SocketError.HostUnreachable);

            case Errno.ENETUNREACH:
                return(SocketError.NetworkUnreachable);

            case Errno.EALREADY:
                return(SocketError.AlreadyInProgress);

            case Errno.ECONNREFUSED:
                return(SocketError.ConnectionRefused);

            case Errno.ETIMEDOUT:
                return(SocketError.TimedOut);

            default:
                return(null);
            }
        }
Exemple #24
0
 /// <summary>
 /// 置群成员专属头衔
 /// </summary>
 /// <param name="groupId">目标群</param>
 /// <param name="qqId">目标QQ</param>
 /// <param name="specialTitle">如果要删除,这里填空</param>
 /// <param name="time">专属头衔有效期,单位为秒。如果永久有效,time填写负数</param>
 /// <returns></returns>
 public int SetGroupSpecialTitle(long groupId, long qqId, string specialTitle, TimeSpan time)
 {
     if (time.Ticks < 0)
     {
         time = new TimeSpan(-10000000);                      //-1秒
     }
     return(CQP.CQ_setGroupSpecialTitle(_authCode, groupId, qqId, NativeConvert.ToStringPtr(specialTitle, Encoding.GetEncoding("GB18030")), (long)time.TotalSeconds));
 }
Exemple #25
0
 /// <summary>
 /// 置好友添加请求
 /// </summary>
 /// <param name="tag">请求反馈标识</param>
 /// <param name="response">反馈类型</param>
 /// <param name="appendMsg">备注</param>
 /// <returns></returns>
 public int SetFriendAddRequest(string tag, ResponseType response, string appendMsg)
 {
     if (appendMsg == null)
     {
         appendMsg = string.Empty;
     }
     return(CQP.CQ_setFriendAddRequest(_authCode, tag, (int)response, NativeConvert.ToStringPtr(appendMsg, Encoding.GetEncoding("GB18030"))));
 }
Exemple #26
0
 public static void CopyFlock(ref Flock source, IntPtr dest)
 {
     if (!NativeConvert.TryCopy(ref source, dest))
     {
         throw new ArgumentOutOfRangeException(
                   "Unable to copy Mono.Unix.Native.Flock into `struct flock'.");
     }
 }
Exemple #27
0
 public static void CopyFlock(IntPtr source, out Flock dest)
 {
     if (!NativeConvert.TryCopy(source, out dest))
     {
         throw new ArgumentOutOfRangeException(
                   "Unable to copy `struct flock' into Mono.Unix.Native.Flock.");
     }
 }
Exemple #28
0
 public static void CopyStatvfs(ref Statvfs source, IntPtr dest)
 {
     if (!NativeConvert.TryCopy(ref source, dest))
     {
         throw new ArgumentOutOfRangeException(
                   "Unable to copy Mono.Unix.Native.Statvfs into `struct statvfs'.");
     }
 }
Exemple #29
0
 public static void CopyStatvfs(IntPtr source, out Statvfs dest)
 {
     if (!NativeConvert.TryCopy(source, out dest))
     {
         throw new ArgumentOutOfRangeException(
                   "Unable to copy `struct statvfs' into Mono.Unix.Native.Statvfs.");
     }
 }
Exemple #30
0
 public static void CopyUtimbuf(ref Utimbuf source, IntPtr dest)
 {
     if (!NativeConvert.TryCopy(ref source, dest))
     {
         throw new ArgumentOutOfRangeException(
                   "Unable to copy Mono.Unix.Native.Utimbuf into `struct utimbuf'.");
     }
 }