public static RawBrowserMessageEnvelop Deserialize(BinaryReader r) { var e = new RawBrowserMessageEnvelop { }; e.MessageType = StreamHelper.ReadString(r); if (r.ReadBoolean()) { e.Message = new(); e.Message.Url = StreamHelper.ReadString(r); e.Message.File = StreamHelper.ReadString(r); e.Message.Method = StreamHelper.ReadString(r); e.Message.RequestBody = StreamHelper.ReadString(r); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict1); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict2); StreamHelper.ReadStateCookies(r, out Dictionary <string, string> dict3); e.Message.RequestHeaders = dict1; e.Message.ResponseHeaders = dict2; e.Message.Cookies = dict3; } var count = r.ReadInt32(); e.VideoIds = new string[count]; for (int i = 0; i < count; i++) { e.VideoIds[i] = r.ReadString(); } if (r.ReadBoolean()) { count = r.ReadInt32(); var list = new RawBrowserMessage[count]; for (int i = 0; i < count; i++) { var message = new RawBrowserMessage(); message.Url = StreamHelper.ReadString(r); message.File = StreamHelper.ReadString(r); message.Method = StreamHelper.ReadString(r); message.RequestBody = StreamHelper.ReadString(r); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict1); StreamHelper.ReadStateHeaders(r, out Dictionary <string, List <string> > dict2); StreamHelper.ReadStateCookies(r, out Dictionary <string, string> dict3); message.RequestHeaders = dict1; message.ResponseHeaders = dict2; message.Cookies = dict3; list[i] = message; } e.Messages = list; } return(e); }
public static void Serialize(RawBrowserMessageEnvelop e, BinaryWriter w) { w.Write(1); w.Write(e.MessageType ?? string.Empty); w.Write(e.Message != null); if (e.Message != null) { w.Write(e.Message.Url ?? string.Empty); w.Write(e.Message.File ?? string.Empty); w.Write(e.Message.Method ?? string.Empty); w.Write(e.Message.RequestBody ?? string.Empty); StreamHelper.WriteStateHeaders(e.Message.RequestHeaders, w); StreamHelper.WriteStateHeaders(e.Message.ResponseHeaders, w); StreamHelper.WriteStateCookies(e.Message.Cookies, w); } var count = e.VideoIds?.Length ?? 0; w.Write(count); if (e.VideoIds != null && e.VideoIds.Length > 0) { foreach (var item in e.VideoIds) { w.Write(item); } } w.Write(e.Messages != null); if (e.Messages != null) { count = e.Messages.Length; w.Write(count); foreach (var message in e.Messages) { w.Write(message.Url ?? string.Empty); w.Write(message.File ?? string.Empty); w.Write(message.Method ?? string.Empty); w.Write(message.RequestBody ?? string.Empty); StreamHelper.WriteStateHeaders(message.RequestHeaders, w); StreamHelper.WriteStateHeaders(message.ResponseHeaders, w); StreamHelper.WriteStateCookies(message.Cookies, w); } } }
public RawBrowserMessageEnvelop Parse(Stream stream) { var envelop = new RawBrowserMessageEnvelop(); var reader = new JsonTextReader(new StreamReader(stream)); if (reader.Read() && reader.TokenType == JsonToken.StartObject) { while (reader.Read()) { if (reader.TokenType == JsonToken.EndObject) { break; } var messageType = ReadProperty <string>(reader, "messageType"); if (messageType != null) { envelop.MessageType = messageType; } var customData = ReadProperty <string>(reader, "customData"); if (customData != null) { envelop.CustomData = customData; } if (IsObjectStart(reader, "message")) { var msg = ReadMessageObject(reader); envelop.Message = msg; } if (IsListStart(reader, "messages")) { var list = new List <RawBrowserMessage>(); while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } if (reader.TokenType == JsonToken.StartObject) { var msg = ReadMessageObject(reader); list.Add(msg); envelop.Messages = list.ToArray(); } } } if (IsListStart(reader, "videoIds")) { var list = new List <RawBrowserMessage>(); while (reader.Read()) { if (reader.TokenType == JsonToken.EndArray) { break; } if (reader.TokenType == JsonToken.StartObject) { var msg = ReadMessageObject(reader); list.Add(msg); envelop.Messages = list.ToArray(); } } } SkipUnknownParts(reader); } } return(envelop); }
internal static void Handle(RawBrowserMessageEnvelop envelop) { //Log.Debug("Type: " + envelop.MessageType); if (envelop.MessageType == "videoIds") { foreach (var item in envelop.VideoIds) { ApplicationContext.VideoTracker.AddVideoDownload(item); } return; } if (envelop.MessageType == "clear") { ApplicationContext.VideoTracker.ClearVideoList(); return; } if (envelop.MessageType == "sync") { return; } if (envelop.MessageType == "custom") { var args = ArgsProcessor.ParseArgs(envelop.CustomData.Split('\r')); ArgsProcessor.Process(args); return; } var rawMessage = envelop.Message; if (rawMessage == null && envelop.Messages == null) { Log.Debug("Raw message/messages is null"); return; } ; switch (envelop.MessageType) { case "download": { var message = Parse(rawMessage); if (!(Helpers.IsBlockedHost(message.Url) || Helpers.IsCompressedJSorCSS(message.Url))) { ApplicationContext.CoreService.AddDownload(message); } break; } case "links": { var messages = new List <Message>(envelop.Messages.Length); foreach (var msg in envelop.Messages) { var message = Parse(msg); messages.Add(message); } ApplicationContext.CoreService.AddBatchLinks(messages); break; } case "video": { var message = Parse(rawMessage); var contentType = message.GetResponseHeaderFirstValue("Content-Type"); if (VideoUrlHelper.IsYtFormat(contentType)) { VideoUrlHelper.ProcessPostYtFormats(message); } //if (VideoUrlHelper.IsFBFormat(contentType, message.Url)) //{ // VideoUrlHelper.ProcessPostFBFormats(message, ApplicationContext.Core); //} if (VideoUrlHelper.IsHLS(contentType)) { VideoUrlHelper.ProcessHLSVideo(message); } if (VideoUrlHelper.IsDASH(contentType)) { VideoUrlHelper.ProcessDashVideo(message); } if (!VideoUrlHelper.ProcessYtDashSegment(message)) { if (VideoUrlHelper.IsNormalVideo(contentType, message.Url, message.GetContentLength())) { VideoUrlHelper.ProcessNormalVideo(message); } } break; } } }