コード例 #1
0
        public TwitterEventUserShow(SnooperExportBase exportBase, SPDYMsg spdyMsg) : base(exportBase, spdyMsg)
        {
            var uriParams = (spdyMsg.Header as SPDYRequestHeader).URIParameters;

            this.SourceUserId = uriParams["source_id"];
            this.TargetUserId = uriParams["target_id"];
        }
コード例 #2
0
        /// <summary>
        /// Processes json with messages that were loaded when user joined private chat
        /// </summary>
        /// <param name="strippedContent">Json used for parsing</param>
        /// <param name="exportObject">For referencing LideSnooperExport from Lide object</param>
        /// <param name="prvtMsgs">List where private messages are stored after parsing</param>
        private static void GetLideLoadedPrivateMessage(string strippedContent, SnooperExportBase exportObject, List <LidePrivateMessage> prvtMsgs)
        {
            var o = JObject.Parse(strippedContent);

            if (!(o.SelectToken("$.data.last_events") is JArray))
            {
                return;
            }

            var lastEvents = (JArray)o.SelectToken("$.data.last_events");

            foreach (var lastEvent in lastEvents)
            {
                if (lastEvent.SelectToken("$.event_type")?.ToString() != "message_sent")
                {
                    continue;
                }

                var privateMessage = new LidePrivateMessage(exportObject)
                {
                    SourceId  = lastEvent.SelectToken("$.user_id")?.ToString(),
                    TargetId  = lastEvent.SelectToken("$.target_user_id")?.ToString(),
                    Timestamp = lastEvent.SelectToken("$.created")?.ToString(),
                    Text      = lastEvent.SelectToken("$.message")?.ToString()
                };

                prvtMsgs.Add(privateMessage);
            }
        }
コード例 #3
0
        }                              //EF

        public SIPAuthentization(SnooperExportBase exportBase) : base(exportBase)
        {
            this.Type = SIPEventType.Authentization;
            //TimeStamp = new DateTime(2014, 1, 31, 21, 15, 07);
            this.State        = SipAuthenticationState.UNKNOWN;
            this.RejectReason = string.Empty;
        }
コード例 #4
0
        protected TwitterEventBase HandleEvent <TTwitterEventClass>(SnooperExportBase exportObject, IExportSource exportSource, SPDYMsg spdyMsg)
        {
            if (!typeof(TTwitterEventClass).IsSubclassOf(typeof(TwitterEventBase)))
            {
                throw new Exception("Not a TwitterEventBase subclass");
            }

            TwitterEventBase twitterEvent;

            try {
                twitterEvent = (TwitterEventBase)Activator.CreateInstance(typeof(TTwitterEventClass), new object[] { exportObject, spdyMsg });
            }
            catch (Exception) {
                return(null);
            }

            this.OnAfterProtocolParsing();

            this.OnBeforeDataExporting();
            twitterEvent.ExportSources.Add(exportSource);
            this.SnooperExport.AddExportObject(twitterEvent);
            this.OnAfterDataExporting();

            return(twitterEvent);
        }
コード例 #5
0
        protected void HandleSyncMessage(SnooperExportBase exportObject, IExportSource exportSource, MNMessagesSyncClientPayload syncClientPayload, DateTime timestamp, IEnumerable <PmFrameBase> frames)
        {
            foreach (var syncDeltaWrapper in syncClientPayload.Deltas)
            {
                MessengerEventBase deltaEvent = null;
                if (syncDeltaWrapper.DeltaNewMessage != null)
                {
                    deltaEvent = new MessengerEventReceiveMessage(exportObject, syncDeltaWrapper.DeltaNewMessage);
                }
                else
                {
                    continue;
                }

                this.OnAfterProtocolParsing();

                deltaEvent.TimeStamp = timestamp;
                deltaEvent.Frames.AddRange(frames);

                this.OnBeforeDataExporting();
                deltaEvent.ExportSources.Add(exportSource);
                this.SnooperExport.AddExportObject(deltaEvent);
                this.OnAfterDataExporting();
            }
        }
