aws-sdk-core 2.3.23 → 3.89.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (496) hide show
  1. checksums.yaml +5 -5
  2. data/VERSION +1 -0
  3. data/ca-bundle.crt +3615 -3541
  4. data/lib/aws-sdk-core.rb +106 -404
  5. data/lib/aws-sdk-core/arn.rb +77 -0
  6. data/lib/aws-sdk-core/arn_parser.rb +38 -0
  7. data/lib/aws-sdk-core/assume_role_web_identity_credentials.rb +101 -0
  8. data/lib/aws-sdk-core/async_client_stubs.rb +80 -0
  9. data/lib/aws-sdk-core/binary.rb +6 -0
  10. data/lib/aws-sdk-core/binary/decode_handler.rb +56 -0
  11. data/lib/aws-sdk-core/binary/encode_handler.rb +32 -0
  12. data/lib/aws-sdk-core/binary/event_builder.rb +122 -0
  13. data/lib/aws-sdk-core/binary/event_parser.rb +134 -0
  14. data/lib/aws-sdk-core/binary/event_stream_decoder.rb +62 -0
  15. data/lib/aws-sdk-core/binary/event_stream_encoder.rb +53 -0
  16. data/lib/aws-sdk-core/client_side_monitoring/publisher.rb +49 -0
  17. data/lib/aws-sdk-core/client_side_monitoring/request_metrics.rb +197 -0
  18. data/lib/aws-sdk-core/client_stubs.rb +73 -10
  19. data/lib/aws-sdk-core/credential_provider.rb +0 -29
  20. data/lib/aws-sdk-core/credential_provider_chain.rb +56 -6
  21. data/lib/aws-sdk-core/deprecations.rb +16 -10
  22. data/lib/aws-sdk-core/ecs_credentials.rb +14 -10
  23. data/lib/aws-sdk-core/endpoint_cache.rb +191 -0
  24. data/lib/aws-sdk-core/errors.rb +221 -11
  25. data/lib/aws-sdk-core/event_emitter.rb +62 -0
  26. data/lib/aws-sdk-core/ini_parser.rb +41 -0
  27. data/lib/aws-sdk-core/instance_profile_credentials.rb +133 -42
  28. data/lib/aws-sdk-core/json.rb +9 -10
  29. data/lib/aws-sdk-core/json/builder.rb +4 -2
  30. data/lib/aws-sdk-core/json/error_handler.rb +19 -2
  31. data/lib/aws-sdk-core/json/handler.rb +22 -3
  32. data/lib/aws-sdk-core/json/parser.rb +1 -1
  33. data/lib/aws-sdk-core/log/formatter.rb +7 -1
  34. data/lib/aws-sdk-core/log/param_filter.rb +4 -3
  35. data/lib/aws-sdk-core/pageable_response.rb +1 -0
  36. data/lib/aws-sdk-core/pager.rb +30 -25
  37. data/lib/aws-sdk-core/param_converter.rb +3 -3
  38. data/lib/aws-sdk-core/param_validator.rb +60 -26
  39. data/lib/aws-sdk-core/plugins/api_key.rb +52 -0
  40. data/lib/aws-sdk-core/plugins/apig_authorizer_token.rb +30 -0
  41. data/lib/aws-sdk-core/plugins/apig_credentials_configuration.rb +34 -0
  42. data/lib/aws-sdk-core/plugins/apig_user_agent.rb +37 -0
  43. data/lib/aws-sdk-core/plugins/client_metrics_plugin.rb +280 -0
  44. data/lib/aws-sdk-core/plugins/client_metrics_send_plugin.rb +84 -0
  45. data/lib/aws-sdk-core/plugins/credentials_configuration.rb +62 -0
  46. data/lib/aws-sdk-core/plugins/endpoint_discovery.rb +160 -0
  47. data/lib/aws-sdk-core/plugins/endpoint_pattern.rb +63 -0
  48. data/lib/aws-sdk-core/plugins/event_stream_configuration.rb +30 -0
  49. data/lib/aws-sdk-core/plugins/global_configuration.rb +19 -10
  50. data/lib/aws-sdk-core/plugins/helpful_socket_errors.rb +41 -0
  51. data/lib/aws-sdk-core/plugins/idempotency_token.rb +36 -0
  52. data/lib/aws-sdk-core/plugins/invocation_id.rb +33 -0
  53. data/lib/aws-sdk-core/plugins/jsonvalue_converter.rb +29 -0
  54. data/lib/aws-sdk-core/plugins/logging.rb +18 -18
  55. data/lib/aws-sdk-core/plugins/param_converter.rb +9 -5
  56. data/lib/aws-sdk-core/plugins/param_validator.rb +8 -5
  57. data/lib/aws-sdk-core/plugins/protocols/api_gateway.rb +10 -0
  58. data/lib/aws-sdk-core/plugins/protocols/ec2.rb +2 -1
  59. data/lib/aws-sdk-core/plugins/protocols/json_rpc.rb +13 -12
  60. data/lib/aws-sdk-core/plugins/protocols/query.rb +2 -2
  61. data/lib/aws-sdk-core/plugins/regional_endpoint.rb +48 -19
  62. data/lib/aws-sdk-core/plugins/response_paging.rb +5 -18
  63. data/lib/aws-sdk-core/plugins/retry_errors.rb +102 -24
  64. data/lib/aws-sdk-core/plugins/signature_v2.rb +51 -0
  65. data/lib/aws-sdk-core/plugins/signature_v4.rb +141 -0
  66. data/lib/aws-sdk-core/plugins/stub_responses.rb +35 -18
  67. data/lib/aws-sdk-core/plugins/transfer_encoding.rb +53 -0
  68. data/lib/aws-sdk-core/plugins/user_agent.rb +23 -10
  69. data/lib/aws-sdk-core/process_credentials.rb +80 -0
  70. data/lib/aws-sdk-core/query.rb +5 -0
  71. data/lib/aws-sdk-core/query/ec2_param_builder.rb +9 -3
  72. data/lib/aws-sdk-core/query/handler.rb +20 -16
  73. data/lib/aws-sdk-core/query/param_builder.rb +10 -4
  74. data/lib/aws-sdk-core/refreshing_credentials.rb +1 -1
  75. data/lib/aws-sdk-core/resources/collection.rb +121 -0
  76. data/lib/aws-sdk-core/rest.rb +10 -0
  77. data/lib/aws-sdk-core/rest/handler.rb +1 -0
  78. data/lib/aws-sdk-core/rest/request/builder.rb +2 -1
  79. data/lib/aws-sdk-core/rest/request/endpoint.rb +11 -66
  80. data/lib/aws-sdk-core/rest/request/headers.rb +20 -1
  81. data/lib/aws-sdk-core/rest/request/querystring_builder.rb +103 -0
  82. data/lib/aws-sdk-core/rest/response/body.rb +14 -1
  83. data/lib/aws-sdk-core/rest/response/headers.rb +9 -0
  84. data/lib/aws-sdk-core/rest/response/parser.rb +18 -14
  85. data/lib/aws-sdk-core/shared_config.rb +451 -0
  86. data/lib/aws-sdk-core/shared_credentials.rb +16 -53
  87. data/lib/aws-sdk-core/structure.rb +22 -13
  88. data/lib/aws-sdk-core/stubbing/data_applicator.rb +1 -1
  89. data/lib/aws-sdk-core/stubbing/empty_stub.rb +10 -3
  90. data/lib/aws-sdk-core/stubbing/protocols/api_gateway.rb +8 -0
  91. data/lib/aws-sdk-core/stubbing/protocols/ec2.rb +1 -1
  92. data/lib/aws-sdk-core/stubbing/protocols/rest.rb +99 -1
  93. data/lib/aws-sdk-core/stubbing/protocols/rest_json.rb +5 -1
  94. data/lib/aws-sdk-core/stubbing/protocols/rest_xml.rb +9 -5
  95. data/lib/aws-sdk-core/stubbing/stub_data.rb +16 -3
  96. data/lib/aws-sdk-core/util.rb +66 -0
  97. data/lib/aws-sdk-core/waiters.rb +3 -0
  98. data/lib/aws-sdk-core/waiters/poller.rb +5 -7
  99. data/lib/aws-sdk-core/waiters/waiter.rb +3 -2
  100. data/lib/aws-sdk-core/xml.rb +9 -0
  101. data/lib/aws-sdk-core/xml/builder.rb +11 -5
  102. data/lib/aws-sdk-core/xml/error_handler.rb +27 -5
  103. data/lib/aws-sdk-core/xml/parser.rb +1 -11
  104. data/lib/aws-sdk-core/xml/parser/engines/ox.rb +5 -1
  105. data/lib/aws-sdk-core/xml/parser/frame.rb +6 -6
  106. data/lib/aws-sdk-sts.rb +45 -0
  107. data/lib/aws-sdk-sts/client.rb +2156 -0
  108. data/lib/aws-sdk-sts/client_api.rb +336 -0
  109. data/lib/aws-sdk-sts/customizations.rb +2 -0
  110. data/lib/aws-sdk-sts/errors.rb +142 -0
  111. data/lib/aws-sdk-sts/plugins/sts_regional_endpoints.rb +32 -0
  112. data/lib/aws-sdk-sts/presigner.rb +67 -0
  113. data/lib/aws-sdk-sts/resource.rb +23 -0
  114. data/lib/aws-sdk-sts/types.rb +1504 -0
  115. data/lib/seahorse.rb +60 -60
  116. data/lib/seahorse/client/async_base.rb +50 -0
  117. data/lib/seahorse/client/async_response.rb +62 -0
  118. data/lib/seahorse/client/base.rb +5 -9
  119. data/lib/seahorse/client/configuration.rb +10 -2
  120. data/lib/seahorse/client/events.rb +1 -1
  121. data/lib/seahorse/client/h2/connection.rb +246 -0
  122. data/lib/seahorse/client/h2/handler.rb +151 -0
  123. data/lib/seahorse/client/handler_list_entry.rb +2 -2
  124. data/lib/seahorse/client/http/async_response.rb +42 -0
  125. data/lib/seahorse/client/http/response.rb +13 -8
  126. data/lib/seahorse/client/logging/formatter.rb +7 -1
  127. data/lib/seahorse/client/logging/handler.rb +2 -0
  128. data/lib/seahorse/client/net_http/connection_pool.rb +46 -28
  129. data/lib/seahorse/client/net_http/handler.rb +17 -3
  130. data/lib/seahorse/client/net_http/patches.rb +9 -1
  131. data/lib/seahorse/client/networking_error.rb +28 -0
  132. data/lib/seahorse/client/plugin.rb +67 -6
  133. data/lib/seahorse/client/plugin_list.rb +3 -1
  134. data/lib/seahorse/client/plugins/content_length.rb +7 -2
  135. data/lib/seahorse/client/plugins/endpoint.rb +14 -10
  136. data/lib/seahorse/client/plugins/h2.rb +64 -0
  137. data/lib/seahorse/client/plugins/logging.rb +17 -19
  138. data/lib/seahorse/client/plugins/net_http.rb +23 -15
  139. data/lib/seahorse/client/plugins/raise_response_errors.rb +4 -4
  140. data/lib/seahorse/client/plugins/response_target.rb +10 -1
  141. data/lib/seahorse/client/request_context.rb +5 -0
  142. data/lib/seahorse/client/response.rb +9 -20
  143. data/lib/seahorse/model/api.rb +37 -0
  144. data/lib/seahorse/model/authorizer.rb +21 -0
  145. data/lib/seahorse/model/operation.rb +20 -0
  146. data/lib/seahorse/model/shapes.rb +44 -2
  147. data/lib/seahorse/util.rb +1 -21
  148. metadata +127 -360
  149. data/apis/acm/2015-12-08/api-2.json +0 -495
  150. data/apis/acm/2015-12-08/examples-1.json +0 -5
  151. data/apis/acm/2015-12-08/paginators-1.json +0 -10
  152. data/apis/apigateway/2015-07-09/api-2.json +0 -3347
  153. data/apis/apigateway/2015-07-09/examples-1.json +0 -5
  154. data/apis/apigateway/2015-07-09/paginators-1.json +0 -52
  155. data/apis/application-autoscaling/2016-02-06/api-2.json +0 -502
  156. data/apis/application-autoscaling/2016-02-06/examples-1.json +0 -5
  157. data/apis/application-autoscaling/2016-02-06/paginators-1.json +0 -22
  158. data/apis/autoscaling/2011-01-01/api-2.json +0 -2038
  159. data/apis/autoscaling/2011-01-01/examples-1.json +0 -5
  160. data/apis/autoscaling/2011-01-01/paginators-1.json +0 -52
  161. data/apis/autoscaling/2011-01-01/resources-1.json +0 -1613
  162. data/apis/autoscaling/2011-01-01/waiters-2.json +0 -62
  163. data/apis/cloudformation/2010-05-15/api-2.json +0 -1299
  164. data/apis/cloudformation/2010-05-15/examples-1.json +0 -5
  165. data/apis/cloudformation/2010-05-15/paginators-1.json +0 -27
  166. data/apis/cloudformation/2010-05-15/resources-1.json +0 -202
  167. data/apis/cloudformation/2010-05-15/waiters-2.json +0 -235
  168. data/apis/cloudfront/2016-01-28/api-2.json +0 -2218
  169. data/apis/cloudfront/2016-01-28/examples-1.json +0 -5
  170. data/apis/cloudfront/2016-01-28/paginators-1.json +0 -32
  171. data/apis/cloudfront/2016-01-28/waiters-2.json +0 -47
  172. data/apis/cloudhsm/2014-05-30/api-2.json +0 -877
  173. data/apis/cloudhsm/2014-05-30/examples-1.json +0 -5
  174. data/apis/cloudsearch/2013-01-01/api-2.json +0 -2001
  175. data/apis/cloudsearch/2013-01-01/paginators-1.json +0 -20
  176. data/apis/cloudsearchdomain/2013-01-01/api-2.json +0 -373
  177. data/apis/cloudsearchdomain/2013-01-01/examples-1.json +0 -5
  178. data/apis/cloudtrail/2013-11-01/api-2.json +0 -801
  179. data/apis/cloudtrail/2013-11-01/examples-1.json +0 -5
  180. data/apis/cloudtrail/2013-11-01/paginators-1.json +0 -7
  181. data/apis/codecommit/2015-04-13/api-2.json +0 -916
  182. data/apis/codecommit/2015-04-13/examples-1.json +0 -5
  183. data/apis/codecommit/2015-04-13/paginators-1.json +0 -14
  184. data/apis/codedeploy/2014-10-06/api-2.json +0 -1954
  185. data/apis/codedeploy/2014-10-06/examples-1.json +0 -5
  186. data/apis/codedeploy/2014-10-06/paginators-1.json +0 -34
  187. data/apis/codepipeline/2015-07-09/api-2.json +0 -1633
  188. data/apis/codepipeline/2015-07-09/examples-1.json +0 -902
  189. data/apis/cognito-identity/2014-06-30/api-2.json +0 -859
  190. data/apis/cognito-identity/2014-06-30/examples-1.json +0 -5
  191. data/apis/cognito-idp/2016-04-18/api-2.json +0 -1657
  192. data/apis/cognito-idp/2016-04-18/examples-1.json +0 -5
  193. data/apis/cognito-sync/2014-06-30/api-2.json +0 -1874
  194. data/apis/config/2014-11-12/api-2.json +0 -1303
  195. data/apis/config/2014-11-12/examples-1.json +0 -5
  196. data/apis/config/2014-11-12/paginators-1.json +0 -10
  197. data/apis/datapipeline/2012-10-29/api-2.json +0 -1167
  198. data/apis/datapipeline/2012-10-29/paginators-1.json +0 -26
  199. data/apis/devicefarm/2015-06-23/api-2.json +0 -1819
  200. data/apis/devicefarm/2015-06-23/examples-1.json +0 -5
  201. data/apis/devicefarm/2015-06-23/paginators-1.json +0 -74
  202. data/apis/directconnect/2012-10-25/api-2.json +0 -793
  203. data/apis/directconnect/2012-10-25/examples-1.json +0 -5
  204. data/apis/directconnect/2012-10-25/paginators-1.json +0 -22
  205. data/apis/discovery/2015-11-01/api-2.json +0 -556
  206. data/apis/discovery/2015-11-01/examples-1.json +0 -5
  207. data/apis/dms/2016-01-01/api-2.json +0 -1469
  208. data/apis/dms/2016-01-01/examples-1.json +0 -5
  209. data/apis/ds/2015-04-16/api-2.json +0 -1674
  210. data/apis/ds/2015-04-16/examples-1.json +0 -5
  211. data/apis/dynamodb/2012-08-10/api-2.json +0 -1200
  212. data/apis/dynamodb/2012-08-10/examples-1.json +0 -5
  213. data/apis/dynamodb/2012-08-10/paginators-1.json +0 -26
  214. data/apis/dynamodb/2012-08-10/resources-1.json +0 -136
  215. data/apis/dynamodb/2012-08-10/waiters-2.json +0 -35
  216. data/apis/ec2/2015-10-01/api-2.json +0 -13759
  217. data/apis/ec2/2015-10-01/examples-1.json +0 -5
  218. data/apis/ec2/2015-10-01/paginators-1.json +0 -138
  219. data/apis/ec2/2015-10-01/resources-1.json +0 -2582
  220. data/apis/ec2/2015-10-01/waiters-2.json +0 -593
  221. data/apis/ec2/2016-04-01/api-2.json +0 -13842
  222. data/apis/ec2/2016-04-01/examples-1.json +0 -5
  223. data/apis/ec2/2016-04-01/paginators-1.json +0 -138
  224. data/apis/ec2/2016-04-01/resources-1.json +0 -2582
  225. data/apis/ec2/2016-04-01/waiters-2.json +0 -593
  226. data/apis/ecr/2015-09-21/api-2.json +0 -849
  227. data/apis/ecr/2015-09-21/examples-1.json +0 -5
  228. data/apis/ecs/2014-11-13/api-2.json +0 -1396
  229. data/apis/ecs/2014-11-13/examples-1.json +0 -5
  230. data/apis/ecs/2014-11-13/paginators-1.json +0 -40
  231. data/apis/ecs/2014-11-13/waiters-2.json +0 -93
  232. data/apis/elasticache/2015-02-02/api-2.json +0 -2426
  233. data/apis/elasticache/2015-02-02/examples-1.json +0 -5
  234. data/apis/elasticache/2015-02-02/paginators-1.json +0 -76
  235. data/apis/elasticache/2015-02-02/waiters-2.json +0 -143
  236. data/apis/elasticbeanstalk/2010-12-01/api-2.json +0 -1894
  237. data/apis/elasticbeanstalk/2010-12-01/examples-1.json +0 -1109
  238. data/apis/elasticbeanstalk/2010-12-01/paginators-1.json +0 -25
  239. data/apis/elasticfilesystem/2015-02-01/api-2.json +0 -713
  240. data/apis/elasticfilesystem/2015-02-01/examples-1.json +0 -5
  241. data/apis/elasticloadbalancing/2012-06-01/api-2.json +0 -2145
  242. data/apis/elasticloadbalancing/2012-06-01/paginators-1.json +0 -18
  243. data/apis/elasticloadbalancing/2012-06-01/waiters-2.json +0 -49
  244. data/apis/elasticmapreduce/2009-03-31/api-2.json +0 -1341
  245. data/apis/elasticmapreduce/2009-03-31/examples-1.json +0 -5
  246. data/apis/elasticmapreduce/2009-03-31/paginators-1.json +0 -32
  247. data/apis/elasticmapreduce/2009-03-31/waiters-2.json +0 -67
  248. data/apis/elastictranscoder/2012-09-25/api-2.json +0 -1807
  249. data/apis/elastictranscoder/2012-09-25/paginators-1.json +0 -24
  250. data/apis/elastictranscoder/2012-09-25/waiters-2.json +0 -30
  251. data/apis/email/2010-12-01/api-2.json +0 -1791
  252. data/apis/email/2010-12-01/examples-1.json +0 -5
  253. data/apis/email/2010-12-01/paginators-1.json +0 -13
  254. data/apis/email/2010-12-01/waiters-2.json +0 -18
  255. data/apis/es/2015-01-01/api-2.json +0 -764
  256. data/apis/events/2015-10-07/api-2.json +0 -643
  257. data/apis/events/2015-10-07/examples-1.json +0 -5
  258. data/apis/firehose/2015-08-04/api-2.json +0 -719
  259. data/apis/gamelift/2015-10-01/api-2.json +0 -2307
  260. data/apis/gamelift/2015-10-01/examples-1.json +0 -5
  261. data/apis/glacier/2012-06-01/api-2.json +0 -2144
  262. data/apis/glacier/2012-06-01/paginators-1.json +0 -28
  263. data/apis/glacier/2012-06-01/resources-1.json +0 -563
  264. data/apis/glacier/2012-06-01/waiters-2.json +0 -39
  265. data/apis/iam/2010-05-08/api-2.json +0 -4514
  266. data/apis/iam/2010-05-08/examples-1.json +0 -5
  267. data/apis/iam/2010-05-08/paginators-1.json +0 -198
  268. data/apis/iam/2010-05-08/resources-1.json +0 -1740
  269. data/apis/iam/2010-05-08/waiters-2.json +0 -39
  270. data/apis/importexport/2010-06-01/api-2.json +0 -666
  271. data/apis/importexport/2010-06-01/paginators-1.json +0 -11
  272. data/apis/inspector/2016-02-16/api-2.json +0 -1964
  273. data/apis/inspector/2016-02-16/examples-1.json +0 -5
  274. data/apis/iot-data/2015-05-28/api-2.json +0 -263
  275. data/apis/iot/2015-05-28/api-2.json +0 -3800
  276. data/apis/iot/2015-05-28/examples-1.json +0 -5
  277. data/apis/kinesis/2013-12-02/api-2.json +0 -822
  278. data/apis/kinesis/2013-12-02/examples-1.json +0 -5
  279. data/apis/kinesis/2013-12-02/paginators-1.json +0 -18
  280. data/apis/kinesis/2013-12-02/waiters-2.json +0 -18
  281. data/apis/kms/2014-11-01/api-2.json +0 -1209
  282. data/apis/kms/2014-11-01/examples-1.json +0 -5
  283. data/apis/kms/2014-11-01/paginators-1.json +0 -32
  284. data/apis/lambda/2014-11-11/api-2.json +0 -667
  285. data/apis/lambda/2014-11-11/paginators-1.json +0 -16
  286. data/apis/lambda/2015-03-31/api-2.json +0 -1342
  287. data/apis/lambda/2015-03-31/examples-1.json +0 -5
  288. data/apis/lambda/2015-03-31/paginators-1.json +0 -16
  289. data/apis/logs/2014-03-28/api-2.json +0 -1138
  290. data/apis/logs/2014-03-28/examples-1.json +0 -5
  291. data/apis/logs/2014-03-28/paginators-1.json +0 -49
  292. data/apis/machinelearning/2014-12-12/api-2.json +0 -1947
  293. data/apis/machinelearning/2014-12-12/paginators-1.json +0 -28
  294. data/apis/machinelearning/2014-12-12/waiters-2.json +0 -81
  295. data/apis/marketplacecommerceanalytics/2015-07-01/api-2.json +0 -120
  296. data/apis/marketplacecommerceanalytics/2015-07-01/examples-1.json +0 -5
  297. data/apis/meteringmarketplace/2016-01-14/api-2.json +0 -127
  298. data/apis/meteringmarketplace/2016-01-14/examples-1.json +0 -5
  299. data/apis/monitoring/2010-08-01/api-2.json +0 -790
  300. data/apis/monitoring/2010-08-01/examples-1.json +0 -5
  301. data/apis/monitoring/2010-08-01/paginators-1.json +0 -24
  302. data/apis/monitoring/2010-08-01/resources-1.json +0 -346
  303. data/apis/monitoring/2010-08-01/waiters-2.json +0 -18
  304. data/apis/opsworks/2013-02-18/api-2.json +0 -2606
  305. data/apis/opsworks/2013-02-18/examples-1.json +0 -5
  306. data/apis/opsworks/2013-02-18/paginators-1.json +0 -55
  307. data/apis/opsworks/2013-02-18/resources-1.json +0 -173
  308. data/apis/opsworks/2013-02-18/waiters-2.json +0 -295
  309. data/apis/rds/2014-10-31/api-2.json +0 -4757
  310. data/apis/rds/2014-10-31/examples-1.json +0 -5
  311. data/apis/rds/2014-10-31/paginators-1.json +0 -110
  312. data/apis/rds/2014-10-31/resources-1.json +0 -3272
  313. data/apis/rds/2014-10-31/waiters-2.json +0 -102
  314. data/apis/redshift/2012-12-01/api-2.json +0 -3768
  315. data/apis/redshift/2012-12-01/examples-1.json +0 -5
  316. data/apis/redshift/2012-12-01/paginators-1.json +0 -94
  317. data/apis/redshift/2012-12-01/waiters-2.json +0 -97
  318. data/apis/route53/2013-04-01/api-2.json +0 -3245
  319. data/apis/route53/2013-04-01/examples-1.json +0 -5
  320. data/apis/route53/2013-04-01/paginators-1.json +0 -33
  321. data/apis/route53/2013-04-01/waiters-2.json +0 -18
  322. data/apis/route53domains/2014-05-15/api-2.json +0 -1197
  323. data/apis/route53domains/2014-05-15/paginators-1.json +0 -17
  324. data/apis/s3/2006-03-01/api-2.json +0 -4517
  325. data/apis/s3/2006-03-01/examples-1.json +0 -5
  326. data/apis/s3/2006-03-01/paginators-1.json +0 -66
  327. data/apis/s3/2006-03-01/resources-1.json +0 -1176
  328. data/apis/s3/2006-03-01/waiters-2.json +0 -73
  329. data/apis/sdb/2009-04-15/api-2.json +0 -954
  330. data/apis/sdb/2009-04-15/paginators-1.json +0 -15
  331. data/apis/servicecatalog/2015-12-10/api-2.json +0 -749
  332. data/apis/servicecatalog/2015-12-10/examples-1.json +0 -5
  333. data/apis/sns/2010-03-31/api-2.json +0 -1139
  334. data/apis/sns/2010-03-31/paginators-1.json +0 -29
  335. data/apis/sns/2010-03-31/resources-1.json +0 -327
  336. data/apis/sqs/2012-11-05/api-2.json +0 -950
  337. data/apis/sqs/2012-11-05/examples-1.json +0 -44
  338. data/apis/sqs/2012-11-05/paginators-1.json +0 -7
  339. data/apis/ssm/2014-11-06/api-2.json +0 -1742
  340. data/apis/ssm/2014-11-06/examples-1.json +0 -5
  341. data/apis/ssm/2014-11-06/paginators-1.json +0 -34
  342. data/apis/storagegateway/2013-06-30/api-2.json +0 -2275
  343. data/apis/storagegateway/2013-06-30/examples-1.json +0 -5
  344. data/apis/storagegateway/2013-06-30/paginators-1.json +0 -52
  345. data/apis/streams.dynamodb/2012-08-10/api-2.json +0 -397
  346. data/apis/streams.dynamodb/2012-08-10/examples-1.json +0 -5
  347. data/apis/sts/2011-06-15/api-2.json +0 -521
  348. data/apis/sts/2011-06-15/examples-1.json +0 -5
  349. data/apis/support/2013-04-15/api-2.json +0 -869
  350. data/apis/support/2013-04-15/paginators-1.json +0 -25
  351. data/apis/swf/2012-01-25/api-2.json +0 -2838
  352. data/apis/swf/2012-01-25/paginators-1.json +0 -46
  353. data/apis/waf/2015-08-24/api-2.json +0 -1959
  354. data/apis/waf/2015-08-24/examples-1.json +0 -5
  355. data/apis/workspaces/2015-04-08/api-2.json +0 -632
  356. data/apis/workspaces/2015-04-08/examples-1.json +0 -5
  357. data/apis/workspaces/2015-04-08/paginators-1.json +0 -20
  358. data/bin/aws.rb +0 -180
  359. data/endpoints.json +0 -1460
  360. data/lib/aws-sdk-core/acm.rb +0 -6
  361. data/lib/aws-sdk-core/api/builder.rb +0 -106
  362. data/lib/aws-sdk-core/api/customizations.rb +0 -217
  363. data/lib/aws-sdk-core/api/docs/builder.rb +0 -220
  364. data/lib/aws-sdk-core/api/docs/client_type_documenter.rb +0 -109
  365. data/lib/aws-sdk-core/api/docs/docstring_provider.rb +0 -75
  366. data/lib/aws-sdk-core/api/docs/operation_documenter.rb +0 -138
  367. data/lib/aws-sdk-core/api/docs/param_formatter.rb +0 -163
  368. data/lib/aws-sdk-core/api/docs/request_syntax_example.rb +0 -22
  369. data/lib/aws-sdk-core/api/docs/response_structure_example.rb +0 -91
  370. data/lib/aws-sdk-core/api/docs/shared_example.rb +0 -100
  371. data/lib/aws-sdk-core/api/docs/utils.rb +0 -133
  372. data/lib/aws-sdk-core/api/shape_map.rb +0 -142
  373. data/lib/aws-sdk-core/apigateway.rb +0 -6
  374. data/lib/aws-sdk-core/applicationautoscaling.rb +0 -6
  375. data/lib/aws-sdk-core/applicationdiscoveryservice.rb +0 -5
  376. data/lib/aws-sdk-core/autoscaling.rb +0 -8
  377. data/lib/aws-sdk-core/checksums.rb +0 -51
  378. data/lib/aws-sdk-core/client.rb +0 -67
  379. data/lib/aws-sdk-core/client_waiters.rb +0 -120
  380. data/lib/aws-sdk-core/cloudformation.rb +0 -8
  381. data/lib/aws-sdk-core/cloudfront.rb +0 -15
  382. data/lib/aws-sdk-core/cloudfront/url_signer.rb +0 -167
  383. data/lib/aws-sdk-core/cloudhsm.rb +0 -5
  384. data/lib/aws-sdk-core/cloudsearch.rb +0 -5
  385. data/lib/aws-sdk-core/cloudsearchdomain.rb +0 -5
  386. data/lib/aws-sdk-core/cloudtrail.rb +0 -6
  387. data/lib/aws-sdk-core/cloudwatch.rb +0 -8
  388. data/lib/aws-sdk-core/cloudwatchevents.rb +0 -5
  389. data/lib/aws-sdk-core/cloudwatchlogs.rb +0 -6
  390. data/lib/aws-sdk-core/codecommit.rb +0 -6
  391. data/lib/aws-sdk-core/codedeploy.rb +0 -6
  392. data/lib/aws-sdk-core/codepipeline.rb +0 -5
  393. data/lib/aws-sdk-core/cognitoidentity.rb +0 -5
  394. data/lib/aws-sdk-core/cognitoidentityprovider.rb +0 -5
  395. data/lib/aws-sdk-core/cognitosync.rb +0 -4
  396. data/lib/aws-sdk-core/configservice.rb +0 -6
  397. data/lib/aws-sdk-core/databasemigrationservice.rb +0 -5
  398. data/lib/aws-sdk-core/datapipeline.rb +0 -5
  399. data/lib/aws-sdk-core/devicefarm.rb +0 -6
  400. data/lib/aws-sdk-core/directconnect.rb +0 -6
  401. data/lib/aws-sdk-core/directoryservice.rb +0 -5
  402. data/lib/aws-sdk-core/dynamodb.rb +0 -40
  403. data/lib/aws-sdk-core/dynamodb/attribute_value.rb +0 -108
  404. data/lib/aws-sdk-core/dynamodbstreams.rb +0 -5
  405. data/lib/aws-sdk-core/ec2.rb +0 -8
  406. data/lib/aws-sdk-core/ecr.rb +0 -5
  407. data/lib/aws-sdk-core/ecs.rb +0 -7
  408. data/lib/aws-sdk-core/efs.rb +0 -5
  409. data/lib/aws-sdk-core/elasticache.rb +0 -7
  410. data/lib/aws-sdk-core/elasticbeanstalk.rb +0 -6
  411. data/lib/aws-sdk-core/elasticloadbalancing.rb +0 -6
  412. data/lib/aws-sdk-core/elasticsearchservice.rb +0 -4
  413. data/lib/aws-sdk-core/elastictranscoder.rb +0 -6
  414. data/lib/aws-sdk-core/empty_structure.rb +0 -3
  415. data/lib/aws-sdk-core/emr.rb +0 -7
  416. data/lib/aws-sdk-core/endpoint_provider.rb +0 -95
  417. data/lib/aws-sdk-core/firehose.rb +0 -4
  418. data/lib/aws-sdk-core/gamelift.rb +0 -5
  419. data/lib/aws-sdk-core/glacier.rb +0 -7
  420. data/lib/aws-sdk-core/iam.rb +0 -8
  421. data/lib/aws-sdk-core/importexport.rb +0 -5
  422. data/lib/aws-sdk-core/inspector.rb +0 -5
  423. data/lib/aws-sdk-core/iot.rb +0 -5
  424. data/lib/aws-sdk-core/iotdataplane.rb +0 -4
  425. data/lib/aws-sdk-core/kinesis.rb +0 -7
  426. data/lib/aws-sdk-core/kms.rb +0 -6
  427. data/lib/aws-sdk-core/lambda.rb +0 -6
  428. data/lib/aws-sdk-core/lambdapreview.rb +0 -5
  429. data/lib/aws-sdk-core/machinelearning.rb +0 -6
  430. data/lib/aws-sdk-core/marketplacecommerceanalytics.rb +0 -5
  431. data/lib/aws-sdk-core/marketplacemetering.rb +0 -5
  432. data/lib/aws-sdk-core/opsworks.rb +0 -8
  433. data/lib/aws-sdk-core/partitions.rb +0 -174
  434. data/lib/aws-sdk-core/partitions/partition.rb +0 -95
  435. data/lib/aws-sdk-core/partitions/partition_list.rb +0 -60
  436. data/lib/aws-sdk-core/partitions/region.rb +0 -78
  437. data/lib/aws-sdk-core/partitions/service.rb +0 -84
  438. data/lib/aws-sdk-core/plugins/api_gateway_header.rb +0 -19
  439. data/lib/aws-sdk-core/plugins/csd_conditional_signing.rb +0 -30
  440. data/lib/aws-sdk-core/plugins/dynamodb_crc32_validation.rb +0 -52
  441. data/lib/aws-sdk-core/plugins/dynamodb_extended_retries.rb +0 -22
  442. data/lib/aws-sdk-core/plugins/dynamodb_simple_attributes.rb +0 -209
  443. data/lib/aws-sdk-core/plugins/ec2_copy_encrypted_snapshot.rb +0 -87
  444. data/lib/aws-sdk-core/plugins/ec2_region_validation.rb +0 -17
  445. data/lib/aws-sdk-core/plugins/glacier_account_id.rb +0 -19
  446. data/lib/aws-sdk-core/plugins/glacier_api_version.rb +0 -19
  447. data/lib/aws-sdk-core/plugins/glacier_checksums.rb +0 -87
  448. data/lib/aws-sdk-core/plugins/machine_learning_predict_endpoint.rb +0 -20
  449. data/lib/aws-sdk-core/plugins/request_signer.rb +0 -138
  450. data/lib/aws-sdk-core/plugins/route_53_id_fix.rb +0 -55
  451. data/lib/aws-sdk-core/plugins/s3_accelerate.rb +0 -73
  452. data/lib/aws-sdk-core/plugins/s3_bucket_dns.rb +0 -86
  453. data/lib/aws-sdk-core/plugins/s3_bucket_name_restrictions.rb +0 -21
  454. data/lib/aws-sdk-core/plugins/s3_expect_100_continue.rb +0 -27
  455. data/lib/aws-sdk-core/plugins/s3_get_bucket_location_fix.rb +0 -21
  456. data/lib/aws-sdk-core/plugins/s3_http_200_errors.rb +0 -45
  457. data/lib/aws-sdk-core/plugins/s3_location_constraint.rb +0 -31
  458. data/lib/aws-sdk-core/plugins/s3_md5s.rb +0 -50
  459. data/lib/aws-sdk-core/plugins/s3_redirects.rb +0 -37
  460. data/lib/aws-sdk-core/plugins/s3_request_signer.rb +0 -166
  461. data/lib/aws-sdk-core/plugins/s3_sse_cpk.rb +0 -64
  462. data/lib/aws-sdk-core/plugins/s3_url_encoded_keys.rb +0 -92
  463. data/lib/aws-sdk-core/plugins/sqs_md5s.rb +0 -162
  464. data/lib/aws-sdk-core/plugins/sqs_queue_urls.rb +0 -34
  465. data/lib/aws-sdk-core/plugins/swf_read_timeouts.rb +0 -23
  466. data/lib/aws-sdk-core/rds.rb +0 -8
  467. data/lib/aws-sdk-core/redshift.rb +0 -7
  468. data/lib/aws-sdk-core/route53.rb +0 -7
  469. data/lib/aws-sdk-core/route53domains.rb +0 -5
  470. data/lib/aws-sdk-core/s3.rb +0 -26
  471. data/lib/aws-sdk-core/s3/bucket_region_cache.rb +0 -75
  472. data/lib/aws-sdk-core/s3/presigner.rb +0 -113
  473. data/lib/aws-sdk-core/service.rb +0 -4
  474. data/lib/aws-sdk-core/servicecatalog.rb +0 -5
  475. data/lib/aws-sdk-core/ses.rb +0 -7
  476. data/lib/aws-sdk-core/signers/base.rb +0 -31
  477. data/lib/aws-sdk-core/signers/s3.rb +0 -184
  478. data/lib/aws-sdk-core/signers/v2.rb +0 -51
  479. data/lib/aws-sdk-core/signers/v3.rb +0 -34
  480. data/lib/aws-sdk-core/signers/v4.rb +0 -233
  481. data/lib/aws-sdk-core/simpledb.rb +0 -5
  482. data/lib/aws-sdk-core/sns.rb +0 -6
  483. data/lib/aws-sdk-core/sqs.rb +0 -6
  484. data/lib/aws-sdk-core/ssm.rb +0 -6
  485. data/lib/aws-sdk-core/storagegateway.rb +0 -6
  486. data/lib/aws-sdk-core/sts.rb +0 -5
  487. data/lib/aws-sdk-core/support.rb +0 -5
  488. data/lib/aws-sdk-core/swf.rb +0 -5
  489. data/lib/aws-sdk-core/tree_hash.rb +0 -69
  490. data/lib/aws-sdk-core/version.rb +0 -3
  491. data/lib/aws-sdk-core/waf.rb +0 -5
  492. data/lib/aws-sdk-core/waiters/null_provider.rb +0 -12
  493. data/lib/aws-sdk-core/waiters/provider.rb +0 -35
  494. data/lib/aws-sdk-core/workspaces.rb +0 -6
  495. data/lib/seahorse/client/plugins/restful_bindings.rb +0 -127
  496. data/service-models.json +0 -285
