/// <summary> /// Creates object which represents sent private message from application/x-www-form-urlencoded serialization type /// </summary> /// <param name="httpMessage">Original HTTP message from HTTP snooper</param> /// <param name="exportObject">For referencing XChatSnooperExport from XChat object</param> /// <returns>Instance of Xchat sent message</returns> private static XChatPrivateMessage GetXChatPrivateSentMessage(HTTPMsg httpMessage, SnooperExportBase exportObject) { var strippedContent = Encoding.GetEncoding("ISO-8859-2").GetString(httpMessage.HTTPContent.Content); //Convert bytes to string in ISO-8859-2 encoding var parsedUrl = HttpUtility.ParseQueryString(strippedContent, Encoding.GetEncoding("ISO-8859-2")); //Parse query from message body var message = new XChatPrivateMessage(exportObject) { Time = httpMessage.TimeStamp.ToString("dd. MM. yyyy HH:mm:ss"), Text = parsedUrl["message"], Target = parsedUrl["to"], Subject = parsedUrl["subject"] }; //Getting sender nickname from Cookie in header: var requestHeader = httpMessage.HTTPHeader as HttpRequestHeader; List <string> values; //List which contains values from Cookie in HTTP request header if (requestHeader.Fields.TryGetValue("Cookie", out values)) { var sb = new StringBuilder(); foreach (var value in values) { sb.Append(value).Append("; "); } //Concatenes values from Cookie in HTTP header var regex = new Regex(@"[0-9]{8}=[0-9]{8}%3A([0-9a-zA-Z][a-zA-Z0-9\.-_]{2,19})"); //Regular expression for getting message sender nickname var match = regex.Match(sb.ToString()); message.Source = match.Success ? match.Groups[1].ToString() : ""; } else { message.Source = ""; } return(message); }
/// <summary> /// Creates object which represents recieved private message from HTML document /// </summary> /// <param name="httpMessage">Original HTTP message</param> /// <param name="html">Parsed HTML document</param> /// <param name="exportObject">For referencing XChatSnooperExport from XChat object</param> /// <returns>Instance of Xchat received message</returns> private static XChatPrivateMessage GetXChatPrivateReceivedMessage(HTTPMsg httpMessage, HtmlDocument html, SnooperExportBase exportObject) { HtmlNode node; var message = new XChatPrivateMessage(exportObject); var form = html.DocumentNode.SelectSingleNode("//form[@name='readmsg']"); //Node that represents form with class readmsg node = form.SelectSingleNode("//span[@class='offlinesm']/child::a[@title='profil uživatele']/strong"); //Position in document where sender nickname is located message.Source = node?.InnerText; node = form.SelectSingleNode("//table/descendant::table/tr[4]/td[2]"); //Position in document where receiver nickname is located message.Target = node?.InnerText; node = form.SelectSingleNode("//div[@class='boxudaje2']/div[@class='boxudaje3']/descendant::div"); //Position in document where message text is located message.Text = node?.InnerText; node = form.SelectSingleNode("//table/descendant::table/tr[2]/td[2]"); message.Subject = node?.InnerText; message.Time = httpMessage.TimeStamp.ToString("dd. MM. yyyy HH:mm:ss"); return(message); }