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); }
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); } }