@@ -1,60 +1,60 @@
1
- module Seahorse
2
-
3
- autoload :Util, 'seahorse/util'
4
-
5
- module Client
6
-
7
- autoload :Base, 'seahorse/client/base'
8
- autoload :BlockIO, 'seahorse/client/block_io'
9
- autoload :Configuration, 'seahorse/client/configuration'
10
- autoload :Handler, 'seahorse/client/handler'
11
- autoload :HandlerBuilder, 'seahorse/client/handler_builder'
12
- autoload :HandlerList, 'seahorse/client/handler_list'
13
- autoload :HandlerListEntry, 'seahorse/client/handler_list_entry'
14
- autoload :ManagedFile, 'seahorse/client/managed_file'
15
- autoload :NetworkingError, 'seahorse/client/networking_error'
16
- autoload :Plugin, 'seahorse/client/plugin'
17
- autoload :PluginList, 'seahorse/client/plugin_list'
18
- autoload :Request, 'seahorse/client/request'
19
- autoload :RequestContext, 'seahorse/client/request_context'
20
- autoload :Response, 'seahorse/client/response'
21
-
22
- module Http
23
- autoload :Headers, 'seahorse/client/http/headers'
24
- autoload :Request, 'seahorse/client/http/request'
25
- autoload :Response, 'seahorse/client/http/response'
26
- end
27
-
28
- # The following module has been deprecated.
29
- # @api private
30
- module Logging
31
- autoload :Handler, 'seahorse/client/logging/handler'
32
- autoload :Formatter, 'seahorse/client/logging/formatter'
33
- end
34
-
35
- # @api private
36
- module NetHttp
37
- autoload :ConnectionPool, 'seahorse/client/net_http/connection_pool'
38
- autoload :Handler, 'seahorse/client/net_http/handler'
39
- autoload :Patches, 'seahorse/client/net_http/patches'
40
- end
41
-
42
- module Plugins
43
- autoload :ContentLength, 'seahorse/client/plugins/content_length'
44
- autoload :Endpoint, 'seahorse/client/plugins/endpoint'
45
- autoload :Logging, 'seahorse/client/plugins/logging'
46
- autoload :NetHttp, 'seahorse/client/plugins/net_http'
47
- autoload :RaiseResponseErrors, 'seahorse/client/plugins/raise_response_errors'
48
- autoload :ResponseTarget, 'seahorse/client/plugins/response_target'
49
- autoload :RestfulBindings, 'seahorse/client/plugins/restful_bindings'
50
- end
51
-
52
- end
53
-
54
- module Model
55
- autoload :Api, 'seahorse/model/api'
56
- autoload :Operation, 'seahorse/model/operation'
57
- autoload :Shapes, 'seahorse/model/shapes'
58
- end
59
-
60
- end
1
+ require_relative 'seahorse/util'
2
+
3
+ # client
4
+
5
+ require_relative 'seahorse/client/block_io'
6
+ require_relative 'seahorse/client/configuration'
7
+ require_relative 'seahorse/client/handler'
8
+ require_relative 'seahorse/client/handler_builder'
9
+ require_relative 'seahorse/client/handler_list'
10
+ require_relative 'seahorse/client/handler_list_entry'
11
+ require_relative 'seahorse/client/managed_file'
12
+ require_relative 'seahorse/client/networking_error'
13
+ require_relative 'seahorse/client/plugin'
14
+ require_relative 'seahorse/client/plugin_list'
15
+ require_relative 'seahorse/client/request'
16
+ require_relative 'seahorse/client/request_context'
17
+ require_relative 'seahorse/client/response'
18
+ require_relative 'seahorse/client/async_response'
19
+
20
+ # client http
21
+
22
+ require_relative 'seahorse/client/http/headers'
23
+ require_relative 'seahorse/client/http/request'
24
+ require_relative 'seahorse/client/http/response'
25
+ require_relative 'seahorse/client/http/async_response'
26
+
27
+ # client logging
28
+
29
+ require_relative 'seahorse/client/logging/handler'
30
+ require_relative 'seahorse/client/logging/formatter'
31
+
32
+ # net http handler
33
+
34
+ require_relative 'seahorse/client/net_http/connection_pool'
35
+ require_relative 'seahorse/client/net_http/handler'
36
+
37
+ # http2 handler
38
+
39
+ require_relative 'seahorse/client/h2/connection'
40
+ require_relative 'seahorse/client/h2/handler'
41
+
42
+ # plugins
43
+
44
+ require_relative 'seahorse/client/plugins/content_length'
45
+ require_relative 'seahorse/client/plugins/endpoint'
46
+ require_relative 'seahorse/client/plugins/logging'
47
+ require_relative 'seahorse/client/plugins/net_http'
48
+ require_relative 'seahorse/client/plugins/h2'
49
+ require_relative 'seahorse/client/plugins/raise_response_errors'
50
+ require_relative 'seahorse/client/plugins/response_target'
51
+
52
+ # model
53
+
54
+ require_relative 'seahorse/model/api'
55
+ require_relative 'seahorse/model/operation'
56
+ require_relative 'seahorse/model/authorizer'
57
+ require_relative 'seahorse/model/shapes'
58
+
59
+ require_relative 'seahorse/client/base'
60
+ require_relative 'seahorse/client/async_base'
@@ -0,0 +1,50 @@
1
+ module Seahorse
2
+ module Client
3
+ class AsyncBase < Seahorse::Client::Base
4
+
5
+ # default H2 plugins
6
+ @plugins = PluginList.new([
7
+ Plugins::Endpoint,
8
+ Plugins::H2,
9
+ Plugins::ResponseTarget
10
+ ])
11
+
12
+ def initialize(plugins, options)
13
+ super
14
+ @connection = H2::Connection.new(options)
15
+ @options = options
16
+ end
17
+
18
+ # @return [H2::Connection]
19
+ attr_reader :connection
20
+
21
+ # @return [Array<Symbol>] Returns a list of valid async request
22
+ # operation names.
23
+ def operation_names
24
+ self.class.api.async_operation_names
25
+ end
26
+
27
+ # Closes the underlying HTTP2 Connection for the client
28
+ # @return [Symbol] Returns the status of the connection (:closed)
29
+ def close_connection
30
+ @connection.close!
31
+ end
32
+
33
+ # Creates a new HTTP2 Connection for the client
34
+ # @return [Seahorse::Client::H2::Connection]
35
+ def new_connection
36
+ if @connection.closed?
37
+ @connection = H2::Connection.new(@options)
38
+ else
39
+ @connection
40
+ end
41
+ end
42
+
43
+ def connection_errors
44
+ @connection.errors
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
+
@@ -0,0 +1,62 @@
1
+ module Seahorse
2
+ module Client
3
+ class AsyncResponse
4
+
5
+ def initialize(options = {})
6
+ @response = Response.new(context: options[:context])
7
+ @stream = options[:stream]
8
+ @stream_mutex = options[:stream_mutex]
9
+ @close_condition = options[:close_condition]
10
+ @sync_queue = options[:sync_queue]
11
+ end
12
+
13
+ def context
14
+ @response.context
15
+ end
16
+
17
+ def error
18
+ @response.error
19
+ end
20
+
21
+ def on(range, &block)
22
+ @response.on(range, &block)
23
+ self
24
+ end
25
+
26
+ def on_complete(&block)
27
+ @response.on_complete(&block)
28
+ self
29
+ end
30
+
31
+ def wait
32
+ if error && context.config.raise_response_errors
33
+ raise error
34
+ elsif @stream
35
+ # have a sync signal that #signal can be blocked on
36
+ # else, if #signal is called before #wait
37
+ # will be waiting for a signal never arrives
38
+ @sync_queue << "sync_signal"
39
+ # now #signal is unlocked for
40
+ # signaling close condition when ready
41
+ @stream_mutex.synchronize {
42
+ @close_condition.wait(@stream_mutex)
43
+ }
44
+ @response
45
+ end
46
+ end
47
+
48
+ def join!
49
+ if error && context.config.raise_response_errors
50
+ raise error
51
+ elsif @stream
52
+ # close callback is waiting
53
+ # for the "sync_signal"
54
+ @sync_queue << "sync_signal"
55
+ @stream.close
56
+ @response
57
+ end
58
+ end
59
+
60
+ end
61
+ end
62
+ end
@@ -37,12 +37,6 @@ module Seahorse
37
37
  context_for(operation_name, params))
