in mpt/core/src/main/java/org/apache/james/mpt/protocol/ProtocolSessionBuilder.java [179:237]
private void doAddProtocolLines(ProtocolInteractor session, String scriptName, BufferedReader reader) throws Exception {
String line;
int sessionNumber = -1;
int lineNumber = -1;
String lastClientMsg = "";
while ((line = reader.readLine()) != null) {
line = substituteVariables(line);
String location = scriptName + ":" + lineNumber;
if (line.startsWith("\\+")) {
session.cont(sessionNumber);
} else if (line.startsWith(CLIENT_TAG)) {
String clientMsg = "";
if (line.length() > 3) {
clientMsg = line.substring(3);
}
session.cl(sessionNumber, clientMsg);
lastClientMsg = clientMsg;
} else if (line.startsWith(SERVER_TAG)) {
String serverMsg = "";
if (line.length() > 3) {
serverMsg = line.substring(3);
}
session.sl(sessionNumber, serverMsg, location, lastClientMsg);
} else if (line.startsWith(OPEN_UNORDERED_BLOCK_TAG)) {
List<String> unorderedLines = new ArrayList<>(5);
line = reader.readLine();
while (!line.startsWith(CLOSE_UNORDERED_BLOCK_TAG)) {
if (!line.startsWith(SERVER_TAG)) {
throw new Exception(
"Only 'S: ' lines are permitted inside a 'SUB {' block.");
}
String serverMsg = line.substring(3);
unorderedLines.add(serverMsg);
line = reader.readLine();
lineNumber++;
}
session.sub(sessionNumber, unorderedLines, location,
lastClientMsg);
} else if (line.startsWith(COMMENT_TAG)
|| line.trim().length() == 0) {
// ignore these lines.
} else if (line.startsWith(SESSION_TAG)) {
String number = line.substring(SESSION_TAG.length()).trim();
if (number.length() == 0) {
throw new Exception("No session number specified");
}
sessionNumber = Integer.parseInt(number);
} else {
String prefix = line;
if (line.length() > 3) {
prefix = line.substring(0, 3);
}
throw new Exception("Invalid line prefix: " + prefix);
}
lineNumber++;
}
}