ec2.js 1.8 KB

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