38
38
  end
39
39
 
40
- # @param [String] name
41
- # @return [Model::Operation]
42
- def operation(name)
43
- config.api.operation(name)
44
- end
45
-
46
40
  # @api private
47
41
  def inspect
48
42
  "#<#{self.class.name}>"
@@ -52,7 +46,7 @@ module Seahorse
52
46
  # names. These are valid arguments to {#build_request} and are also
53
47
  # valid methods.
54
48
  def operation_names
55
- self.class.api.operation_names
49
+ self.class.api.operation_names - self.class.api.async_operation_names
56
50
  end
57
51
 
58
52
  private
@@ -89,7 +83,7 @@ module Seahorse
89
83
  def context_for(operation_name, params)
90
84
  RequestContext.new(
91
85
  operation_name: operation_name,
92
- operation: operation(operation_name),
86
+ operation: config.api.operation(operation_name),
93
87
  client: self,
94
88
  params: params,
95
89
  config: config)
@@ -200,13 +194,15 @@ module Seahorse
200
194
  private
201
195
 
202
196
  def define_operation_methods
197
+ operations_module = Module.new
203
198
  @api.operation_names.each do |method_name|
204
- define_method(method_name) do |*args, &block|
199
+ operations_module.send(:define_method, method_name) do |*args, &block|
205
200
  params = args[0] || {}
