package org.thoughtcrime.SMP.sms; public class MultipartSmsTransportMessageFragments { private static final long VALID_TIME = 60 * 60 * 1000; // 1 Hour private final byte[][] fragments; private final long initializedTime; public MultipartSmsTransportMessageFragments(int count) { this.fragments = new byte[count][]; this.initializedTime = System.currentTimeMillis(); } public void add(MultipartSmsTransportMessage fragment) { this.fragments[fragment.getMultipartIndex()] = fragment.getStrippedMessage(); } public int getSize() { return this.fragments.length; } public boolean isExpired() { return (System.currentTimeMillis() - initializedTime) >= VALID_TIME; } public boolean isComplete() { for (int i=0;i<fragments.length;i++) if (fragments[i] == null) return false; return true; } public byte[] getJoined() { int totalMessageLength = 0; for (int i=0;i<fragments.length;i++) { totalMessageLength += fragments[i].length; } byte[] totalMessage = new byte[totalMessageLength]; int totalMessageOffset = 0; for (int i=0;i<fragments.length;i++) { System.arraycopy(fragments[i], 0, totalMessage, totalMessageOffset, fragments[i].length); totalMessageOffset += fragments[i].length; } return totalMessage; } @Override public String toString() { return String.format("[Size: %d, Initialized: %d, Exipired: %s, Complete: %s]", fragments.length, initializedTime, isExpired()+"", isComplete()+""); } }