/*----------------------------------------------------------------------------+ *| | *| Android's Hooker | *| | *+---------------------------------------------------------------------------+ *| Copyright (C) 2011 Georges Bossert and Dimitri Kirchner | *| This program is free software: you can redistribute it and/or modify | *| it under the terms of the GNU General Public License as published by | *| the Free Software Foundation, either version 3 of the License, or | *| (at your option) any later version. | *| | *| This program is distributed in the hope that it will be useful, | *| but WITHOUT ANY WARRANTY; without even the implied warranty of | *| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | *| GNU General Public License for more details. | *| | *| You should have received a copy of the GNU General Public License | *| along with this program. If not, see <http://www.gnu.org/licenses/>. | *+---------------------------------------------------------------------------+ *| @url : http://www.amossys.fr | *| @contact : android-hooker@amossys.fr | *| @sponsors : Amossys, http://www.amossys.fr | *+---------------------------------------------------------------------------+ */ package com.amossys.hooker.reporting; import java.util.ArrayList; import java.util.List; import java.util.Queue; import java.util.concurrent.ConcurrentLinkedQueue; import com.amossys.hooker.SubstrateMain; import com.amossys.hooker.common.InterceptEvent; /** * @author Georges Bossert * */ public class NetworkEventSender extends AbstractReporter { private String host; private int port; private String esDoctype; private String esIndex; // Events to send private Queue<InterceptEvent> toSend; // List of threads private List<NetworkEventSenderThread> threads = new ArrayList<NetworkEventSenderThread>(); private int nbThread; /** * Default constructor */ public NetworkEventSender(String host, int port, int nbThread, String esIndex, String esDoctype) { this.host = host; this.port = port; this.nbThread = nbThread; this.esIndex = esIndex; this.esDoctype = esDoctype; this.toSend = new ConcurrentLinkedQueue<InterceptEvent>(); this.createThreads(); SubstrateMain.log("Starting Network Event Sender"); } @Override protected void report(InterceptEvent event) { if (event != null) { SubstrateMain.log("Network Event sender request its threads to send an event."); this.toSend.add(event); } } /** * Updates the target URI to which events are sent */ private void createThreads() { this.stopThreads(); // Waits 500ms before starting new threads try { Thread.sleep(500); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } for (int iThread = 0; iThread < this.nbThread; iThread++) { this.startThread(); } } /** * Create and register a new Thread */ private void startThread() { NetworkEventSenderThread thread = new NetworkEventSenderThread(getHost(), getPort(), getEsIndex(), getEsDoctype(), toSend); this.threads.add(thread); Thread t = new Thread(thread); t.start(); } /** * Stops all registered threads */ private void stopThreads() { for (NetworkEventSenderThread thread : this.threads) { thread.stopThread(); } } /** * @return the host */ public String getHost() { return host; } /** * @return the port */ public int getPort() { return port; } /** * @return the esDoctype */ public String getEsDoctype() { return esDoctype; } /** * @return the esIndex */ public String getEsIndex() { return esIndex; } }