ec2.js (1797B)
1 var AWS = require('../core'); 2 3 AWS.util.update(AWS.EC2.prototype, { 4 /** 5 * @api private 6 */ 7 setupRequestListeners: function setupRequestListeners(request) { 8 request.removeListener('extractError', AWS.EventListeners.Query.EXTRACT_ERROR); 9 request.addListener('extractError', this.extractError); 10 11 if (request.operation === 'copySnapshot') { 12 request.onAsync('validate', this.buildCopySnapshotPresignedUrl); 13 } 14 }, 15 16 /** 17 * @api private 18 */ 19 buildCopySnapshotPresignedUrl: function buildCopySnapshotPresignedUrl(req, done) { 20 if (req.params.PresignedUrl || req._subRequest) { 21 return done(); 22 } 23 24 req.params = AWS.util.copy(req.params); 25 req.params.DestinationRegion = req.service.config.region; 26 27 var config = AWS.util.copy(req.service.config); 28 delete config.endpoint; 29 config.region = req.params.SourceRegion; 30 var svc = new req.service.constructor(config); 31 var newReq = svc[req.operation](req.params); 32 newReq._subRequest = true; 33 newReq.presign(function(err, url) { 34 if (err) done(err); 35 else { 36 req.params.PresignedUrl = url; 37 done(); 38 } 39 }); 40 }, 41 42 /** 43 * @api private 44 */ 45 extractError: function extractError(resp) { 46 // EC2 nests the error code and message deeper than other AWS Query services. 47 var httpResponse = resp.httpResponse; 48 var data = new AWS.XML.Parser().parse(httpResponse.body.toString() || ''); 49 if (data.Errors) { 50 resp.error = AWS.util.error(new Error(), { 51 code: data.Errors.Error.Code, 52 message: data.Errors.Error.Message 53 }); 54 } else { 55 resp.error = AWS.util.error(new Error(), { 56 code: httpResponse.statusCode, 57 message: null 58 }); 59 } 60 resp.error.requestId = data.RequestID || null; 61 } 62 });