206
201
  options = args[1] || {}
207
202
  build_request(method_name, params).send_request(options, &block)
208
203
  end
209
204
  end
205
+ include(operations_module)
210
206
  end
211
207
 
212
208
  def build_plugins
@@ -104,7 +104,7 @@ module Seahorse
104
104
  #
105
105
  # @return [self]
106
106
  def add_option(name, default = nil, &block)
107
- default = DynamicDefault.new(Proc.new) if block_given?
107
+ default = DynamicDefault.new(block) if block_given?
108
108
  @defaults[name.to_sym] << default
109
109
  self
110
110
  end
@@ -197,7 +197,15 @@ module Seahorse
197
197
 
198
198
  def value_at(opt_name)
199
199
  value = @struct[opt_name]
200
- value.is_a?(Defaults) ? resolve_defaults(opt_name, value) : value
200
+ if value.is_a?(Defaults)
201
+ # this config value is used by endpoint discovery
202
+ if opt_name == :endpoint && @struct.members.include?(:regional_endpoint)
203
+ @struct[:regional_endpoint] = true
204
+ end
205
+ resolve_defaults(opt_name, value)
206
+ else
207
+ value
208
+ end
201
209
  end
202
210
 
203
211
  def resolve_defaults(opt_name, defaults)
@@ -9,7 +9,7 @@ module Seahorse
9
9
 