コード例 #6
0
        /// <summary>
        /// Creates Facebook event object by parsing JSON data from content of HTTP message.
        /// </summary>
        /// <param name="msgJson">JSON data from content of HTTP message.</param>
        /// <param name="exportObject">For referencing FacebookSnooperExport from Facebook object.</param>
        /// <param name="index">Index to array inside JSON data where we can relevant data.</param>
        /// <returns>Parsed event object from Facebook conversation.</returns>
        private static FacebookEventRead GetFacebookEventRead(JObject msgJson, SnooperExportBase exportObject, int index)
        {
            var parsedToken = msgJson["ms"][index];
            var fbEvent     = new FacebookEventRead(exportObject)
            {
                EventType = (string)parsedToken["event"],
                UserId    = (ulong)msgJson["u"],
                Timestamp = (ulong)parsedToken["timestamp"]
            };

            var threadIds = parsedToken["thread_fbids"] as JArray;

            if (threadIds != null)
            {
                foreach (var threadId in threadIds)
                {
                    fbEvent.ThreadIds.Add((ulong)threadId);
                }
            }

            if (!(parsedToken["other_user_fbids"] is JArray))
            {
                return(fbEvent);
            }

            var targetIds = (JArray)parsedToken["other_user_fbids"];

            foreach (var targetId in targetIds)
            {
                fbEvent.ThreadIds.Add((ulong)targetId);
            }

            return(fbEvent);
        }
コード例 #7
0
        }                                   //EF

        public MessengerEventConnect(SnooperExportBase exportBase, Byte[] payload) : base(exportBase)
        {
            var connectMessage = new ConnectMessage();

            connectMessage.Read(CompactProtocolForPayload(DecompressPayload(payload), 0));

            this.UserId = connectMessage.ClientInfo.UserId.ToString();
        }
コード例 #8
0
 public ExportVm(WindsorContainer investigationWindsorContainer, SnooperExportBase model) : base(investigationWindsorContainer, model)
 {
     this.Export = model;
     //if (this.Export.ExportObjects == null) //no exported objects present
     //this.SnooperExportedObjects = new ViewModelsIoCObservableCollection<SnooperExportedObjectBaseVm, SnooperExportedObjectBase>(new List<SnooperExportedObjectBase>(), this.InvestigationOrAppWindsorContainer);
     //else this.SnooperExportedObjects = new ViewModelsIoCObservableCollection<SnooperExportedObjectBaseVm, SnooperExportedObjectBase>(this.Export.ExportObjects, this.InvestigationOrAppWindsorContainer);
     //data.ExportResultUpdated += this.Data_ExportResultUpdated;
 }
コード例 #9
0
        }                                          //EF

        public HangoutsEventTyping(SnooperExportBase exportBase, byte[] protobufData) : base(exportBase)
        {
            var setTypingRequest = SetTypingRequest.Parser.ParseFrom(protobufData);

            this.Type           = setTypingRequest.Type;
            this.ConversationId = setTypingRequest.ConversationId.Id;

            this.ParseRequestHeader(setTypingRequest.RequestHeader);
        }
コード例 #10
0
        }                                       //EF

        public HangoutsEventActiveClient(SnooperExportBase exportBase, byte[] protobufData) : base(exportBase)
        {
            var setActiveClientRequest = SetActiveClientRequest.Parser.ParseFrom(protobufData);

            this.Active  = setActiveClientRequest.IsActive;
            this.FullJid = setActiveClientRequest.FullJid;

            this.ParseRequestHeader(setActiveClientRequest.RequestHeader);
        }
