Commit 32cfa198 authored by juvancic's avatar juvancic
Browse files

updated ta module

parent 9ac790aa
Loading
Loading
Loading
Loading
+78 −14
Original line number Diff line number Diff line
@@ -117,7 +117,7 @@ public class ReadCaptureThread extends Thread implements Runnable{
	  //private List<Packet> packets;
	  private FilterPackets filterpackets;
	  private Map<Long, _fragmented_packet> _fragments = null;
	  
	  private Map<Long, _tcp_data> _tcpBodys = null;
	  
	  private class _fragmented_packet {
		Packet _packet;
@@ -157,15 +157,72 @@ public class ReadCaptureThread extends Thread implements Runnable{
		}
	  } // End of class _fragmented_packet
	  
	  private class _tcp_data{
		  byte[] _data=null;
				  
		  public _tcp_data(TCPPacket p_tcppacket) {
				_data = p_tcppacket.data;
		  }
		  
		  public void appendData(final byte[] p_data) {
				_data = concat(_data, p_data);
			}

			public byte[] getData() {
				return _data;
			}

			private byte[] concat(byte[]... arrays) {
				// Determine the length of the result array
				int totalLength = 0;
				for (int i = 0; i < arrays.length; i++) {
					totalLength += arrays[i].length;
				}

				// create the result array
				byte[] result = new byte[totalLength];

				// copy the source arrays into the result array
				int currentIndex = 0;
				for (int i = 0; i < arrays.length; i++) {
					System.arraycopy(arrays[i], 0, result, currentIndex, arrays[i].length);
					currentIndex += arrays[i].length;
				}

				return result;
			}
		  
	  } // End of class _tcp_data
	  
	  private byte[] addBodyData(TCPPacket packet) {
	      _tcp_data tcpBodyData;
	      Long ack = new Long(packet.ack_num);
	      if (_tcpBodys.containsKey(ack)){
	          tcpBodyData = _tcpBodys.get(ack);
	          tcpBodyData.appendData(packet.data);
	      }else{
	          tcpBodyData = new _tcp_data(packet/*.data*/);
	          _tcpBodys.put(ack, tcpBodyData);
	      }

	      if (packet.psh){
	          _tcpBodys.remove(ack);
	      }

	      return tcpBodyData.getData();
	  }
	 	  
	  public PacketHandler(String name) {
	    this.name = name;
	    _fragments = new HashMap<Long, _fragmented_packet>();
	    _tcpBodys = new HashMap<Long, _tcp_data>();
	  }
	  
	  public PacketHandler(FilterPackets filterpackets) {
	    this.name = filterpackets.componentId.getComponentName();
	    this.filterpackets = filterpackets;
	    _fragments = new HashMap<Long, _fragmented_packet>();
	    _tcpBodys = new HashMap<Long, _tcp_data>();
	  }
	  
	  public void receivePacket(Packet packet) {
@@ -201,6 +258,8 @@ public class ReadCaptureThread extends Thread implements Runnable{
					//System.out.println("Final packet: " + new_packet.getClass().getName());
					// Remove entry
					_fragments.remove((long) ipPacket.ident);
				} else {
					new_packet = packet;
				}
			} else {
				new_packet = packet;
@@ -209,7 +268,11 @@ public class ReadCaptureThread extends Thread implements Runnable{
	    
    	if(new_packet instanceof TCPPacket) {
 	    	TCPPacket tcpPacket = (TCPPacket)new_packet;
 	    	byte[] message= tcpPacket.data;//.getTCPData();//TODO: assume data is in one packet
 	    	//byte[] message= tcpPacket.data;//.getTCPData();//TODO: assume data is in one packet
 	    	log.debug(tcpPacket.toString());
 	        byte[] message = addBodyData(tcpPacket);
 	        if(tcpPacket.psh){
 	            //body is complete
 	            
	 	    	//String srcHost = tcpPacket.src_ip.toString();
	 	    	//String dstHost = tcpPacket.dst_ip.toString();
@@ -224,6 +287,7 @@ public class ReadCaptureThread extends Thread implements Runnable{
					this.filterpackets.cte.triEnqueueMsg(this.filterpackets.tsiPortId, triAddress, this.filterpackets.componentId, triMessage);
	 			}
 			}
 	    }
    	
 	    if (new_packet instanceof UDPPacket){
 	    	UDPPacket udpPacket = (UDPPacket)new_packet;