コード例 #1
0
        public static void Search(AresClient client, TCPPacketReader packet)
        {
            ushort ident = packet;

            packet.SkipByte();
            byte          mime  = packet;
            ushort        len   = packet;
            List <byte[]> items = new List <byte[]>();

            List <String> search_words = new List <String>(
                Encoding.UTF8.GetString(packet.ReadBytes(len)).ToUpper().Replace("\0",
                                                                                 " ").Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries)
                );

            UserPool.AUsers.ForEachWhere(x =>
            {
                x.SharedFiles.ForEachWhere(y =>
                {
                    String[] words = y.FileName.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries);
                    words          = words.Concat(y.Title.Split(new String[] { " " }, StringSplitOptions.RemoveEmptyEntries)).ToArray();

                    foreach (String str in words)
                    {
                        if (search_words.Contains(str.ToUpper()))
                        {
                            items.Add(TCPOutbound.SearchHit(client, ident, x, y));
                            break;
                        }
                    }
                },
                                           y => (mime == 0 || mime == 255) || (byte)y.Mime == (mime == 8 ? 0 : mime));
            },
                                         x => x.SocketConnected && x.Browsable);

            List <byte> buffer = new List <byte>();

            foreach (byte[] x in items)
            {
                buffer.AddRange(x);

                if (buffer.Count > 1024)
                {
                    client.SendPacket(TCPOutbound.ClientCompressed(buffer.ToArray()));
                    buffer.Clear();
                }
            }

            if (buffer.Count > 0)
            {
                client.SendPacket(TCPOutbound.ClientCompressed(buffer.ToArray()));
            }

            client.SendPacket(TCPOutbound.EndOfSearch(ident));
        }
コード例 #2
0
        private static bool PopulateMetaData(SharedFile file)
        {
            TCPPacketReader packet = new TCPPacketReader(file.Data);

            packet.SkipBytes(16);

            if (file.Mime == MimeType.ARES_MIME_MP3)
            {
                packet.SkipBytes(4);
            }
            else if (file.Mime == MimeType.ARES_MIME_VIDEO)
            {
                packet.SkipBytes(6);
            }
            else if (file.Mime == MimeType.ARES_MIME_IMAGE)
            {
                packet.SkipBytes(5);
            }

            ushort len     = packet;
            ushort counter = 0;

            file.FileName = String.Empty;
            file.Title    = String.Empty;

            while (packet.Remaining >= 2)
            {
                byte length = packet;
                byte type   = packet;

                if (length > packet.Remaining)
                {
                    return(false);
                }

                switch (type)
                {
                case 1:
                    file.Title = Encoding.UTF8.GetString(packet.ReadBytes(length));
                    break;

                case 15:
                    file.FileName = Encoding.UTF8.GetString(packet.ReadBytes(length));
                    break;

                default:
                    packet.SkipBytes(length);
                    break;
                }

                counter += 2;
                counter += length;

                if (counter >= len)
                {
                    break;
                }
            }

            return(true);
        }