@@ -270,19 +270,19 @@ module.exports.decodeAtomicReadFileAcknowledge = (buffer, offset) => {
270270 } ;
271271} ;
272272
273- module . exports . encodeAtomicWriteFile = ( buffer , isStream , objectId , position , blockCount , blocks , counts ) => {
273+ module . exports . encodeAtomicWriteFile = ( buffer , isStream , objectId , position , blocks ) => {
274274 baAsn1 . encodeApplicationObjectId ( buffer , objectId . type , objectId . instance ) ;
275275 if ( isStream ) {
276276 baAsn1 . encodeOpeningTag ( buffer , 0 ) ;
277277 baAsn1 . encodeApplicationSigned ( buffer , position ) ;
278- baAsn1 . encodeApplicationOctetString ( buffer , blocks [ 0 ] , 0 , counts [ 0 ] ) ;
278+ baAsn1 . encodeApplicationOctetString ( buffer , blocks [ 0 ] , 0 , blocks [ 0 ] . length ) ;
279279 baAsn1 . encodeClosingTag ( buffer , 0 ) ;
280280 } else {
281281 baAsn1 . encodeOpeningTag ( buffer , 1 ) ;
282282 baAsn1 . encodeApplicationSigned ( buffer , position ) ;
283- baAsn1 . encodeApplicationUnsigned ( buffer , blockCount ) ;
284- for ( let i = 0 ; i < blockCount ; i ++ ) {
285- baAsn1 . encodeApplicationOctetString ( buffer , blocks [ i ] , 0 , counts [ i ] ) ;
283+ baAsn1 . encodeApplicationUnsigned ( buffer , blocks . length ) ;
284+ for ( let i = 0 ; i < blocks . length ; i ++ ) {
285+ baAsn1 . encodeApplicationOctetString ( buffer , blocks [ i ] , 0 , blocks [ i ] . length ) ;
286286 }
287287 baAsn1 . encodeClosingTag ( buffer , 1 ) ;
288288 }
@@ -292,13 +292,12 @@ module.exports.decodeAtomicWriteFile = (buffer, offset, apduLen) => {
292292 let len = 0 ;
293293 let result ;
294294 let decodedValue ;
295- let isStream = true ;
296- let position = - 1 ;
297- let blockCount = 0 ;
298- let blocks = null ;
299- let counts = null ;
295+ let isStream ;
296+ let position ;
297+ let blocks = [ ] ;
298+ let blockCount ;
300299 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
301- len += result . length ;
300+ len += result . len ;
302301 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_OBJECT_ID ) return ;
303302 decodedValue = baAsn1 . decodeObjectId ( buffer , offset + len ) ;
304303 len += decodedValue . len ;
@@ -307,55 +306,41 @@ module.exports.decodeAtomicWriteFile = (buffer, offset, apduLen) => {
307306 isStream = true ;
308307 len ++ ;
309308 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
310- len += result . length ;
309+ len += result . len ;
311310 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_SIGNED_INT ) return ;
312311 decodedValue = baAsn1 . decodeSigned ( buffer , offset + len , result . value ) ;
313312 len += decodedValue . len ;
314313 position = decodedValue . value ;
315314 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
316- len += result . length ;
315+ len += result . len ;
317316 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_OCTET_STRING ) return ;
318- blockCount = 1 ;
319-
320- // TODO: Implement
321-
322- /*
323- blocks = new byte[1][];
324- blocks[0] = new byte[len_value_type];
325- counts = new int[] { len_value_type };*/
326-
327- len += baAsn1 . decodeOctetString ( buffer , offset + len , apduLen , blocks [ 0 ] , 0 , result . value ) ;
328-
317+ decodedValue = baAsn1 . decodeOctetString ( buffer , offset + len , apduLen , 0 , result . value ) ;
318+ len += decodedValue . len ;
319+ blocks . push ( decodedValue . value ) ;
329320 if ( ! baAsn1 . decodeIsClosingTagNumber ( buffer , offset + len , 0 ) ) return ;
330321 len ++ ;
331322 } else if ( baAsn1 . decodeIsOpeningTagNumber ( buffer , offset + len , 1 ) ) {
332323 isStream = false ;
333324 len ++ ;
334325 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
335- len += result . length ;
326+ len += result . len ;
336327 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_SIGNED_INT ) return ;
337328 decodedValue = baAsn1 . decodeSigned ( buffer , offset + len , result . value ) ;
338329 len += decodedValue . len ;
339330 position = decodedValue . value ;
340331 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
341- len += result . length ;
332+ len += result . len ;
342333 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_UNSIGNED_INT ) return ;
343334 decodedValue = baAsn1 . decodeUnsigned ( buffer , offset + len , result . value ) ;
344335 len += decodedValue . len ;
345336 blockCount = decodedValue . value ;
346-
347- // TODO: Implement
348- /*blocks = new byte[block_count][];
349- counts = new int[block_count];*/
350-
351337 for ( let i = 0 ; i < blockCount ; i ++ ) {
352338 result = baAsn1 . decodeTagNumberAndValue ( buffer , offset + len ) ;
353339 len += result . len ;
354- /*blocks[i] = new byte[len_value_type];
355- counts[i] = len_value_type;*/
356340 if ( result . tagNumber !== baEnum . ApplicationTags . BACNET_APPLICATION_TAG_OCTET_STRING ) return ;
357- len += baAsn1 . decodeOctetString ( buffer , offset + len , apduLen , blocks [ i ] , 0 , result . value ) ;
358-
341+ decodedValue = baAsn1 . decodeOctetString ( buffer , offset + len , apduLen , 0 , result . value ) ;
342+ len += decodedValue . len ;
343+ blocks . push ( decodedValue . value ) ;
359344 }
360345 if ( ! baAsn1 . decodeIsClosingTagNumber ( buffer , offset + len , 1 ) ) return ;
361346 len ++ ;
@@ -367,9 +352,7 @@ module.exports.decodeAtomicWriteFile = (buffer, offset, apduLen) => {
367352 isStream : isStream ,
368353 objectId : objectId ,
369354 position : position ,
370- blockCount : blockCount ,
371- blocks : blocks ,
372- counts : counts
355+ blocks : blocks
373356 } ;
374357} ;
375358
0 commit comments