10
10
  def emit(event_name, *args, &block)
11
11
  @listeners[event_name] ||= []
12
- @listeners[event_name] << Proc.new
12
+ @listeners[event_name] << block if block_given?
13
13
  end
14
14
 
15
15
  def signal(event, *args)
@@ -0,0 +1,246 @@
1
+ if RUBY_VERSION >= '2.1'
2
+ begin
3
+ require 'http/2'
4
+ rescue LoadError; end
5
+ end
6
+ require 'openssl'
7
+ require 'socket'
8
+
9
+ module Seahorse
10
+ module Client
11
+ # @api private
12
+ module H2
13
+
14
+ # H2 Connection build on top of `http/2` gem
15
+ # (requires Ruby >= 2.1)
16
+ # with TLS layer plus ALPN, requires:
17
+ # Ruby >= 2.3 and OpenSSL >= 1.0.2
18
+ class Connection
19
+
20
+ OPTIONS = {
21
+ max_concurrent_streams: 100,
22
+ connection_timeout: 60,
23
+ connection_read_timeout: 60,
24
+ http_wire_trace: false,
25
+ logger: nil,
26
+ ssl_verify_peer: true,
27
+ ssl_ca_bundle: nil,
28
+ ssl_ca_directory: nil,
29
+ ssl_ca_store: nil,
30
+ enable_alpn: false
31
+ }
32
+
33
+ # chunk read size at socket
34
+ CHUNKSIZE = 1024
35
+
36
+ SOCKET_FAMILY = ::Socket::AF_INET
37
+
38
+ def initialize(options = {})
39
+ OPTIONS.each_pair do |opt_name, default_value|
40
+ value = options[opt_name].nil? ? default_value : options[opt_name]
41
+ instance_variable_set("@#{opt_name}", value)
42
+ end
43
+ @h2_client = HTTP2::Client.new(
44
+ settings_max_concurrent_streams: max_concurrent_streams
45
+ )
46
+ @logger = options[:logger] || Logger.new($stdout) if @http_wire_trace
47
+ @chunk_size = options[:read_chunk_size] || CHUNKSIZE
48
+ @errors = []
49
+ @status = :ready
50
+ @mutex = Mutex.new # connection can be shared across requests
51
+ @socket = nil
52
+ @socket_thread = nil
53
+ end
54
+
55
+ OPTIONS.keys.each do |attr_name|
56
+ attr_reader(attr_name)
57
+ end
58
+
59
+ alias ssl_verify_peer? ssl_verify_peer
60
+
61
+ attr_reader :errors
62
+
63
+ attr_accessor :input_signal_thread
64
+
65
+ def new_stream
66
+ begin
67
+ @h2_client.new_stream
68
+ rescue => error
69
+ raise Http2StreamInitializeError.new(error)
70
+ end
71
+ end
72
+
73
+ def connect(endpoint)
74
+ @mutex.synchronize {
75
+ if @status == :ready
76
+ tcp, addr = _tcp_socket(endpoint)
77
+ debug_output("opening connection to #{endpoint.host}:#{endpoint.port} ...")
78
+ _nonblocking_connect(tcp, addr)
79
+ debug_output("opened")
80
+
81
+ @socket = OpenSSL::SSL::SSLSocket.new(tcp, _tls_context)
82
+ @socket.sync_close = true
83
+ @socket.hostname = endpoint.host
84
+
85
+ debug_output("starting TLS for #{endpoint.host}:#{endpoint.port} ...")
86
+ @socket.connect
87
+ debug_output("TLS established")
88
+ _register_h2_callbacks
89
+ @status = :active
90
+ elsif @status == :closed
91
+ msg = "Async Client HTTP2 Connection is closed, you may"\
92
+ " use #new_connection to create a new HTTP2 Connection for this client"
93
+ raise Http2ConnectionClosedError.new(msg)
94
+ end
95
+ }
96
+ end
97
+
98
+ def start(stream)
99
+ @mutex.synchronize {
100
+ return if @socket_thread
101
+ @socket_thread = Thread.new do
102
+ while !@socket.closed?
103
+ begin
104
+ data = @socket.read_nonblock(@chunk_size)
105
+ @h2_client << data
106
+ rescue IO::WaitReadable
107
+ begin
108
+ unless IO.select([@socket], nil, nil, connection_read_timeout)
109
+ self.debug_output("socket connection read time out")
110
+ self.close!
111
+ else
112
+ # available, retry to start reading
113
+ retry
114
+ end
115
+ rescue
116
+ # error can happen when closing the socket
117
+ # while it's waiting for read
118
+ self.close!
119
+ end
120
+ rescue EOFError
121
+ self.close!
122
+ rescue => error
123
+ self.debug_output(error.inspect)
124
+ @errors << error
125
+ self.close!
126
+ end
127
+ end
128
+ end
129
+ @socket_thread.abort_on_exception = true
130
+ }
131
+ end
132
+
133
+ def close!
134
+ @mutex.synchronize {
135
+ self.debug_output("closing connection ...")
136
+ if @socket
137
+ @socket.close
138
+ @socket = nil
139
+ end
140
+ if @socket_thread
141
+ Thread.kill(@socket_thread)
142
+ @socket_thread = nil
143
+ end
144
+ @status = :closed
145
+ }
146
+ end
147
+
148
+ def closed?
149
+ @status == :closed
150
+ end
151
+
152
+ def debug_output(msg, type = nil)
153
+ prefix = case type
154
+ when :send then "-> "
155
+ when :receive then "<- "
156
+ else
157
+ ""
158
+ end
159
+ return unless @logger
160
+ _debug_entry(prefix + msg)
161
+ end
162
+
163
+ private
164
+
165
+ def _debug_entry(str)
166
+ @logger << str
167
+ @logger << "\n"
168
+ end
169
+
170
+ def _register_h2_callbacks
171
+ @h2_client.on(:frame) do |bytes|
172
+ if @socket.nil?
173
+ msg = "Connection is closed due to errors, "\
174
+ "you can find errors at async_client.connection.errors"
175
+ raise Http2ConnectionClosedError.new(msg)
176
+ else
177
+ @socket.print(bytes)
178
+ @socket.flush
179
+ end
180
+ end
181
+ @h2_client.on(:frame_sent) do |frame|
182
+ debug_output("frame: #{frame.inspect}", :send)
183
+ end
184
+ @h2_client.on(:frame_received) do |frame|
185
+ debug_output("frame: #{frame.inspect}", :receive)
186
+ end
187
+ end
188
+
189
+ def _tcp_socket(endpoint)
190
+ tcp = ::Socket.new(SOCKET_FAMILY, ::Socket::SOCK_STREAM, 0)
191
+ tcp.setsockopt(::Socket::IPPROTO_TCP, ::Socket::TCP_NODELAY, 1)
192
+
193
+ address = ::Socket.getaddrinfo(endpoint.host, nil, SOCKET_FAMILY).first[3]
194
+ sockaddr = ::Socket.sockaddr_in(endpoint.port, address)
195
+
196
+ [tcp, sockaddr]
197
+ end
198
+
199
+ def _nonblocking_connect(tcp, addr)
200
+ begin
201
+ tcp.connect_nonblock(addr)
202
+ rescue IO::WaitWritable
203
+ unless IO.select(nil, [tcp], nil, connection_timeout)
204
+ tcp.close
205
+ raise
206
+ end
207
+ begin
208
+ tcp.connect_nonblock(addr)
209
+ rescue Errno::EISCONN
210
+ # tcp socket connected, continue
211
+ end
212
+ end
213
+ end
214
+
215
+ def _tls_context
216
+ ssl_ctx = OpenSSL::SSL::SSLContext.new(:TLSv1_2)
217
+ if ssl_verify_peer?
218
+ ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_PEER
219
+ ssl_ctx.ca_file = ssl_ca_bundle ? ssl_ca_bundle : _default_ca_bundle
220
+ ssl_ctx.ca_path = ssl_ca_directory ? ssl_ca_directory : _default_ca_directory
221
+ ssl_ctx.cert_store = ssl_ca_store if ssl_ca_store
222
+ else
223
+ ssl_ctx.verify_mode = OpenSSL::SSL::VERIFY_NONE
224
+ end
225
+ if enable_alpn
226
+ debug_output("enabling ALPN for TLS ...")
227
+ ssl_ctx.alpn_protocols = ['h2']
228
+ end
229
+ ssl_ctx
230
+ end
231
+
232
+ def _default_ca_bundle
233
+ File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE) ?
234
+ OpenSSL::X509::DEFAULT_CERT_FILE : nil
235
+ end
236
+
237
+ def _default_ca_directory
238
+ Dir.exist?(OpenSSL::X509::DEFAULT_CERT_DIR) ?
239
+ OpenSSL::X509::DEFAULT_CERT_DIR : nil
240
+ end
241
+
242
+ end
243
+ end
244
+ end
245
+ end
246
+