Example #1
0
        public void Send(IMessagePart message, bool correctLength)
        {
            List <IOVector> vecs = new List <IOVector> ();

            int length = 0;

            //vecs.AddRange (message);

            foreach (IOVector v in message)
            {
                vecs.Add(v);
                length += v.Length;
            }

            IOVector[] iovec = vecs.ToArray();

            Trace.WriteLine("Vectors: " + iovec.Length + " Length: " + length);

            if (length % 4 != 0)
            {
                Trace.WriteLine("Error: % 4");
            }

            ushort nBlocks = (ushort)(length / 4);

            Trace.WriteLine("nBlocks: " + nBlocks);

            if (correctLength)
            {
                unsafe {
                    Request *rq = (Request *)iovec[0].Base;
                    rq->Length = nBlocks;
                }
            }

            Trace.WriteLine("WritePoll: " + sock.Poll(-1, SelectMode.SelectWrite));
            VectorIO.Write(fd, iovec);
            //FallbackWrite (iovec);
            //queue.Enqueue (message);
        }
Example #2
0
        public unsafe void ReadMessage()
        {
            byte[] bs = ms.GetBuffer();

            //Trace.WriteLine (ms.Length);

            //TODO: stream ptr might move during reads; temp solution only
            fixed(byte *bp = bs)
            {
                ReadBlocks(1);

                Request *rq = (Request *)bp;

                Trace.WriteLine(rq->Opcode);

                Trace.WriteLine("Length: " + rq->Length);
                ReadBlocks((int)rq->Length);

                if (rq->Opcode >= 128)
                {
                    Trace.WriteLine("Extension Request");
                }

                switch (rq->Opcode)
                {
                case 1:                         //CreateWindow
                    Trace.WriteLine("CreateWindow");
                    break;

                case 15:                         //QueryTree
                    Trace.WriteLine("QueryTree");
                    break;

                case 98:                         //QueryExtension
                    Trace.WriteLine("QueryExtension");
                    break;
                }
            }
        }