- ISO session: added code to allow longer connect and accept SPDUs

v1.6_develop_471
Michael Zillgith 10 months ago
parent 4724658ade
commit 3ff7cdd933

@ -338,15 +338,33 @@ IsoSession_createConnectSpdu(IsoSession* self, IsoConnectionParameters isoParame
{ {
int offset = 0; int offset = 0;
uint8_t* buf = buffer->buffer; uint8_t* buf = buffer->buffer;
int lengthOffset;
buf[offset++] = 13; /* CONNECT SPDU */ buf[offset++] = 13; /* CONNECT SPDU */
lengthOffset = offset;
offset++; /* Skip byte for length - fill it later */
self->calledSessionSelector = isoParameters->remoteSSelector; self->calledSessionSelector = isoParameters->remoteSSelector;
self->callingSessionSelector = isoParameters->localSSelector; self->callingSessionSelector = isoParameters->localSSelector;
int calculatedLength = 8 /* connect-accept-item */
+ 4 /* session-requirements */
+ (2 + self->callingSessionSelector.size) /* calling-session-selector */
+ (2 + self->calledSessionSelector.size); /* called-session-selector */
if (payload->length > 254) {
calculatedLength += (4 + payload->length);
}
else {
calculatedLength += (2 + payload->length);
}
if (calculatedLength > 254) {
buf[offset++] = 0xff;
buf[offset++] = (calculatedLength / 0x100);
buf[offset++] = (calculatedLength % 0x100);
}
else {
buf[offset++] = (uint8_t) calculatedLength;
}
offset = encodeConnectAcceptItem(buf, offset, 0); offset = encodeConnectAcceptItem(buf, offset, 0);
offset = encodeSessionRequirement(self, buf, offset); offset = encodeSessionRequirement(self, buf, offset);
@ -357,10 +375,6 @@ IsoSession_createConnectSpdu(IsoSession* self, IsoConnectionParameters isoParame
offset = encodeSessionUserData(buf, offset, payload->length); offset = encodeSessionUserData(buf, offset, payload->length);
int spduLength = (offset - lengthOffset - 1) + payload->length;
buf[lengthOffset] = spduLength;
buffer->partLength = offset; buffer->partLength = offset;
buffer->length = offset + payload->length; buffer->length = offset + payload->length;
buffer->nextPart = payload; buffer->nextPart = payload;
@ -430,13 +444,30 @@ IsoSession_createAcceptSpdu(IsoSession* self, BufferChain buffer, BufferChain pa
{ {
int offset = 0; int offset = 0;
uint8_t* buf = buffer->buffer; uint8_t* buf = buffer->buffer;
int lengthOffset;
int payloadLength = payload->length; int payloadLength = payload->length;
buf[offset++] = 14; /* ACCEPT SPDU */ buf[offset++] = 14; /* ACCEPT SPDU */
lengthOffset = offset;
offset++; int calculatedLength = 8 /* connect-accept-item */
+ 4 /* session-requirements */
+ (2 + self->calledSessionSelector.size); /* called-session-selector */
if (payload->length > 254) {
calculatedLength += (4 + payload->length);
}
else {
calculatedLength += (2 + payload->length);
}
if (calculatedLength > 254) {
buf[offset++] = 0xff;
buf[offset++] = (calculatedLength / 0x100);
buf[offset++] = (calculatedLength % 0x100);
}
else {
buf[offset++] = (uint8_t) calculatedLength;
}
offset = encodeConnectAcceptItem(buf, offset, self->protocolOptions); offset = encodeConnectAcceptItem(buf, offset, self->protocolOptions);
@ -446,10 +477,6 @@ IsoSession_createAcceptSpdu(IsoSession* self, BufferChain buffer, BufferChain pa
offset = encodeSessionUserData(buf, offset, payloadLength); offset = encodeSessionUserData(buf, offset, payloadLength);
int spduLength = (offset - lengthOffset - 1) + payloadLength;
buf[lengthOffset] = spduLength;
buffer->partLength = offset; buffer->partLength = offset;
buffer->length = offset + payloadLength; buffer->length = offset + payloadLength;
buffer->nextPart = payload; buffer->nextPart = payload;
@ -460,10 +487,8 @@ IsoSession_createRefuseSpdu(IsoSession* self, BufferChain buffer, BufferChain pa
{ {
int offset = 0; int offset = 0;
uint8_t* buf = buffer->buffer; uint8_t* buf = buffer->buffer;
int lengthOffset;
buf[offset++] = 12; /* REFUSE SPDU */ buf[offset++] = 12; /* REFUSE SPDU */
lengthOffset = offset;
offset++; offset++;
offset = encodeConnectionIdentifier(buf, offset, reasonCode); offset = encodeConnectionIdentifier(buf, offset, reasonCode);
@ -511,7 +536,10 @@ IsoSession_parseMessage(IsoSession* self, ByteBuffer* message)
if (length != (message->size - 2)) if (length != (message->size - 2))
return SESSION_ERROR; return SESSION_ERROR;
if (parseSessionHeaderParameters(self, message, length) == SESSION_OK) if (parseSessionHeaderParameters(self, message, length) == SESSION_OK)
{
//TODO check called S-selector when configured
return SESSION_CONNECT; return SESSION_CONNECT;
}
else else
{ {
if (DEBUG_SESSION) if (DEBUG_SESSION)

Loading…
Cancel
Save