diff --git a/InternalPythonModules/android/TskCallLogsParser.py b/InternalPythonModules/android/TskCallLogsParser.py index 66ea27eee3..3bc0e0141b 100644 --- a/InternalPythonModules/android/TskCallLogsParser.py +++ b/InternalPythonModules/android/TskCallLogsParser.py @@ -17,6 +17,8 @@ See the License for the specific language governing permissions and limitations under the License. """ from ResultSetIterator import ResultSetIterator +from org.sleuthkit.autopsy.coreutils import AppDBParserHelper +from org.sleuthkit.datamodel import Account class TskCallLogsParser(ResultSetIterator): """ @@ -32,27 +34,30 @@ class TskCallLogsParser(ResultSetIterator): def __init__(self, result_set): super(TskCallLogsParser, self).__init__(result_set) - self.INCOMING_CALL = "Incoming" - self.OUTGOING_CALL = "Outgoing" self._DEFAULT_STRING = "" + self._DEFAULT_DIRECTION = AppDBParserHelper.CommunicationDirection.UNKNOWN + self._DEFAULT_ADDRESS = Account.Address("","") + self._DEFAULT_CALL_TYPE = AppDBParserHelper.CallMediaType.UNKNOWN - def get_account_name(self): - return self._DEFAULT_STRING + self.INCOMING_CALL = AppDBParserHelper.CommunicationDirection.INCOMING + self.OUTGOING_CALL = AppDBParserHelper.CommunicationDirection.OUTGOING + self.AUDIO_CALL = AppDBParserHelper.CallMediaType.AUDIO + self.VIDEO_CALL = AppDBParserHelper.CallMediaType.VIDEO def get_call_direction(self): - return self._DEFAULT_STRING + return self._DEFAULT_DIRECTION def get_phone_number_from(self): - return self._DEFAULT_STRING + return self._DEFAULT_ADDRESS def get_phone_number_to(self): - return self._DEFAULT_STRING + return self._DEFAULT_ADDRESS def get_call_start_date_time(self): return self._DEFAULT_LONG def get_call_end_date_time(self): return self._DEFAULT_LONG - - def get_contact_name(self): - return self._DEFAULT_STRING + + def get_call_type(self): + return self._DEFAULT_CALL_TYPE diff --git a/InternalPythonModules/android/TskMessagesParser.py b/InternalPythonModules/android/TskMessagesParser.py index e3edbb25c8..69d05cd6fe 100644 --- a/InternalPythonModules/android/TskMessagesParser.py +++ b/InternalPythonModules/android/TskMessagesParser.py @@ -33,18 +33,22 @@ class TskMessagesParser(ResultSetIterator): def __init__(self, result_set): super(TskMessagesParser, self).__init__(result_set) - self.INCOMING_MSG = "Incoming" - self.OUTGOING_MSG = "Outgoing" self._DEFAULT_TEXT = "" self._DEFAULT_LONG = -1L self._DEFAULT_MSG_READ_STATUS = AppDBParserHelper.MessageReadStatusEnum.UNKNOWN self._DEFAULT_ACCOUNT_ADDRESS = Account.Address("","") + self._DEFAULT_COMMUNICATION_DIRECTION = AppDBParserHelper.CommunicationDirection.UNKNOWN + + self.INCOMING = AppDBParserHelper.CommunicationDirection.INCOMING + self.OUTGOING = AppDBParserHelper.CommunicationDirection.OUTGOING + self.READ = AppDBParserHelper.MessageReadStatusEnum.READ + self.UNREAD = AppDBParserHelper.MessageReadStatusEnum.UNREAD def get_message_type(self): return self._DEFAULT_TEXT def get_message_direction(self): - return self._DEFAULT_TEXT + return self._DEFAULT_COMMUNICATION_DIRECTION def get_phone_number_from(self): return self._DEFAULT_ACCOUNT_ADDRESS diff --git a/InternalPythonModules/android/viber.py b/InternalPythonModules/android/viber.py index 9f02cb7bfb..a8442a2931 100644 --- a/InternalPythonModules/android/viber.py +++ b/InternalPythonModules/android/viber.py @@ -88,13 +88,12 @@ class ViberAnalyzer(general.AndroidComponentAnalyzer): calllog_parser = ViberCallLogsParser(contact_and_calllog_db) while calllog_parser.next(): helper.addCalllog( - calllog_parser.get_account_name(), calllog_parser.get_call_direction(), calllog_parser.get_phone_number_from(), calllog_parser.get_phone_number_to(), calllog_parser.get_call_start_date_time(), calllog_parser.get_call_end_date_time(), - calllog_parser.get_contact_name() + calllog_parser.get_call_type() ) calllog_parser.close() @@ -139,7 +138,8 @@ class ViberCallLogsParser(TskCallLogsParser): SELECT C.canonized_number AS number, C.type AS direction, C.duration AS seconds, - C.date AS start_time + C.date AS start_time, + C.viber_call_type AS call_type FROM calls AS C """ ) @@ -148,20 +148,21 @@ class ViberCallLogsParser(TskCallLogsParser): self._OUTGOING_CALL_TYPE = 2 self._INCOMING_CALL_TYPE = 1 self._MISSED_CALL_TYPE = 3 - - def get_account_name(self): - return self.result_set.getString("number") + self._AUDIO_CALL_TYPE = 1 + self._VIDEO_CALL_TYPE = 4 def get_phone_number_from(self): if self.get_call_direction() == self.INCOMING_CALL: - return self.result_set.getString("number") + return Account.Address(self.result_set.getString("number"), + self.result_set.getString("number")) #Give default value if the call is outgoing, #the device's # is not stored in the database. return super(ViberCallLogsParser, self).get_phone_number_from() def get_phone_number_to(self): if self.get_call_direction() == self.OUTGOING_CALL: - return self.result_set.getString("number") + return Account.Address(self.result_set.getString("number"), + self.result_set.getString("number")) #Give default value if the call is incoming, #the device's # is not stored in the database. return super(ViberCallLogsParser, self).get_phone_number_to() @@ -169,7 +170,7 @@ class ViberCallLogsParser(TskCallLogsParser): def get_call_direction(self): direction = self.result_set.getInt("direction") if direction == self._INCOMING_CALL_TYPE or direction == self._MISSED_CALL_TYPE: - return self.INCOMING_CALL + return self.INCOMING_CALL return self.OUTGOING_CALL def get_call_start_date_time(self): @@ -180,6 +181,14 @@ class ViberCallLogsParser(TskCallLogsParser): duration = self.result_set.getLong("seconds") return start_time + duration + def get_call_type(self): + call_type = self.result_set.getInt("call_type") + if call_type == self._AUDIO_CALL_TYPE: + return self.AUDIO_CALL + if call_type == self._VIDEO_CALL_TYPE: + return self.VIDEO_CALL + return super(ViberCallLogsParser, self).get_call_type() + class ViberContactsParser(TskContactsParser): """ Extracts TSK_CONTACT information from the Viber database. @@ -282,8 +291,8 @@ class ViberMessagesParser(TskMessagesParser): def get_message_direction(self): direction = self.result_set.getInt("direction") if direction == self._INCOMING_MESSAGE_TYPE: - return self.INCOMING_MSG - return self.OUTGOING_MSG + return self.INCOMING + return self.OUTGOING def get_phone_number_to(self): recipients = [] @@ -296,11 +305,11 @@ class ViberMessagesParser(TskMessagesParser): return self.result_set.getLong("msg_date") / 1000 def get_message_read_status(self): - if self.get_message_direction() == self.INCOMING_MSG: + if self.get_message_direction() == self.INCOMING: if self.result_set.getInt("read_status") == 0: - return AppDBParserHelper.MessageReadStatusEnum.READ + return self.READ else: - return AppDBParserHelper.MessageReadStatusEnum.UNREAD + return self.UNREAD return super(ViberMessagesParser, self).get_message_read_status() def get_message_text(self):