コード例 #11
0
        }                                             //EF

        public HangoutsEventChatMessage(SnooperExportBase exportBase, byte[] protobufData) : base(exportBase)
        {
            var sendChatMessageRequest = SendChatMessageRequest.Parser.ParseFrom(protobufData);

            this.Content        = string.Join("", sendChatMessageRequest.MessageContent.Segment.Select(segment => segment.Text));
            this.ConversationId = sendChatMessageRequest.EventRequestHeader.ConversationId.Id;

            this.ParseRequestHeader(sendChatMessageRequest.RequestHeader);
        }
コード例 #12
0
        public ExportVm(WindsorContainer investigationWindsorContainer, SnooperExportBase model) : base(investigationWindsorContainer, model)
        {
            this.Export = model;
            //if (this.Export.ExportObjects == null) //no exported objects present
            //this.SnooperExportedObjects = new ViewModelsIoCObservableCollection<SnooperExportedObjectBaseVm, SnooperExportedObjectBase>(new List<SnooperExportedObjectBase>(), this.InvestigationOrAppWindsorContainer);
            //else this.SnooperExportedObjects = new ViewModelsIoCObservableCollection<SnooperExportedObjectBaseVm, SnooperExportedObjectBase>(this.Export.ExportObjects, this.InvestigationOrAppWindsorContainer);
            //data.ExportResultUpdated += this.Data_ExportResultUpdated;

            Task.Factory.StartNew(() => Messenger.Default.Register <FrameMessage>(this, this.FrameMessageActionHandler));
        }
コード例 #13
0
ファイル: SIPCall.cs プロジェクト: Seabreg/NetfoxDetective
 private SIPCall() { }//EF
 public SIPCall(SnooperExportBase exportBase) : base(exportBase)
 {
     this.Type = SIPEventType.Call;
     //TimeStamp = new DateTime(2014, 1, 31, 21, 15, 07);
     //_end = new DateTime(2015, 2, 1, 21, 16, 07);
     this.State = SipCallState.UNKNOWN;
     this.RejectReason = string.Empty;
     //this.ExportedPayloads = new RTPExportedPayload[0];
     this.CallId = string.Empty;
 }
コード例 #14
0
        private void OnSnooperExport(SnooperExportBase snooperExportBase)
        {
            //using (var dbx = this.InvestigationWindsorContainer.Resolve<NetfoxDbContext>())
            //{
            //    dbx.SnooperExports.Add(snooperExportBase);
            //    dbx.SaveChanges();
            //}
            var exports = this.InvestigationWindsorContainer.Resolve <List <SnooperExportBase> >();

            exports.Add(snooperExportBase);
        }
コード例 #15
0
        /// <summary>
        /// Creates Facebook comment by parsing JSON data from content of HTTP message.
        /// </summary>
        /// <param name="msgJson">JSON data from content of HTTP message.</param>
        /// <param name="exportObject">For referencing FacebookSnooperExport from Facebook object.</param>
        /// <param name="index">Index to array inside JSON data where we can relevant data.</param>
        /// <returns>Parsed comment from HTTP content.</returns>
        private static FacebookComment GetFacebookComment(JObject msgJson, SnooperExportBase exportObject, int index)
        {
            var parsedComment = new FacebookComment(exportObject)
            {
                Text        = (string)msgJson["ms"][index]["comments"][0]["body"]["text"],
                SenderId    = (ulong)msgJson["ms"][index]["comments"][0]["author"],
                FbTimeStamp = (ulong)msgJson["ms"][index]["comments"][0]["timestamp"]["time"]
            };

            return(parsedComment);
        }
コード例 #16
0
        private void OnSnooperExport(SnooperExportBase snooperExportBase)
        {
            //using (var dbx = this.InvestigationWindsorContainer.Resolve<NetfoxDbContext>())
            //{
            //    dbx.SnooperExports.Add(snooperExportBase);
            //    dbx.SaveChanges();
            //}
            var exports = this.InvestigationWindsorContainer.Resolve <VirtualizingObservableDBSetPagedCollection <SnooperExportBase> >();

            exports.Add(snooperExportBase);
        }
