corrected AtomicReadFileAck.

This commit is contained in:
skarg
2005-06-13 19:38:14 +00:00
parent 6c35ca9567
commit b2727702d4
4 changed files with 26 additions and 21 deletions
+8 -10
View File
@@ -207,11 +207,10 @@ int arf_ack_encode_apdu(
if (apdu) if (apdu)
{ {
apdu[0] = PDU_TYPE_CONFIRMED_SERVICE_REQUEST; apdu[0] = PDU_TYPE_COMPLEX_ACK;
apdu[1] = encode_max_segs_max_apdu(0, Device_Max_APDU_Length_Accepted()); apdu[1] = invoke_id;
apdu[2] = invoke_id; apdu[2] = SERVICE_CONFIRMED_ATOMIC_READ_FILE; // service choice
apdu[3] = SERVICE_CONFIRMED_ATOMIC_READ_FILE; // service choice apdu_len = 3;
apdu_len = 4;
// endOfFile // endOfFile
apdu_len += encode_tagged_boolean(&apdu[apdu_len], data->endOfFile); apdu_len += encode_tagged_boolean(&apdu[apdu_len], data->endOfFile);
switch (data->access) switch (data->access)
@@ -348,13 +347,12 @@ int arf_ack_decode_apdu(
if (!apdu) if (!apdu)
return -1; return -1;
// optional checking - most likely was already done prior to this call // optional checking - most likely was already done prior to this call
if (apdu[0] != PDU_TYPE_CONFIRMED_SERVICE_REQUEST) if (apdu[0] != PDU_TYPE_COMPLEX_ACK)
return -1; return -1;
// apdu[1] = encode_max_segs_max_apdu(0, Device_Max_APDU_Length_Accepted()); *invoke_id = apdu[1]; /* invoke id - filled in by net layer */
*invoke_id = apdu[2]; /* invoke id - filled in by net layer */ if (apdu[2] != SERVICE_CONFIRMED_ATOMIC_READ_FILE)
if (apdu[3] != SERVICE_CONFIRMED_ATOMIC_READ_FILE)
return -1; return -1;
offset = 4; offset = 3;
if (apdu_len > offset) if (apdu_len > offset)
{ {
+8 -10
View File
@@ -221,11 +221,10 @@ int awf_ack_encode_apdu(
if (apdu) if (apdu)
{ {
apdu[0] = PDU_TYPE_CONFIRMED_SERVICE_REQUEST; apdu[0] = PDU_TYPE_COMPLEX_ACK;
apdu[1] = encode_max_segs_max_apdu(0, Device_Max_APDU_Length_Accepted()); apdu[1] = invoke_id;
apdu[2] = invoke_id; apdu[2] = SERVICE_CONFIRMED_ATOMIC_WRITE_FILE; // service choice
apdu[3] = SERVICE_CONFIRMED_ATOMIC_WRITE_FILE; // service choice apdu_len = 3;
apdu_len = 4;
switch (data->access) switch (data->access)
{ {
case FILE_STREAM_ACCESS: case FILE_STREAM_ACCESS:
@@ -291,13 +290,12 @@ int awf_ack_decode_apdu(
if (!apdu) if (!apdu)
return -1; return -1;
// optional checking - most likely was already done prior to this call // optional checking - most likely was already done prior to this call
if (apdu[0] != PDU_TYPE_CONFIRMED_SERVICE_REQUEST) if (apdu[0] != PDU_TYPE_COMPLEX_ACK)
return -1; return -1;
// apdu[1] = encode_max_segs_max_apdu(0, Device_Max_APDU_Length_Accepted()); *invoke_id = apdu[1]; /* invoke id - filled in by net layer */
*invoke_id = apdu[2]; /* invoke id - filled in by net layer */ if (apdu[2] != SERVICE_CONFIRMED_ATOMIC_WRITE_FILE)
if (apdu[3] != SERVICE_CONFIRMED_ATOMIC_WRITE_FILE)
return -1; return -1;
offset = 4; offset = 3;
if (apdu_len > offset) if (apdu_len > offset)
{ {
+7
View File
@@ -304,6 +304,7 @@ bool bacfile_read_data(BACNET_ATOMIC_READ_FILE_DATA *data)
pFilename = bacfile_name(data->object_instance); pFilename = bacfile_name(data->object_instance);
if (pFilename) if (pFilename)
{ {
found = true;
pFile = fopen(pFilename,"rb"); pFile = fopen(pFilename,"rb");
if (pFile) if (pFile)
{ {
@@ -315,10 +316,16 @@ bool bacfile_read_data(BACNET_ATOMIC_READ_FILE_DATA *data)
fclose(pFile); fclose(pFile);
} }
else else
{
data->fileDataLength = 0; data->fileDataLength = 0;
data->endOfFile = true;
}
} }
else else
{
data->fileDataLength = 0; data->fileDataLength = 0;
data->endOfFile = true;
}
return found; return found;
} }
+3 -1
View File
@@ -685,7 +685,9 @@ void AtomicReadFileHandler(
&Tx_Buf[pdu_len], &Tx_Buf[pdu_len],
service_data->invoke_id, service_data->invoke_id,
ABORT_REASON_SEGMENTATION_NOT_SUPPORTED); ABORT_REASON_SEGMENTATION_NOT_SUPPORTED);
fprintf(stderr,"Sending Abort!\n"); fprintf(stderr,"Sending Abort! %u octets requested. Only able to send %u octets.\n",
data.type.stream.requestedOctetCount,
data.fileDataLength);
send = true; send = true;
} }
} }