public SsdpMessageInfo ParseSsdpResponse(byte[] data) { using (var ms = new MemoryStream(data)) { using (var reader = new StreamReader(ms, _encoding.GetASCIIEncoding())) { var proto = (reader.ReadLine() ?? string.Empty).Trim(); var method = proto.Split(new[] { ' ' }, 2)[0]; var headers = new Dictionary <string, string>(StringComparer.OrdinalIgnoreCase); for (var line = reader.ReadLine(); line != null; line = reader.ReadLine()) { line = line.Trim(); if (string.IsNullOrEmpty(line)) { break; } var parts = line.Split(new[] { ':' }, 2); if (parts.Length >= 2) { headers[parts[0]] = parts[1].Trim(); } } return(new SsdpMessageInfo { Method = method, Headers = headers, Message = data }); } } }
/// <summary> /// Called when [receive]. /// </summary> /// <param name="bytes">The bytes.</param> private void OnReceiveInternal(byte[] bytes) { LastActivityDate = DateTime.UtcNow; if (OnReceive == null) { return; } var charset = _textEncoding.GetDetectedEncodingName(bytes, bytes.Length, null, false); if (string.Equals(charset, "utf-8", StringComparison.OrdinalIgnoreCase)) { OnReceiveInternal(Encoding.UTF8.GetString(bytes, 0, bytes.Length)); } else { OnReceiveInternal(_textEncoding.GetASCIIEncoding().GetString(bytes, 0, bytes.Length)); } }
protected string ReadString( byte[] data, int count, ref int pos) { string val = _textEncoding.GetASCIIEncoding().GetString(data, pos, count); pos += count; return(val); }
internal void FinishInitialization() { string host = UserHostName; if (version > HttpVersion.Version10 && (host == null || host.Length == 0)) { context.ErrorMessage = "Invalid host name"; return; } string path; Uri raw_uri = null; if (MaybeUri(raw_url.ToLowerInvariant()) && Uri.TryCreate(raw_url, UriKind.Absolute, out raw_uri)) { path = raw_uri.PathAndQuery; } else { path = raw_url; } if ((host == null || host.Length == 0)) { host = UserHostAddress; } if (raw_uri != null) { host = raw_uri.Host; } int colon = host.LastIndexOf(':'); if (colon >= 0) { host = host.Substring(0, colon); } string base_uri = String.Format("{0}://{1}:{2}", (IsSecureConnection) ? (IsWebSocketRequest ? "wss" : "https") : (IsWebSocketRequest ? "ws" : "http"), host, LocalEndPoint.Port); if (!Uri.TryCreate(base_uri + path, UriKind.Absolute, out url)) { context.ErrorMessage = WebUtility.HtmlEncode("Invalid url: " + base_uri + path); return; return; } CreateQueryString(url.Query); if (version >= HttpVersion.Version11) { string t_encoding = Headers["Transfer-Encoding"]; is_chunked = (t_encoding != null && String.Compare(t_encoding, "chunked", StringComparison.OrdinalIgnoreCase) == 0); // 'identity' is not valid! if (t_encoding != null && !is_chunked) { context.Connection.SendError(null, 501); return; } } if (!is_chunked && !cl_set) { if (String.Compare(method, "POST", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(method, "PUT", StringComparison.OrdinalIgnoreCase) == 0) { context.Connection.SendError(null, 411); return; } } if (String.Compare(Headers["Expect"], "100-continue", StringComparison.OrdinalIgnoreCase) == 0) { var output = (HttpResponseStream)context.Connection.GetResponseStream(true); var _100continue = _textEncoding.GetASCIIEncoding().GetBytes("HTTP/1.1 100 Continue\r\n\r\n"); output.InternalWrite(_100continue, 0, _100continue.Length); } }
byte[] GetChunkSizeBytes(int size, bool final) { string str = String.Format("{0:x}\r\n{1}", size, final ? "\r\n" : ""); return(_textEncoding.GetASCIIEncoding().GetBytes(str)); }
public void Scan() { Stream fileStream = null; BinaryReader fileReader = null; try { #if DEBUG Debug.WriteLine(string.Format( "Scanning {0}...", Name)); #endif Streams.Clear(); fileStream = _fileSystem.OpenRead(FileInfo.FullName); fileReader = new BinaryReader(fileStream); byte[] data = new byte[fileStream.Length]; fileReader.Read(data, 0, data.Length); byte[] fileType = new byte[8]; Array.Copy(data, 0, fileType, 0, fileType.Length); FileType = _textEncoding.GetASCIIEncoding().GetString(fileType, 0, fileType.Length); if (FileType != "HDMV0100" && FileType != "HDMV0200") { throw new Exception(string.Format( "Clip info file {0} has an unknown file type {1}.", FileInfo.Name, FileType)); } #if DEBUG Debug.WriteLine(string.Format( "\tFileType: {0}", FileType)); #endif int clipIndex = ((int)data[12] << 24) + ((int)data[13] << 16) + ((int)data[14] << 8) + ((int)data[15]); int clipLength = ((int)data[clipIndex] << 24) + ((int)data[clipIndex + 1] << 16) + ((int)data[clipIndex + 2] << 8) + ((int)data[clipIndex + 3]); byte[] clipData = new byte[clipLength]; Array.Copy(data, clipIndex + 4, clipData, 0, clipData.Length); int streamCount = clipData[8]; #if DEBUG Debug.WriteLine(string.Format( "\tStreamCount: {0}", streamCount)); #endif int streamOffset = 10; for (int streamIndex = 0; streamIndex < streamCount; streamIndex++) { TSStream stream = null; ushort PID = (ushort) ((clipData[streamOffset] << 8) + clipData[streamOffset + 1]); streamOffset += 2; TSStreamType streamType = (TSStreamType) clipData[streamOffset + 1]; switch (streamType) { case TSStreamType.MVC_VIDEO: // TODO break; case TSStreamType.AVC_VIDEO: case TSStreamType.MPEG1_VIDEO: case TSStreamType.MPEG2_VIDEO: case TSStreamType.VC1_VIDEO: { TSVideoFormat videoFormat = (TSVideoFormat) (clipData[streamOffset + 2] >> 4); TSFrameRate frameRate = (TSFrameRate) (clipData[streamOffset + 2] & 0xF); TSAspectRatio aspectRatio = (TSAspectRatio) (clipData[streamOffset + 3] >> 4); stream = new TSVideoStream(); ((TSVideoStream)stream).VideoFormat = videoFormat; ((TSVideoStream)stream).AspectRatio = aspectRatio; ((TSVideoStream)stream).FrameRate = frameRate; #if DEBUG Debug.WriteLine(string.Format( "\t{0} {1} {2} {3} {4}", PID, streamType, videoFormat, frameRate, aspectRatio)); #endif } break; case TSStreamType.AC3_AUDIO: case TSStreamType.AC3_PLUS_AUDIO: case TSStreamType.AC3_PLUS_SECONDARY_AUDIO: case TSStreamType.AC3_TRUE_HD_AUDIO: case TSStreamType.DTS_AUDIO: case TSStreamType.DTS_HD_AUDIO: case TSStreamType.DTS_HD_MASTER_AUDIO: case TSStreamType.DTS_HD_SECONDARY_AUDIO: case TSStreamType.LPCM_AUDIO: case TSStreamType.MPEG1_AUDIO: case TSStreamType.MPEG2_AUDIO: { byte[] languageBytes = new byte[3]; Array.Copy(clipData, streamOffset + 3, languageBytes, 0, languageBytes.Length); string languageCode = _textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length); TSChannelLayout channelLayout = (TSChannelLayout) (clipData[streamOffset + 2] >> 4); TSSampleRate sampleRate = (TSSampleRate) (clipData[streamOffset + 2] & 0xF); stream = new TSAudioStream(); ((TSAudioStream)stream).LanguageCode = languageCode; ((TSAudioStream)stream).ChannelLayout = channelLayout; ((TSAudioStream)stream).SampleRate = TSAudioStream.ConvertSampleRate(sampleRate); ((TSAudioStream)stream).LanguageCode = languageCode; #if DEBUG Debug.WriteLine(string.Format( "\t{0} {1} {2} {3} {4}", PID, streamType, languageCode, channelLayout, sampleRate)); #endif } break; case TSStreamType.INTERACTIVE_GRAPHICS: case TSStreamType.PRESENTATION_GRAPHICS: { byte[] languageBytes = new byte[3]; Array.Copy(clipData, streamOffset + 2, languageBytes, 0, languageBytes.Length); string languageCode = _textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length); stream = new TSGraphicsStream(); stream.LanguageCode = languageCode; #if DEBUG Debug.WriteLine(string.Format( "\t{0} {1} {2}", PID, streamType, languageCode)); #endif } break; case TSStreamType.SUBTITLE: { byte[] languageBytes = new byte[3]; Array.Copy(clipData, streamOffset + 3, languageBytes, 0, languageBytes.Length); string languageCode = _textEncoding.GetASCIIEncoding().GetString(languageBytes, 0, languageBytes.Length); #if DEBUG Debug.WriteLine(string.Format( "\t{0} {1} {2}", PID, streamType, languageCode)); #endif stream = new TSTextStream(); stream.LanguageCode = languageCode; } break; } if (stream != null) { stream.PID = PID; stream.StreamType = streamType; Streams.Add(PID, stream); } streamOffset += clipData[streamOffset] + 1; } IsValid = true; } finally { if (fileReader != null) { fileReader.Dispose(); } if (fileStream != null) { fileStream.Dispose(); } } }