コード例 #17
0
 private void OnSnooperExport(SnooperExportBase snooperExportBase)
 {
     if (this.SnooperExportCollection.IsNotifyImmidiately)
     {
         this.SnooperExportCollection.Add(snooperExportBase);
     }
     else
     {
         this._snooperExportCache.Add(snooperExportBase);
     }
 }
コード例 #18
0
        /// <summary>
        /// Processes json with user info that was loaded when user joined discussion room
        /// </summary>
        /// <param name="tokenUser">Token that represents json with user info</param>
        /// <param name="users">List where loaded discussion users are stored after parsing</param>
        /// <param name="exportObject">For referencing LideSnooperExport from Lide object</param>
        private static void GetLideUser(JToken tokenUser, List <LideUser> users, SnooperExportBase exportObject)
        {
            int tmpInt;
            var user = new LideUser(exportObject)
            {
                UserId   = tokenUser?.SelectToken("$.id")?.ToString(),
                Nickname = tokenUser?.SelectToken("$.nickname")?.ToString(),
                SexId    = Int32.TryParse(tokenUser?.SelectToken("$.sex_id")?.ToString(), out tmpInt) ? tmpInt : (int?)null
            };

            users.Add(user);
        }
コード例 #19
0
 public EventNewMessage(SnooperExportBase exportBase, string from, string to, string cc, string bcc, string subject, string content) : base(exportBase)
 {
     this.Mail = new MailMsg
     {
         From    = @from,
         To      = to,
         Cc      = cc,
         Bcc     = bcc,
         Subject = subject,
         Body    = content
     };
 }
コード例 #20
0
ファイル: SIPCall.cs プロジェクト: mvondracek/NetfoxDetective
        }                    //EF

        public SIPCall(SnooperExportBase exportBase) : base(exportBase)
        {
            this.Type = SIPEventType.Call;
            //TimeStamp = new DateTime(2014, 1, 31, 21, 15, 07);
            //_end = new DateTime(2015, 2, 1, 21, 16, 07);
            this.State        = SipCallState.UNKNOWN;
            this.RejectReason = string.Empty;
            //this.ExportedPayloads = new RTPExportedPayload[0];
            this.CallId               = string.Empty;
            this.RTPAddressesString   = new PersistableJsonSerializableString();
            this.PossibleCodecsString = new PersistableJsonSerializableString();
        }
コード例 #21
0
        /// <summary>
        /// Processes json with discussion info that is loaded when user joins discussion
        /// </summary>
        /// <param name="strippedContent">Json decoded from base64-frpc format</param>
        /// <param name="exportObject">For referencing LideSnooperExport from Lide object</param>
        /// <param name="discussion">Object with discussion info</param>
        /// <param name="discussionMsgs">List where loaded discussion messages are stored after parsing</param>
        /// <param name="users">List where loaded discussion users are stored after parsing</param>
        /// <param name="photos">List where loaded users photos are stored after parsing</param>
        private static void ProcessLideDiscussionInfo(string strippedContent, SnooperExportBase exportObject, ref LideDiscussion discussion, List <LideDiscussionMessage> discussionMsgs, List <LideUser> users, List <LidePhoto> photos)
        {
            int temp;

            var o = JObject.Parse(strippedContent);

            discussion = new LideDiscussion(exportObject) //Parsing of discussion info
            {
                Name         = o.SelectToken("$.data.discussion.name")?.ToString(),
                Description  = o.SelectToken("$.data.discussion.description")?.ToString(),
                DiscussionId = Int32.TryParse(o.SelectToken("$.data.discussion.id")?.ToString(), out temp) ? temp : (int?)null
            };

            if (o.SelectToken("$.data.contributions") is JArray) //Parsing messages that already were in discussion when user joined
            {
                var messageArray = (JArray)o.SelectToken("$.data.contributions");
                foreach (var message in messageArray)
                {
                    GetLideLoadedDiscussionMessage(message, discussionMsgs, exportObject);

                    if (!(message.SelectToken("$.contributions") is JArray)) //If message contains nested messages
                    {
                        continue;
                    }
                    var nestedMessageArray = (JArray)message.SelectToken("$.contributions");

                    foreach (var nestedMessage in nestedMessageArray)
                    {
                        GetLideLoadedDiscussionMessage(nestedMessage, discussionMsgs, exportObject);
                    }
                }
            }

            if (string.IsNullOrEmpty(o.SelectToken("$.data.contributing_users")?.ToString())) //If Json does not contain informations about users
            {
                return;
            }

            var contributingUsers = o.SelectToken("$.data.contributing_users");

            foreach (var user in contributingUsers.Children())
            {
                if (!(user is JProperty))
                {
                    continue;
                }

                var usrProperty = (JProperty)user;

                GetLideUser(usrProperty.Value, users, exportObject);
                GetLidePhoto(usrProperty.Value, photos, users[users.Count - 1].Nickname, exportObject);
            }
        }
