public void HandleCapture(byte[] buffer, int offset, int length) { TimeSpan timeOffset = DateTime.UtcNow - _connectedAt; MemoryStream stream = PrepareSendFrame(RPCAP_VERSION, RPCAP_MSG_PACKET, 0); NetworkWriter writer = new NetworkWriter(stream); uint seconds = (uint)Math.Floor(timeOffset.TotalSeconds); uint microseconds = (uint)((timeOffset.Ticks % TimeSpan.TicksPerSecond) / 10L); int bytesToTransmit = Math.Min(_snapLength, length); writer.WriteUnsigned32(seconds); writer.WriteUnsigned32(microseconds); writer.WriteUnsigned32((uint)bytesToTransmit); writer.WriteUnsigned32((uint)length); writer.WriteUnsigned32(_packetNumber++); stream.Write(buffer, offset, bytesToTransmit); CompleteSendFrame(stream); }
void HandleStartCaptureRequest(byte[] data) { // Read in the various fields: NetworkReader reader = new NetworkReader(data); uint snapLength = reader.ReadUnsigned32(); uint readTimeout = reader.ReadUnsigned32(); ushort flags = reader.ReadUnsigned16(); ushort clientDataPortOrZero = reader.ReadUnsigned16(); ushort filterType = reader.ReadUnsigned16(); ushort dummy = reader.ReadUnsigned16(); uint numberOfItems = reader.ReadUnsigned32(); for (int i = 0; i < numberOfItems; i++) { ushort code = reader.ReadUnsigned16(); byte jumpTrue = reader.ReadUnsigned8(); byte jumpFalse = reader.ReadUnsigned8(); int instructionValue = reader.ReadSigned32(); } // Set up a data port: if (_dataConnectorHandle == null) { _dataConnectorHandle = _service.Reactor.ListenStream(new RemoteCaptureProtocolDataFactory(this)); } int bufferSize = (int)snapLength; ushort serverDataPort = (ushort)_dataConnectorHandle.ListeningOnPort; MemoryStream stream = PrepareSendFrame(RPCAP_VERSION, RPCAP_MSG_STARTCAP_REPLY, 0); NetworkWriter writer = new NetworkWriter(stream); writer.WriteSigned32(bufferSize); writer.WriteUnsigned16(serverDataPort); writer.WriteUnsigned16(0); // (This is a reserved field.) CompleteSendFrame(stream); }
void HandleOpenRequest(byte[] data) { string deviceName = Encoding.UTF8.GetString(data); MemoryStream stream = PrepareSendFrame(RPCAP_VERSION, RPCAP_MSG_OPEN_REPLY, 0); NetworkWriter writer = new NetworkWriter(stream); uint linkType = DLT_EN10MB; uint offsetFromUtc = 0; writer.WriteUnsigned32(linkType); writer.WriteUnsigned32(offsetFromUtc); CompleteSendFrame(stream); }