Merge pull request #1166 from rcordovano/messaging_prototype

Messaging prototype
This commit is contained in:
Richard Cordovano 2015-04-02 13:29:46 -04:00
commit 25fa976211
5 changed files with 136 additions and 10 deletions

View File

@ -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

View File

@ -206,14 +206,6 @@
<runtime-relative-path>ext/jdom-2.0.5.jar</runtime-relative-path>
<binary-origin>release/modules/ext/jdom-2.0.5.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/Rejistry-1.0-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/Rejistry-1.0-SNAPSHOT.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/StixLib.jar</runtime-relative-path>
<binary-origin>release/modules/ext/StixLib.jar</binary-origin>
@ -222,6 +214,18 @@
<runtime-relative-path>ext/sqlite-jdbc-3.7.15-M1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sqlite-jdbc-3.7.15-M1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/activemq-all-5.11.1.jar</runtime-relative-path>
<binary-origin>release/modules/ext/activemq-all-5.11.1.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/Rejistry-1.0-SNAPSHOT.jar</runtime-relative-path>
<binary-origin>release/modules/ext/Rejistry-1.0-SNAPSHOT.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding.jar</binary-origin>
</class-path-extension>
<class-path-extension>
<runtime-relative-path>ext/sevenzipjbinding-AllPlatforms.jar</runtime-relative-path>
<binary-origin>release/modules/ext/sevenzipjbinding-AllPlatforms.jar</binary-origin>

Binary file not shown.

View File

@ -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();

View File

@ -0,0 +1,115 @@
/*
* Autopsy Forensic Browser
*
* Copyright 2013-2015 Basis Technology Corp.
* Contact: carrier <at> sleuthkit <dot> 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);
}
}
}