コード例 #22
0
        public MessengerEventTyping(SnooperExportBase exportBase, Byte[] payload) : base(exportBase)
        {
            /*
             * {
             *  "to" : "100010419973288",
             *  "state" : 1
             * }
             */
            var jsonPayload = DecompressJSONPayload(payload);

            this.To    = (string)jsonPayload["to"];
            this.State = (int)jsonPayload["state"];
        }
コード例 #23
0
        /// <summary>
        /// Creates Facebook event object by parsing JSON data from content of HTTP message.
        /// </summary>
        /// <param name="msgJson">JSON data from content of HTTP message.</param>
        /// <param name="exportObject">For referencing FacebookSnooperExport from Facebook object.</param>
        /// <param name="index">Index to array inside JSON data where we can relevant data.</param>
        /// <returns>Parsed event object from Facebook conversation.</returns>
        private static FacebookEventTyping GetFacebookEventTyping(JObject msgJson, SnooperExportBase exportObject, int index)
        {
            var parsedToken = msgJson["ms"][index];
            var fbEvent     = new FacebookEventTyping(exportObject)
            {
                EventType = (string)parsedToken["type"],
                UserId    = (ulong)msgJson["u"],
                ThreadId  = (ulong)parsedToken["thread_fbid"],
                SenderId  = (ulong)parsedToken["from"]
            };

            return(fbEvent);
        }
コード例 #24
0
        public TwitterEventCreateTweet(SnooperExportBase exportBase, SPDYMsg spdyMsg) : base(exportBase, spdyMsg)
        {
            var spdyMsgContent = spdyMsg.Content;

            if (spdyMsgContent == null)
            {
                throw new Exception("Missing message body");
            }

            var fields = spdyMsgContent.GetFormUrlEncodedData();

            this.Text = fields["status"];
        }
コード例 #25
0
        }                                           //EF

        public MessengerEventForegroundState(SnooperExportBase exportBase, Byte[] payload) : base(exportBase)
        {
            /*
             * {
             *  "foreground" : 1,
             *  "keepalive_timeout" : 60
             * }
             */
            var jsonPayload = DecompressJSONPayload(payload);

            this.ForegroundState  = (int)jsonPayload["foreground"];
            this.KeepaliveTimeout = (int)jsonPayload["keepalive_timeout"];
        }
