Extracted calculateMessageSize(); fixed MessageHeaderMinLength

This commit is contained in:
dankito 2020-12-17 21:20:44 +01:00
parent 361a4062cb
commit 187b1805e6
1 changed files with 11 additions and 5 deletions

View File

@ -35,7 +35,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
protected val utils: FinTsUtils = FinTsUtils()) { protected val utils: FinTsUtils = FinTsUtils()) {
companion object { companion object {
const val MessageHeaderMinLength = 30 const val MessageHeaderMinLength = 28
const val AddedSeparatorsLength = 3 const val AddedSeparatorsLength = 3
} }
@ -414,10 +414,7 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
val ending = Nachrichtenabschluss(generator.getNextSegmentNumber(), dialogContext) val ending = Nachrichtenabschluss(generator.getNextSegmentNumber(), dialogContext)
val formattedEnding = ending.format() val formattedEnding = ending.format()
val minMessageSize = formattedPayload.length + MessageHeaderMinLength + formattedEnding.length + AddedSeparatorsLength val messageSize = calculateMessageSize(formattedPayload, formattedEnding, dialogContext)
val headerWithMinMessageSize = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, minMessageSize, dialogContext).format()
val messageSize = formattedPayload.length + headerWithMinMessageSize.length + formattedEnding.length + AddedSeparatorsLength
val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, dialogContext) val header = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, messageSize, dialogContext)
@ -425,6 +422,15 @@ open class MessageBuilder(protected val generator: ISegmentNumberGenerator = Seg
.joinToString(Separators.SegmentSeparator, postfix = Separators.SegmentSeparator) .joinToString(Separators.SegmentSeparator, postfix = Separators.SegmentSeparator)
} }
protected open fun calculateMessageSize(formattedPayload: String, formattedEnding: String, dialogContext: DialogContext): Int {
// we don't know Header's length yet - but already have to know its length in order to calculate message length.
// -> generate header with a known minimum header length added to message body length to calculate header length
val minMessageSize = formattedPayload.length + MessageHeaderMinLength + formattedEnding.length + AddedSeparatorsLength
val headerWithMinMessageSize = Nachrichtenkopf(ISegmentNumberGenerator.FirstSegmentNumber, minMessageSize, dialogContext).format()
return formattedPayload.length + headerWithMinMessageSize.length + formattedEnding.length + AddedSeparatorsLength
}
protected open fun signPayload(headerSegmentNumber: Int, dialogContext: DialogContext, date: Int, time: Int, protected open fun signPayload(headerSegmentNumber: Int, dialogContext: DialogContext, date: Int, time: Int,
tan: String? = null, payloadSegments: List<Segment>): List<Segment> { tan: String? = null, payloadSegments: List<Segment>): List<Segment> {