Пример #1
0
        private void Eval_Scribble(User user)
        {
            byte[] data = user.ScribbleBuffer.ToArray();
            user.ScribbleBuffer = new List <byte>();

            if (Settings.GetReg <bool>("receive_scribbles", true) && !user.Ignored)
            {
                if (ScriptEvents.OnScribbleReceiving(this, user))
                {
                    data = Zip.Decompress(data);

                    if (user.Name == this.users[0].Name)
                    {
                        this.Panel.Scribble(data);
                    }
                    else if (!user.Ignored)
                    {
                        this.Panel.PMScribbleReceived(this, user, user.Name, data);
                    }
                    else
                    {
                        return;
                    }

                    this.Panel.CheckUnreadStatus();
                    ScriptEvents.OnScribbleReceived(this, user);
                }
            }
        }
Пример #2
0
        private void Eval_Scribble_Unknown()
        {
            byte[] data = this.unknown_scribble_buffer.ToArray();
            this.unknown_scribble_buffer = new List <byte>();

            if (Settings.GetReg <bool>("receive_scribbles", true))
            {
                data = Zip.Decompress(data);
                this.Panel.Scribble(data);
            }
        }
Пример #3
0
        public void Save()
        {
            byte[] buf = this.data_in.ToArray();
            this.data_in.Clear();
            this.data_in = new List <byte>();

            if (this.is_opus)
            {
                buf = Opus.Decode(buf);
            }
            else
            {
                for (int i = 0; i < this.compression_count; i++)
                {
                    buf = Zip.Decompress(buf);
                }
            }

            if (buf.Length > 0)
            {
                StringBuilder sb = new StringBuilder();
                sb.Append(Helpers.EndPointToHexString(this.EndPoint));
                sb.Append("_");
                sb.Append(Helpers.UnixTimeMS);
                sb.Append("_");
                sb.Append(this.Ident);

                try
                {
                    File.WriteAllBytes(Path.Combine(Settings.VoicePath, sb.ToString() + ".wav"), buf);
                    this.FileName = sb.ToString();
                }
                catch { }

                sb = null;
            }

            buf = null;
        }
Пример #4
0
        public static DecryptedHashlink DecodeHashlink(String hashlink)
        {
            DecryptedHashlink room = new DecryptedHashlink();

            try
            {
                if (hashlink.ToUpper().StartsWith("CHATROOM:")) // not encrypted
                {
                    hashlink = hashlink.Substring(9);
                    int split = hashlink.IndexOf(":");
                    room.IP   = IPAddress.Parse(hashlink.Substring(0, split));
                    hashlink  = hashlink.Substring(split + 1);
                    split     = hashlink.IndexOf("|");
                    room.Port = ushort.Parse(hashlink.Substring(0, split));
                    room.Name = hashlink.Substring(split + 1);
                    return(room);
                }
                else // encrypted
                {
                    byte[] buf = Convert.FromBase64String(hashlink);
                    buf = d67(buf, 28435);
                    buf = Zip.Decompress(buf);

                    HashlinkReader reader = new HashlinkReader(buf);
                    reader.SkipBytes(32);
                    room.IP   = reader;
                    room.Port = reader;
                    reader.SkipBytes(4);
                    room.Name = reader;

                    return(room);
                }
            }
            catch // badly formed hashlink
            {
                return(null);
            }
        }
Пример #5
0
        public bool Service(uint time)
        {
            while (this.data_out.Count > 0)
            {
                try
                {
                    this.sock.Send(this.data_out[0]);
                    this.data_out.RemoveAt(0);
                }
                catch { break; }
            }

            byte[]      buf     = new byte[8192];
            SocketError e       = SocketError.Success;
            int         size    = 0;
            bool        success = true;

            try
            {
                this.avail = this.sock.Available;

                if (this.avail > 8192)
                {
                    this.avail = 8192;
                }

                size = this.sock.Receive(buf, 0, this.avail, SocketFlags.None, out e);
            }
            catch { }

            if (size == 0)
            {
                if (e == SocketError.WouldBlock)
                {
                    this.health = 0;
                }
                else if (this.health++ > 3)
                {
                    this.SockCode = (int)e;
                    success       = false;
                }
            }
            else
            {
                this.health = 0;
                this.data_in.AddRange(buf.Take(size));
            }

            while (this.data_in.Count >= 3)
            {
                ushort len = BitConverter.ToUInt16(this.data_in.ToArray(), 0);

                if (this.data_in.Count >= (len + 3))
                {
                    byte   id     = this.data_in[2];
                    byte[] packet = this.data_in.GetRange(3, len).ToArray();
                    this.data_in.RemoveRange(0, (len + 3));

                    PacketReceivedEventArgs args = new PacketReceivedEventArgs
                    {
                        Msg    = (TCPMsg)id,
                        Packet = new TCPPacketReader(packet),
                        Time   = time
                    };

                    if (args.Msg == TCPMsg.MSG_CHAT_CLIENTCOMPRESSED)
                    {
                        packet = Zip.Decompress(packet);

                        if (packet != null)
                        {
                            if (packet.Length > 0)
                            {
                                this.data_in.InsertRange(0, packet);
                            }
                        }
                    }
                    else
                    {
                        try { this.PacketReceived(null, args); }
                        catch { }
                    }
                }
                else
                {
                    break;
                }
            }

            return(success);
        }