+# Work on source directory:
+cd $SOURCE_DIR
+
+# Must have metadata:
+ls *.*metadata >/dev/null 2>/dev/null
+[ $? -ne 0 ] && _exit "Cannot found '*.*metadata' files on '$SOURCE_DIR' !!"
+
+# Show possible end points if nothing provided:
+END_POINTS="$2"
+if [ -z "$END_POINTS" ]
+then
+ src_eps=( $(grep "^src=" *.*metadata | cut -d= -f2 | sort -u) )
+ [ ${#src_eps[@]} -eq 0 ] && _exit "No source end-points detected: metadata must have an 'src=xxx' line."
+ echo "Input a space-separated list for desired end-points to be processed as test side: "
+ echo " (available source end-points: ${src_eps[*]})"
+ read END_POINTS
+ [ -z "$END_POINTS" ] && _exit "Invalid empty input !!"
+fi
+
+# Identify useful frames: those which are created at test-bed side (all except frames coming from tested systems):
+rm -f *.needed
+for tag in $END_POINTS
+do
+ for metadata in $(grep "^src=$tag$" *.*metadata)
+ do
+ frame=$(echo $metadata | cut -d\. -f1)
+ touch ${frame}.needed
+ done
+done
+ls *.needed >/dev/null 2>/dev/null
+[ $? -ne 0 ] && _exit "No frame has been selected within '$SOURCE_DIR' for provided end-points ($END_POINTS) !!"
+
+# Messages classification:
+0> cers_4_starting
+0> requests_4_sending
+0> answers_4_programming
+0> $TESTCASE_BN
+
+# Optional timeout:
+TIMEOUT_SEC=$3
+[ -n "$TIMEOUT_SEC" ] && echo "test|1|timeout|$((TIMEOUT_SEC * 1000))" >> $TESTCASE_BN
+
+# Process frames:
+for frame in `ls *.needed | cut -d\. -f1 | sort -n`
+do
+ file=( `ls ${frame}.*metadata 2>/dev/null` )
+ [ ${#file[@]} -ne 1 ] && _exit "There must be one metadata file corresponding to frame '$frame' !!"
+
+ # Ignore keep alives:
+ grep -q "^code=280$" $file
+ [ $? -eq 0 ] && continue
+
+ grep -q "^isrequest=1$" $file
+ if [ $? -eq 0 ]
+ then
+ grep -q "^code=257$" $file
+ [ $? -eq 0 ] && { echo $frame >> cers_4_starting ; continue ; }
+ echo $frame >> requests_4_sending
+ update_testcase $frame check_result_code
+ else
+ # Ignore CEA's:
+ grep -q "^code=257$" $file
+ [ $? -eq 0 ] && continue
+ echo $frame >> answers_4_programming
+ update_testcase $frame
+ fi
+done
+rm -f *.needed
+
+# We will replace all the requests hop-by-hop's with a unique value, to avoid bad sniffing cases (different sources using bad values).
+# For example, the frame number could be valid enough.
+hbh_ini=
+hbh_fin=
+# involved frames:
+grep sendxml $TESTCASE_BN > .involved_frames
+n_involved=`wc -l .involved_frames | awk '{ print $1 }'`
+count=1
+for frame in `cat .involved_frames | cut -d\| -f4 | cut -d\. -f1`
+do
+ xml=( `ls ${frame}.*xml` )
+ mtd=( `ls ${frame}.*metadata` )
+ isrequest=$(grep "isrequest=1" $mtd)
+ if [ -n "$isrequest" ]
+ then
+ hbh_ini="$(grep -o "hop-by-hop-id=\"[0-9]*\"" $xml)"
+ sed -i 's/'$hbh_ini'/hop-by-hop-id="'$frame'"/' $xml
+ fi
+ count=$((count+1))
+done