コード例 #26
0
        /// <summary>
        /// Creates Facebook message by parsing JSON data from content of HTTP message.
        /// </summary>
        /// <param name="msgJson">JSON data from content of HTTP message.</param>
        /// <param name="exportObject">For referencing FacebookSnooperExport from Facebook object.</param>
        /// <param name="index">Index to array inside JSON data where we can relevant data.</param>
        /// <returns>Parsed message from Facebook conversation.</returns>
        private static FacebookMessage GetFacebookMessage(JObject msgJson, SnooperExportBase exportObject, int index)
        {
            var parsedMessage = new FacebookMessage(exportObject)
            {
                Text        = (string)msgJson["ms"][index]["message"]["body"],
                SourceType  = (string)msgJson["ms"][index]["message"]["source"],
                SenderId    = (ulong)msgJson["ms"][index]["message"]["sender_fbid"],
                FbTimeStamp = (ulong)msgJson["ms"][index]["message"]["timestamp"]
            };
            var userId = (ulong)msgJson["u"];

            parsedMessage.TargetId = userId == parsedMessage.SenderId ? (ulong)msgJson["ms"][index]["message"]["other_user_fbid"] : userId;
            return(parsedMessage);
        }
コード例 #27
0
        }                                       //EF

        public MessengerEventSendMessage(SnooperExportBase exportBase, Byte[] payload) : base(exportBase)
        {
            var sendMessageRequest = new SendMessageRequest();

            sendMessageRequest.Read(CompactProtocolForPayload(DecompressPayload(payload)));

            this.To          = sendMessageRequest.To;
            this.Body        = sendMessageRequest.Body;
            this.Attachement = sendMessageRequest.ObjectAttachement;

            var locationAttachementCoordinates = sendMessageRequest.LocationAttachement?.Coordinates;

            if (locationAttachementCoordinates != null)
            {
                this.LocationAttachement = locationAttachementCoordinates.Longitude + " " + locationAttachementCoordinates.Latitude;
            }
        }
コード例 #28
0
        /// <summary>
        /// Creates Facebook status by parsing content of HTTP message.
        /// </summary>
        /// <param name="msg">Content of HTTP message.</param>
        /// <param name="exportObject">For referencing FacebookSnooperExport from Facebook object.</param>
        /// <returns>Parsed comment from HTTP content.</returns>
        private static FacebookStatus GetFacebookStatus(HTTPMsg msg, SnooperExportBase exportObject)
        {
            var httpContent     = msg.HTTPContent.Content;
            var strippedContent = Encoding.Default.GetString(httpContent);

            // parses urlencoded data
            var parsedUrl = HttpUtility.ParseQueryString(strippedContent);

            var status = new FacebookStatus(exportObject)
            {
                FacebookStatusTimestamp = parsedUrl["ttstamp"],
                SenderId   = parsedUrl["__user"],
                TargetId   = parsedUrl["xhpc_targetid"],
                StatusText = parsedUrl["xhpc_message_text"]
            };

            return(status);
        }
コード例 #29
0
        // Handle event of given event class
        protected MessengerEventBase HandleEvent <THangoutsEventClass>(SnooperExportBase exportObject, IExportSource exportSource, byte[] payload)
        {
            if (!typeof(THangoutsEventClass).IsSubclassOf(typeof(MessengerEventBase)))
            {
                throw new Exception("Not a MessengerEventBase subclass");
            }

            // try, except create report
            var messengerEvent = (MessengerEventBase)Activator.CreateInstance(typeof(THangoutsEventClass), new object[] { exportObject, payload });

            this.OnAfterProtocolParsing();

            this.OnBeforeDataExporting();
            messengerEvent.ExportSources.Add(exportSource);
            this.SnooperExport.AddExportObject(messengerEvent);
            this.OnAfterDataExporting();

            return(messengerEvent);
        }
コード例 #30
0
        public TwitterEventSendMessage(SnooperExportBase exportBase, SPDYMsg spdyMsg) : base(exportBase, spdyMsg)
        {
            var spdyMsgContent = spdyMsg.Content;

            if (spdyMsgContent == null)
            {
                throw  new Exception("Missing message body");
            }

            var fields = spdyMsgContent.GetFormUrlEncodedData();

            // ConversationID is in format of RecipientID-SenderID
            var conversationId = fields["conversation_id"];
            var participants   = conversationId.Split('-');

            this.Recipient = participants[0];
            this.Sender    = participants[1];

            this.Text = fields["text"];
        }