diff --git a/Core/nbproject/project.properties b/Core/nbproject/project.properties index 1452a1c82a..31a2400e50 100644 --- a/Core/nbproject/project.properties +++ b/Core/nbproject/project.properties @@ -1,6 +1,7 @@ +file.reference.activemq-all-5.11.1.jar=C:\\autopsy\\Core\\release\\modules\\ext\\activemq-all-5.11.1.jar file.reference.jdom-2.0.5-contrib.jar=release/modules/ext/jdom-2.0.5-contrib.jar file.reference.jdom-2.0.5.jar=release/modules/ext/jdom-2.0.5.jar -file.reference.jython.jar=C:\\autopsy\\Core\\release\\modules\\ext\\jython.jar +file.reference.jython.jar=release/modules/ext/jython.jar file.reference.jython.jar-1=release/modules/ext/jython.jar file.reference.metadata-extractor-2.6.2.jar=release/modules/ext/metadata-extractor-2.6.2.jar file.reference.Rejistry-1.0-SNAPSHOT.jar=release/modules/ext/Rejistry-1.0-SNAPSHOT.jar diff --git a/Core/nbproject/project.xml b/Core/nbproject/project.xml index 592a2ab655..d55d332ea6 100644 --- a/Core/nbproject/project.xml +++ b/Core/nbproject/project.xml @@ -206,14 +206,6 @@ ext/jdom-2.0.5.jar release/modules/ext/jdom-2.0.5.jar - - ext/Rejistry-1.0-SNAPSHOT.jar - release/modules/ext/Rejistry-1.0-SNAPSHOT.jar - - - ext/sevenzipjbinding.jar - release/modules/ext/sevenzipjbinding.jar - ext/StixLib.jar release/modules/ext/StixLib.jar @@ -222,6 +214,18 @@ ext/sqlite-jdbc-3.7.15-M1.jar release/modules/ext/sqlite-jdbc-3.7.15-M1.jar + + ext/activemq-all-5.11.1.jar + release/modules/ext/activemq-all-5.11.1.jar + + + ext/Rejistry-1.0-SNAPSHOT.jar + release/modules/ext/Rejistry-1.0-SNAPSHOT.jar + + + ext/sevenzipjbinding.jar + release/modules/ext/sevenzipjbinding.jar + ext/sevenzipjbinding-AllPlatforms.jar release/modules/ext/sevenzipjbinding-AllPlatforms.jar diff --git a/Core/release/modules/ext/activemq-all-5.11.1.jar b/Core/release/modules/ext/activemq-all-5.11.1.jar new file mode 100644 index 0000000000..59eff437fa Binary files /dev/null and b/Core/release/modules/ext/activemq-all-5.11.1.jar differ diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java index b19a8d8979..e4734cf917 100644 --- a/Core/src/org/sleuthkit/autopsy/casemodule/Case.java +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Case.java @@ -146,6 +146,8 @@ public class Case implements SleuthkitCase.ErrorObserver { // we cache if the case has data in it yet since a few places ask for it and we dont' need to keep going to DB private boolean hasData = false; + private Messenger messenger; + /** * Constructor for the Case class */ @@ -158,6 +160,7 @@ public class Case implements SleuthkitCase.ErrorObserver { this.db = db; this.services = new Services(db); db.addErrorObserver(this); + messenger = new Messenger(this.name); } /** @@ -299,6 +302,7 @@ public class Case implements SleuthkitCase.ErrorObserver { } Case newCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db); + newCase.messenger.start(); changeCase(newCase); } @@ -341,7 +345,8 @@ public class Case implements SleuthkitCase.ErrorObserver { checkImagesExist(db); Case openedCase = new Case(caseName, caseNumber, examiner, configFilePath, xmlcm, db); - + openedCase.messenger.start(); + changeCase(openedCase); } catch (Exception ex) { @@ -492,6 +497,7 @@ public class Case implements SleuthkitCase.ErrorObserver { changeCase(null); try { + messenger.stop(); services.close(); this.xmlcm.close(); // close the xmlcm this.db.close(); diff --git a/Core/src/org/sleuthkit/autopsy/casemodule/Messenger.java b/Core/src/org/sleuthkit/autopsy/casemodule/Messenger.java new file mode 100644 index 0000000000..22cf212a02 --- /dev/null +++ b/Core/src/org/sleuthkit/autopsy/casemodule/Messenger.java @@ -0,0 +1,115 @@ +/* + * Autopsy Forensic Browser + * + * Copyright 2013-2015 Basis Technology Corp. + * Contact: carrier sleuthkit org + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.sleuthkit.autopsy.casemodule; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.Serializable; +import java.util.logging.Level; +import javax.jms.Connection; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageListener; +import javax.jms.MessageProducer; +import javax.jms.ObjectMessage; +import javax.jms.Session; +import javax.jms.TextMessage; +import javax.jms.Topic; +import org.apache.activemq.ActiveMQConnectionFactory; +import org.sleuthkit.autopsy.coreutils.Logger; + +class Messenger implements PropertyChangeListener, MessageListener { + + private static final String BROKER_URL = "tcp://10.1.8.234:61616"; + private static final Logger logger = Logger.getLogger(Messenger.class.getName()); + private final String caseName; + private Connection connection; + private Session session; + private MessageProducer producer; + + Messenger(String caseName) { + this.caseName = caseName; + } + + void start() { + try { + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(BROKER_URL); + connection = connectionFactory.createConnection(); + connection.start(); + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + Topic topic = session.createTopic(caseName); + producer = session.createProducer(topic); + + MessageConsumer consumer = session.createConsumer(topic, "event = '" + Case.Events.DATA_SOURCE_ADDED.toString() + "'", true); + consumer.setMessageListener(this); + + Case.addPropertyChangeListener(this); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Startup error", ex); + } + } + + void stop() { + Case.removePropertyChangeListener(this); + try { + session.close(); + connection.close(); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Shutdown error", ex); + } + } + + @Override + public void propertyChange(PropertyChangeEvent event) { + switch (Case.Events.valueOf(event.getPropertyName())) { + case DATA_SOURCE_ADDED: + if (null != event.getNewValue()) { + send(event); + } + break; + } + } + + private void send(PropertyChangeEvent event) { + try { + ObjectMessage message = session.createObjectMessage(); + message.setStringProperty("event", Case.Events.DATA_SOURCE_ADDED.toString()); + message.setObject(Case.Events.DATA_SOURCE_ADDED.toString()); + producer.send(message); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Publishing error", ex); + } + } + + @Override + public void onMessage(Message message) { + try { + if (message instanceof ObjectMessage) { + ObjectMessage objMessage = (ObjectMessage) message; + String event = (String) objMessage.getObject(); + logger.log(Level.INFO, "Received {0}", event); + } + Case.getCurrentCase().notifyNewDataSource(null); + } catch (Exception ex) { + logger.log(Level.SEVERE, "Publishing error", ex); + } + + } + +}