88 */
99package de .rub .nds .tlsattacker .core .workflow .action ;
1010
11- import de .rub .nds .tlsattacker .core .exceptions .WorkflowExecutionException ;
12- import de .rub .nds .tlsattacker .core .protocol .message .ProtocolMessage ;
13- import de .rub .nds .tlsattacker .core .record .AbstractRecord ;
11+ import de .rub .nds .tlsattacker .core .state .State ;
1412import de .rub .nds .tlsattacker .core .state .TlsContext ;
15- import java .io .ByteArrayInputStream ;
16- import java .io .ByteArrayOutputStream ;
17- import java .io .IOException ;
18- import java .io .ObjectInputStream ;
19- import java .io .ObjectOutputStream ;
20- import java .util .LinkedList ;
2113
2214public class DeepCopyBuffersAction extends CopyContextFieldAction {
2315
16+ private State state ;
17+
2418 public DeepCopyBuffersAction () {
2519
2620 }
@@ -30,9 +24,9 @@ public DeepCopyBuffersAction(String srcConnectionAlias, String dstConnectionAlia
3024 }
3125
3226 @ Override
33- protected void copyField ( TlsContext src , TlsContext dst ) {
34- deepCopyRecords ( src , dst ) ;
35- deepCopyMessages ( src , dst );
27+ public void execute ( State state ) {
28+ this . state = state ;
29+ super . execute ( state );
3630 }
3731
3832 @ Override
@@ -45,52 +39,15 @@ public void reset() {
4539 setExecuted (false );
4640 }
4741
48- private void deepCopyRecords (TlsContext src , TlsContext dst ) {
49- LinkedList <AbstractRecord > recordBuffer = new LinkedList <>();
50- ObjectOutputStream outStream ;
51- ObjectInputStream inStream ;
52- try {
53- for (AbstractRecord record : src .getRecordBuffer ()) {
54-
55- ByteArrayOutputStream stream = new ByteArrayOutputStream ();
56- outStream = new ObjectOutputStream (stream );
57- outStream .writeObject (record );
58- outStream .close ();
59- inStream = new ObjectInputStream (new ByteArrayInputStream (stream .toByteArray ()));
60- AbstractRecord recordCopy = (AbstractRecord ) inStream .readObject ();
61-
62- recordBuffer .add (recordCopy );
63- }
64- } catch (IOException | ClassNotFoundException ex ) {
65- LOGGER .error ("Error while creating deep copy of recordBuffer" );
66- throw new WorkflowExecutionException (ex .toString ());
67- }
68-
69- dst .setRecordBuffer (recordBuffer );
70- }
71-
72- private void deepCopyMessages (TlsContext src , TlsContext dst ) {
73- LinkedList <ProtocolMessage > messageBuffer = new LinkedList <>();
74- ObjectOutputStream outStream ;
75- ObjectInputStream inStream ;
76- try {
77- for (ProtocolMessage message : src .getMessageBuffer ()) {
78-
79- ByteArrayOutputStream stream = new ByteArrayOutputStream ();
80- outStream = new ObjectOutputStream (stream );
81- outStream .writeObject (message );
82- outStream .close ();
83- inStream = new ObjectInputStream (new ByteArrayInputStream (stream .toByteArray ()));
84- ProtocolMessage messageCopy = (ProtocolMessage ) inStream .readObject ();
85-
86- messageBuffer .add (messageCopy );
87- }
88- } catch (IOException | ClassNotFoundException ex ) {
89- LOGGER .error ("Error while creating deep copy of messageBuffer" );
90- throw new WorkflowExecutionException (ex .toString ());
91- }
92-
93- dst .setMessageBuffer (messageBuffer );
42+ @ Override
43+ protected void copyField (TlsContext srcContext , TlsContext dstContext ) {
44+ DeepCopyBufferedRecordsAction copyRecords = new DeepCopyBufferedRecordsAction (super .getSrcContextAlias (),
45+ super .getDstContextAlias ());
46+ DeepCopyBufferedMessagesAction copyMessages = new DeepCopyBufferedMessagesAction (super .getSrcContextAlias (),
47+ super .getDstContextAlias ());
48+
49+ copyRecords .execute (state );
50+ copyMessages .execute (state );
9451 }
9552
9653}
0 commit comments