dynamodb.js (1425B)
1 var AWS = require('../core'); 2 require('../dynamodb/document_client'); 3 4 AWS.util.update(AWS.DynamoDB.prototype, { 5 /** 6 * @api private 7 */ 8 setupRequestListeners: function setupRequestListeners(request) { 9 if (request.service.config.dynamoDbCrc32) { 10 request.removeListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA); 11 request.addListener('extractData', this.checkCrc32); 12 request.addListener('extractData', AWS.EventListeners.Json.EXTRACT_DATA); 13 } 14 }, 15 16 /** 17 * @api private 18 */ 19 checkCrc32: function checkCrc32(resp) { 20 if (!resp.httpResponse.streaming && !resp.request.service.crc32IsValid(resp)) { 21 resp.data = null; 22 resp.error = AWS.util.error(new Error(), { 23 code: 'CRC32CheckFailed', 24 message: 'CRC32 integrity check failed', 25 retryable: true 26 }); 27 resp.request.haltHandlersOnError(); 28 throw (resp.error); 29 } 30 }, 31 32 /** 33 * @api private 34 */ 35 crc32IsValid: function crc32IsValid(resp) { 36 var crc = resp.httpResponse.headers['x-amz-crc32']; 37 if (!crc) return true; // no (valid) CRC32 header 38 return parseInt(crc, 10) === AWS.util.crypto.crc32(resp.httpResponse.body); 39 }, 40 41 /** 42 * @api private 43 */ 44 defaultRetryCount: 10, 45 46 /** 47 * @api private 48 */ 49 retryDelays: function retryDelays(retryCount) { 50 var delay = retryCount > 0 ? (50 * Math.pow(2, retryCount - 1)) : 0; 51 return delay; 52 } 53 });