Exemple #1
0
            public string VendorString;                 // 提供者 64octets

            public static StartControlConnectionRequest Parse(byte *p, int len)
            {
                if (null == p || len < 156)
                {
                    return(null);
                }

                StartControlConnectionRequest request = new StartControlConnectionRequest();

                request.ContextPtr = unchecked ((SCCRC *)p);

                int size = ntohs(request.ContextPtr->Length);

                if (size < 156)
                {
                    return(null);
                }

                if (1 != ntohs(request.ContextPtr->ControlMessageType))
                {
                    return(null);
                }

                sbyte *ofs = (sbyte *)(p + sizeof(SCCRC));

                request.HostName     = new string(ofs, 0, 64).TrimEnd('\x0');
                request.VendorString = new string(ofs + 64, 0, 64).TrimEnd('\x0');
                return(request);
            }
Exemple #2
0
        protected virtual int HandleConnectionRequest(byte[] buffer, int len)
        {
            fixed(byte *p = buffer)
            {
                StartControlConnectionRequest request = StartControlConnectionRequest.Parse(p, len);

                if (request == null)
                {
                    return(CloseOrAbort(true));
                }

                StartControlConnectionReply reply = new StartControlConnectionReply();

                fixed(StartControlConnectionReply.SCCRC *x = &reply.Context)
                {
                    *(StartControlConnectionRequest.SCCRC *)x = *request.ContextPtr;
                }

                reply.Context.BearerCapabilities = ntohl(2);
                reply.Context.ControlMessageType = ntohs(2);
                reply.Context.MaximumChannels    = 0;
                reply.Context.FirmwareRevision   = ntohs(3);

                reply.Context.ResultCode = 1;
                reply.Context.ErrorCode  = 0;
                reply.HostName           = request.HostName;
                reply.VendorString       = request.VendorString;

                using (MemoryStream ms = reply.Serialize())
                {
                    byte[] message = ms.GetBuffer();
                    SendMessage(message, 0, unchecked ((int)ms.Position));
                }

                m_bState++;
                return(0);
            }
        }