aspera-cli 4.19.0 → 4.21.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 (91) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +46 -0
  4. data/CONTRIBUTING.md +18 -4
  5. data/README.md +886 -510
  6. data/bin/asession +27 -20
  7. data/examples/build_exec +65 -76
  8. data/examples/build_exec_rubyc +40 -0
  9. data/examples/get_proto_file.rb +7 -0
  10. data/lib/aspera/agent/alpha.rb +18 -24
  11. data/lib/aspera/agent/base.rb +2 -18
  12. data/lib/aspera/agent/connect.rb +34 -15
  13. data/lib/aspera/agent/direct.rb +44 -54
  14. data/lib/aspera/agent/httpgw.rb +2 -3
  15. data/lib/aspera/agent/node.rb +11 -21
  16. data/lib/aspera/agent/{trsdk.rb → transferd.rb} +27 -51
  17. data/lib/aspera/api/alee.rb +15 -0
  18. data/lib/aspera/api/aoc.rb +139 -105
  19. data/lib/aspera/api/ats.rb +1 -1
  20. data/lib/aspera/api/cos_node.rb +1 -1
  21. data/lib/aspera/api/httpgw.rb +15 -10
  22. data/lib/aspera/api/node.rb +70 -32
  23. data/lib/aspera/ascmd.rb +56 -48
  24. data/lib/aspera/ascp/installation.rb +166 -70
  25. data/lib/aspera/ascp/management.rb +30 -8
  26. data/lib/aspera/assert.rb +10 -5
  27. data/lib/aspera/cli/formatter.rb +166 -162
  28. data/lib/aspera/cli/hints.rb +2 -1
  29. data/lib/aspera/cli/info.rb +12 -10
  30. data/lib/aspera/cli/main.rb +28 -13
  31. data/lib/aspera/cli/manager.rb +7 -2
  32. data/lib/aspera/cli/plugin.rb +17 -31
  33. data/lib/aspera/cli/plugins/alee.rb +3 -3
  34. data/lib/aspera/cli/plugins/aoc.rb +246 -208
  35. data/lib/aspera/cli/plugins/ats.rb +16 -14
  36. data/lib/aspera/cli/plugins/config.rb +154 -94
  37. data/lib/aspera/cli/plugins/console.rb +3 -3
  38. data/lib/aspera/cli/plugins/cos.rb +1 -0
  39. data/lib/aspera/cli/plugins/faspex.rb +15 -23
  40. data/lib/aspera/cli/plugins/faspex5.rb +64 -50
  41. data/lib/aspera/cli/plugins/faspio.rb +2 -2
  42. data/lib/aspera/cli/plugins/httpgw.rb +1 -1
  43. data/lib/aspera/cli/plugins/node.rb +174 -109
  44. data/lib/aspera/cli/plugins/orchestrator.rb +14 -13
  45. data/lib/aspera/cli/plugins/preview.rb +8 -9
  46. data/lib/aspera/cli/plugins/server.rb +5 -9
  47. data/lib/aspera/cli/plugins/shares.rb +2 -2
  48. data/lib/aspera/cli/sync_actions.rb +2 -2
  49. data/lib/aspera/cli/transfer_agent.rb +12 -14
  50. data/lib/aspera/cli/transfer_progress.rb +37 -17
  51. data/lib/aspera/cli/version.rb +1 -1
  52. data/lib/aspera/command_line_builder.rb +4 -5
  53. data/lib/aspera/coverage.rb +13 -1
  54. data/lib/aspera/environment.rb +75 -25
  55. data/lib/aspera/faspex_gw.rb +2 -2
  56. data/lib/aspera/json_rpc.rb +1 -1
  57. data/lib/aspera/keychain/macos_security.rb +7 -12
  58. data/lib/aspera/log.rb +3 -4
  59. data/lib/aspera/node_simulator.rb +230 -112
  60. data/lib/aspera/oauth/base.rb +64 -83
  61. data/lib/aspera/oauth/factory.rb +52 -6
  62. data/lib/aspera/oauth/generic.rb +4 -8
  63. data/lib/aspera/oauth/jwt.rb +6 -3
  64. data/lib/aspera/oauth/url_json.rb +1 -2
  65. data/lib/aspera/oauth/web.rb +5 -2
  66. data/lib/aspera/persistency_action_once.rb +16 -8
  67. data/lib/aspera/persistency_folder.rb +20 -2
  68. data/lib/aspera/preview/generator.rb +1 -1
  69. data/lib/aspera/preview/utils.rb +11 -17
  70. data/lib/aspera/products/alpha.rb +30 -0
  71. data/lib/aspera/products/connect.rb +48 -0
  72. data/lib/aspera/products/other.rb +82 -0
  73. data/lib/aspera/products/transferd.rb +54 -0
  74. data/lib/aspera/rest.rb +116 -87
  75. data/lib/aspera/secret_hider.rb +2 -2
  76. data/lib/aspera/ssh.rb +31 -24
  77. data/lib/aspera/transfer/faux_file.rb +4 -4
  78. data/lib/aspera/transfer/parameters.rb +16 -17
  79. data/lib/aspera/transfer/spec.rb +12 -12
  80. data/lib/aspera/transfer/spec.yaml +22 -20
  81. data/lib/aspera/transfer/sync.rb +2 -10
  82. data/lib/aspera/transfer/uri.rb +3 -3
  83. data/lib/aspera/uri_reader.rb +1 -1
  84. data/lib/aspera/web_auth.rb +166 -17
  85. data/lib/aspera/web_server_simple.rb +4 -3
  86. data/lib/transferd_pb.rb +86 -0
  87. data/lib/transferd_services_pb.rb +84 -0
  88. data.tar.gz.sig +0 -0
  89. metadata +58 -22
  90. metadata.gz.sig +0 -0
  91. data/lib/aspera/ascp/products.rb +0 -156
@@ -1,13 +1,13 @@
1
- # desc : description
2
- # accepted_types : accepted types for non-enum
3
- # default : default value if not specified
4
- # enum : set with list of values for enum types accepted in transfer spec
5
- # agents : supported agents (for doc only), if not specified: all
6
- # required : optional, default: false
7
- # cli.type : ascp: type of parameter, one of CLI_OPTION_TYPES
8
- # cli.switch : ascp: switch for ascp command line
9
- # cli.convert : ascp: transform value: either a Hash with conversion values, or name of class
10
- # cli.variable : ascp: name of env var
1
+ # desc [String] description
2
+ # accepted_types [Symbol, Array(Symbol)] accepted types for non-enum
3
+ # default [String] default value if not specified
4
+ # enum [Array] set with list of values for enum types accepted in transfer spec
5
+ # agents [Array] supported agents (for doc only), if not specified: all
6
+ # required [bool] optional, default: false
7
+ # cli.type [Symbol] ascp: type of parameter, one of CLI_OPTION_TYPES (opt_without_arg opt_with_arg special ignore envvar)
8
+ # cli.switch [String] ascp: switch for ascp command line
9
+ # cli.convert [String] ascp: transform value: either a Hash with conversion values, or name of class
10
+ # cli.variable [String] ascp: name of env var
11
11
  # cspell:words dgram dnat dnats faspmgr asperanoded xattrs keepalive datagram
12
12
  ---
13
13
  cipher:
@@ -102,17 +102,13 @@ direction:
102
102
  receive: recv
103
103
  send: send
104
104
  exclude_newer_than:
105
- :desc: skip src files with mtime > arg
106
- :accepted_types: :int
107
- :agents:
108
- - :direct
105
+ :desc: Exclude files, but not directories, from the transfer if they are newer than the specified number of seconds added to the source computer's epoch. e.g. "-86400" for newer than a day back.
106
+ :accepted_types: :string
109
107
  :cli:
110
108
  :type: :opt_with_arg
111
109
  exclude_older_than:
112
- :desc: skip src files with mtime < arg
113
- :accepted_types: :int
114
- :agents:
115
- - :direct
110
+ :desc: Exclude files, but not directories, from the transfer if they are older than the specified number of seconds added to the source computer's epoch. e.g. "-86400" for older than a day back.
111
+ :accepted_types: :string
116
112
  :cli:
117
113
  :type: :opt_with_arg
118
114
  fasp_port:
@@ -213,7 +209,6 @@ password:
213
209
  Windows only, node api only.
214
210
 
215
211
 
216
- :required: false
217
212
  :accepted_types: :string
218
213
  :agents:
219
214
  - :node
@@ -419,7 +414,7 @@ symlink_policy:
419
414
  :type: :opt_with_arg
420
415
  :switch: "--symbolic-links"
421
416
  tags:
422
- :desc: Metadata for transfer as JSON
417
+ :desc: Metadata for transfer as JSON. Key `aspera` is reserved. Key `aspera.xfer_retry` specified a retry timeout for node api initiated transfers.
423
418
  :accepted_types: :hash
424
419
  :cli:
425
420
  :type: :opt_with_arg
@@ -714,3 +709,10 @@ write_threads:
714
709
  - :unknown
715
710
  :cli:
716
711
  :type: :ignore
712
+ xfer_max_retries:
713
+ :desc: maximum number of retries, for node API initiated transfers. Shall not exceed aspera.conf `transfer_manager_max_retries` (default 5).
714
+ :accepted_types: :int
715
+ :agents:
716
+ - :node
717
+ :cli:
718
+ :type: :ignore
@@ -210,11 +210,7 @@ module Aspera
210
210
  session_builder.process_params
211
211
  session_builder.add_env_args(env_args)
212
212
  end
213
- async_exec = Ascp::Installation.instance.path(:async)
214
- Process.wait(Environment.secure_spawn(env: env_args[:env], exec: async_exec, args: env_args[:args]))
215
- if $CHILD_STATUS.exitstatus != 0
216
- raise "Sync failed with exit: #{$CHILD_STATUS.exitstatus}"
217
- end
213
+ Environment.secure_execute(exec: Ascp::Installation.instance.path(:async), **env_args)
218
214
  else
219
215
  raise 'At least one of `local` or `sessions` must be present in async parameters'
220
216
  end
@@ -266,11 +262,7 @@ module Aspera
266
262
  else
267
263
  raise 'At least one of `local` or `sessions` must be present in async parameters'
268
264
  end
269
- Environment.secure_spawn(env: {}, exec: ASYNC_ADMIN_EXECUTABLE, args: arguments, log_only: true)
270
- stdout, stderr, status = Open3.capture3(*[ASYNC_ADMIN_EXECUTABLE].concat(arguments))
271
- Log.log.debug{"status=#{status}, stderr=#{stderr}"}
272
- Log.log.trace1{"stdout=#{stdout}"}
273
- raise "Sync failed: #{status.exitstatus} : #{stderr}" unless status.success?
265
+ stdout = Environment.secure_capture(exec: ASYNC_ADMIN_EXECUTABLE, args: arguments)
274
266
  return parse_status(stdout)
275
267
  end
276
268
  end
@@ -26,7 +26,7 @@ module Aspera
26
26
  # faspex 4 does not encode trailing base64 padding, fix that to be able to decode properly
27
27
  fixed_query = @fasp_uri.query.gsub(/(=+)$/){|trail_equals|'%3D' * trail_equals.length}
28
28
 
29
- Rest.decode_query(fixed_query).each do |name, value|
29
+ Rest.query_to_h(fixed_query).each do |name, value|
30
30
  case name
31
31
  when 'cookie' then result_ts['cookie'] = value
32
32
  when 'token' then result_ts['token'] = value
@@ -44,8 +44,8 @@ module Aspera
44
44
  when 'lockpolicy' then result_ts['lock_rate_policy'] = CommandLineBuilder.yes_to_true(value)
45
45
  when 'lockminrate' then result_ts['lock_min_rate'] = CommandLineBuilder.yes_to_true(value)
46
46
  when 'auth' then Log.log.debug{"ignoring #{name}=#{value}"} # Not used (yes/no)
47
- when 'v' then Log.log.debug{"ignoring #{name}=#{value}"} # rubocop:disable Lint/DuplicateBranch Not used (shall be 2)
48
- when 'protect' then Log.log.debug{"ignoring #{name}=#{value}"} # rubocop:disable Lint/DuplicateBranch TODO: what is this ?
47
+ when 'v' then Log.log.debug{"ignoring #{name}=#{value}"} # rubocop:disable Lint/DuplicateBranch -- Not used (shall be 2)
48
+ when 'protect' then Log.log.debug{"ignoring #{name}=#{value}"} # rubocop:disable Lint/DuplicateBranch -- TODO: what is this ?
49
49
  else Log.log.warn{"URI parameter ignored: #{name} = #{value}"}
50
50
  end
51
51
  end
@@ -12,7 +12,7 @@ module Aspera
12
12
  uri = URI.parse(uri_to_read)
13
13
  case uri.scheme
14
14
  when 'http', 'https'
15
- return Rest.new(base_url: uri_to_read, redirect_max: 5).call(operation: 'GET', subpath: '', headers: {'Accept' => 'text/plain'})[:data]
15
+ return Rest.new(base_url: uri_to_read, redirect_max: 5).call(operation: 'GET', headers: {'Accept' => '*/*'})[:data]
16
16
  when 'file', NilClass
17
17
  local_file_path = uri.path
18
18
  raise 'URL shall have a path, check syntax' if local_file_path.nil?
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'aspera/web_server_simple'
4
+ require 'aspera/assert'
4
5
 
5
6
  module Aspera
6
7
  # servlet called on callback: it records the callback request
@@ -15,41 +16,189 @@ module Aspera
15
16
 
16
17
  def service(request, response)
17
18
  Log.log.debug{"received request from browser #{request.request_method} #{request.path}"}
18
- raise WEBrick::HTTPStatus::MethodNotAllowed, "unexpected method: #{request.request_method}" unless request.request_method.eql?('GET')
19
- raise WEBrick::HTTPStatus::NotFound, "unexpected path: #{request.path}" unless request.path.eql?(@web_auth.expected_path)
20
- # acquire lock and signal change
21
- @web_auth.mutex.synchronize do
22
- @web_auth.query = request.query
23
- @web_auth.cond.signal
24
- end
19
+ Aspera.assert_values(request.request_method, ['GET'], exception_class: WEBrick::HTTPStatus::MethodNotAllowed){'HTTP verb'}
20
+ additionnal_info = @web_auth.signal_request(request)
25
21
  response.status = 200
26
22
  response.content_type = 'text/html'
27
- response.body = '<html><head><title>Ok</title></head><body><h1>Thank you !</h1><p>You can close this window.</p></body></html>'
23
+ response.body = <<~HTML
24
+ <!DOCTYPE html>
25
+ <html lang="en">
26
+ <head>
27
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
28
+ <link rel="icon" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgdmlld0JveD0iMCAwIDMyIDMyIiBmaWxsPSJub25lIiBzdHJva2U9IiMyMjIiIHN0cm9rZS13aWR0aD0iMyI+CiAgPGxpbmUgeDE9IjMiIHkxPSIzIiB4Mj0iMjkiIHkyPSIyOSIgIHN0cm9rZT0icmVkIi8+CiAgPGxpbmUgeDE9IjI5IiB5MT0iMyIgeDI9IjMiIHkyPSIyOSIgc3Ryb2tlPSJyZWQiIC8+Cjwvc3ZnPg==" type="image/svg+xml">
29
+ <title>Close Now</title>
30
+ <style>
31
+ body {
32
+ font-family: Arial, sans-serif;
33
+ text-align: center;
34
+ padding: 2rem;
35
+ margin: 0;
36
+ background: linear-gradient(135deg, #f0f4f8, #d9e2ec);
37
+ color: #333;
38
+ overflow: hidden; /* Ensure no scrollbars for the background animation */
39
+ position: relative;
40
+ }
41
+ h1 {
42
+ font-size: 2.5rem;
43
+ color: #0078d4;
44
+ }
45
+ p {
46
+ font-size: 1.2rem;
47
+ margin-top: 1rem;
48
+ }
49
+
50
+ /* Styling for animated IBM logos */
51
+ .logo {
52
+ position: absolute;
53
+ bottom: -100px;
54
+ width: 40px;
55
+ height: 40px;
56
+ background: none;
57
+ display: flex;
58
+ justify-content: center;
59
+ align-items: center;
60
+ animation: rise 10s infinite ease-in-out;
61
+ }
62
+
63
+ .logo svg {
64
+ width: 100%;
65
+ height: 100%;
66
+ }
67
+
68
+ .logo:nth-child(odd) {
69
+ animation-duration: 8s;
70
+ }
71
+
72
+ .logo:nth-child(even) {
73
+ animation-duration: 12s;
74
+ }
75
+
76
+ @keyframes rise {
77
+ 0% {
78
+ transform: translateY(0) scale(1);
79
+ opacity: 1;
80
+ }
81
+ 50% {
82
+ opacity: 0.7;
83
+ }
84
+ 100% {
85
+ transform: translateY(-120vh) scale(0.7);
86
+ opacity: 0;
87
+ }
88
+ }
89
+ </style>
90
+ </head>
91
+ <body>
92
+ <h1>Thank You!</h1>
93
+ <p>You can close this window.</p>
94
+ <p>#{additionnal_info}</p>
95
+
96
+ <!-- JavaScript to generate IBM logos -->
97
+ <script>
98
+ // Function to create logos dynamically
99
+ function createLogos() {
100
+ const body = document.body;
101
+ const svgContent = `
102
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1000px" height="401.149px" viewBox="0 0 1000 401.149" xml:space="preserve">
103
+ <g>
104
+ <rect fill="#1F70C1" x="0" y="373.217" width="194.433" height="27.833"/>
105
+ <rect fill="#1F70C1" x="0" y="319.83" width="194.433" height="27.931"/>
106
+ <rect fill="#1F70C1" x="55.468" y="266.541" width="83.399" height="27.932"/>
107
+ <rect fill="#1F70C1" x="55.468" y="213.253" width="83.399" height="27.932"/>
108
+ <rect fill="#1F70C1" x="55.468" y="159.964" width="83.399" height="27.932"/>
109
+ <rect fill="#1F70C1" x="55.468" y="106.577" width="83.399" height="27.932"/>
110
+ <rect fill="#1F70C1" x="0" y="53.288" width="194.433" height="27.932"/>
111
+ <rect fill="#1F70C1" x="0" y="0" width="194.433" height="27.932"/>
112
+ <path fill="#1F70C1" d="M222.167,347.761h299.029c5.051-8.617,8.815-18.027,11.094-27.932H222.167V347.761z"/>
113
+ <path fill="#1F70C1" d="M497.92,213.253H277.734v27.932h243.463C514.857,230.487,507.032,221.078,497.92,213.253z"/>
114
+ <path fill="#1F70C1" d="M277.734,159.964v27.932H497.92c9.311-7.825,17.135-17.235,23.277-27.932H277.734z"/>
115
+ <path fill="#1F70C1" d="M521.197,53.288H222.167V81.22H532.29C529.715,71.315,525.951,61.906,521.197,53.288z"/>
116
+ <path fill="#1F70C1" d="M429.279,0H222.167v27.932h278.526C482.072,10.697,456.815,0,429.279,0z"/>
117
+ <rect fill="#1F70C1" x="277.734" y="106.577" width="83.3" height="27.932"/>
118
+ <path fill="#1F70C1" d="M444.433,134.509h87.163c2.476-8.914,3.764-18.324,3.764-27.932h-90.927z"/>
119
+ <rect fill="#1F70C1" x="277.734" y="266.541" width="83.3" height="27.932"/>
120
+ <path fill="#1F70C1" d="M444.433,266.541v27.932h90.927c0-9.608-1.288-19.017-3.764-27.932H444.433z"/>
121
+ <path fill="#1F70C1" d="M222.167,400.852h207.112c27.734,0,52.793-10.697,71.513-27.932H222.167V400.852z"/>
122
+ <rect fill="#1F70C1" x="555.567" y="373.217" width="138.866" height="27.833"/>
123
+ <rect fill="#1F70C1" x="555.567" y="319.83" width="138.866" height="27.931"/>
124
+ <rect fill="#1F70C1" x="611.034" y="266.541" width="83.399" height="27.932"/>
125
+ <rect fill="#1F70C1" x="611.034" y="213.253" width="83.399" height="27.932"/>
126
+ <polygon fill="#1F70C1" points="733.063,53.288 555.567,53.288 555.567,81.22 742.67,81.22"/>
127
+ <polygon fill="#1F70C1" points="714.639,0 555.567,0 555.567,27.932 724.247,27.932"/>
128
+ <rect fill="#1F70C1" x="861.034" y="373.217" width="138.866" height="27.833"/>
129
+ <rect fill="#1F70C1" x="861.034" y="319.83" width="138.866" height="27.931"/>
130
+ <rect fill="#1F70C1" x="861.034" y="266.541" width="83.399" height="27.932"/>
131
+ <rect fill="#1F70C1" x="861.034" y="213.253" width="83.399" height="27.932"/>
132
+ <polygon fill="#1F70C1" points="861.034,187.896 944.433,187.896 944.433,159.964 861.034,159.964 694.433,159.964 611.034,159.964 611.034,187.896 694.433,187.896 852.219,187.896"/>
133
+ <polygon fill="#1F70C1" points="944.433,106.577 803.982,106.577 794.374,134.509 944.433,134.509"/>
134
+ <polygon fill="#1F70C1" points="840.927,0 831.319,27.932 1000,27.932 1000,0"/>
135
+ <polygon fill="#1F70C1" points="777.734,400.852 787.341,373.217 768.126,373.217"/>
136
+ <polygon fill="#1F70C1" points="759.311,347.761 796.157,347.761 806.062,319.83 749.505,319.83"/>
137
+ <polygon fill="#1F70C1" points="740.59,294.473 814.877,294.473 824.683,266.541 730.784,266.541"/>
138
+ <polygon fill="#1F70C1" points="721.969,241.185 833.597,241.185 843.106,213.253 712.361,213.253"/>
139
+ <polygon fill="#1F70C1" points="611.034,134.509 761.093,134.509 751.486,106.577 611.034,106.577"/>
140
+ <polygon fill="#1F70C1" points="812.896,81.22 1000,81.22 1000,53.288 822.405,53.288"/>
141
+ </g>
142
+ </svg>
143
+ `;
144
+ for (let i = 0; i < 20; i++) {
145
+ const logo = document.createElement('div');
146
+ logo.className = 'logo';
147
+ const size = Math.random() * 30 + 20; // Random size between 20px and 50px
148
+ logo.style.width = `${size}px`;
149
+ logo.style.height = `${size}px`;
150
+ logo.style.left = `${Math.random() * 100}vw`;
151
+ logo.style.animationDelay = `${Math.random() * 5}s`;
152
+ logo.innerHTML = svgContent;
153
+ body.appendChild(logo);
154
+ }
155
+ }
156
+
157
+ // Call the function to create logos on load
158
+ createLogos();
159
+ </script>
160
+ </body>
161
+ </html>
162
+ HTML
163
+
28
164
  return nil
29
165
  end
30
166
  end
31
167
 
32
- # start a local web server, then start a browser that will callback the local server upon authentication
168
+ # start a local web server
169
+ # then start a browser that will callback the local server upon authentication
170
+ # store the final query
33
171
  class WebAuth < WebServerSimple
34
- attr_reader :expected_path, :mutex, :cond
35
- attr_writer :query
36
-
37
- # @param endpoint_url [String] e.g. 'https://127.0.0.1:12345'
38
- def initialize(endpoint_url)
172
+ # @param endpoint_url [String] e.g. 'https://127.0.0.1:12345'
173
+ # @param additionnal_info [String] Information in web page
174
+ def initialize(endpoint_url, additionnal_info = nil)
39
175
  uri = URI.parse(endpoint_url)
40
176
  super(uri)
41
- # parameters for servlet
42
177
  @mutex = Mutex.new
43
178
  @cond = ConditionVariable.new
44
179
  @expected_path = uri.path.empty? ? '/' : uri.path
45
180
  @query = nil
181
+ @additionnal_info = additionnal_info
46
182
  # last argument (self) is provided to constructor of servlet
47
183
  mount(@expected_path, WebAuthServlet, self)
184
+ # server runs in thread
48
185
  Thread.new { start }
49
186
  end
50
187
 
51
- # wait for request on web server
52
- # @return Hash the query
188
+ # Called by web server thread on received request
189
+ # @return [String] additional information for web page
190
+ def signal_request(request)
191
+ raise WEBrick::HTTPStatus::NotFound, "unexpected path: #{request.path}" unless request.path.eql?(@expected_path)
192
+ # acquire lock and signal change
193
+ @mutex.synchronize do
194
+ @query = request.query
195
+ @cond.signal
196
+ end
197
+ return @additionnal_info
198
+ end
199
+
200
+ # wait for request on web server (main thread)
201
+ # @return [Hash] the query
53
202
  def received_request
54
203
  # wait for signal from thread
55
204
  @mutex.synchronize{@cond.wait(@mutex)}
@@ -17,7 +17,7 @@ module Aspera
17
17
  private_constant :CERT_PARAMETERS, :GENERIC_ISSUER, :ONE_YEAR_SECONDS
18
18
 
19
19
  class << self
20
- # generates and adds self signed cert to provided webrick options
20
+ # Fill and self sign provided certificate
21
21
  def fill_self_signed_cert(cert, key, digest = 'SHA256')
22
22
  cert.subject = cert.issuer = OpenSSL::X509::Name.parse(GENERIC_ISSUER)
23
23
  cert.not_before = cert.not_after = Time.now
@@ -61,7 +61,7 @@ module Aspera
61
61
  raise "unexpected key in certificate config: only: #{CERT_PARAMETERS.join(', ')}" if certificate.keys.any?{|key|!CERT_PARAMETERS.include?(key)}
62
62
  if certificate.key?(:pkcs12)
63
63
  Log.log.debug('Using PKCS12 certificate')
64
- raise 'pkcs12 requires a password' unless certificate.key?(:key)
64
+ raise 'pkcs12 requires a key (password)' unless certificate.key?(:key)
65
65
  pkcs12 = OpenSSL::PKCS12.new(File.read(certificate[:pkcs12]), certificate[:key])
66
66
  webrick_options[:SSLCertificate] = pkcs12.certificate
67
67
  webrick_options[:SSLPrivateKey] = pkcs12.key
@@ -86,7 +86,8 @@ module Aspera
86
86
  end
87
87
  end
88
88
  # call constructor of parent class, but capture STDERR
89
- # self signed certificate generates characters on STDERR, see create_self_signed_cert in webrick/ssl.rb
89
+ # self signed certificate generates characters on STDERR
90
+ # see create_self_signed_cert in webrick/ssl.rb
90
91
  Log.capture_stderr { super(webrick_options) }
91
92
  end
92
93
 
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: transferd.proto
4
+
5
+ require 'google/protobuf'
6
+
7
+
8
+ descriptor_data = "\n\x0ftransferd.proto\x12\rtransferd.api\"*\n\x05\x45rror\x12\x0c\n\x04\x63ode\x18\x01 \x01(\x05\x12\x13\n\x0b\x64\x65scription\x18\x02 \x01(\t\"\x13\n\x11\x41PIVersionRequest\"/\n\x12\x41PIVersionResponse\x12\x19\n\x11supportedVersions\x18\x01 \x03(\t\"\x93\x01\n\rRetryStrategy\x12\x32\n\x05\x62\x61sic\x18\x01 \x01(\x0b\x32!.transferd.api.BasicRetryStrategyH\x00\x12\x41\n\x07\x62\x61\x63koff\x18\x02 \x01(\x0b\x32..transferd.api.ExponentialBackoffRetryStrategyH\x00\x42\x0b\n\tretryType\"=\n\x12\x42\x61sicRetryStrategy\x12\x10\n\x08maxCount\x18\x01 \x01(\x03\x12\x15\n\rretryInterval\x18\x02 \x01(\x03\"r\n\x1f\x45xponentialBackoffRetryStrategy\x12\x13\n\x0bmaxAttempts\x18\x01 \x01(\x03\x12\x12\n\nmultiplier\x18\x02 \x01(\x03\x12\x14\n\x0cinitialDelay\x18\x03 \x01(\x03\x12\x10\n\x08maxDelay\x18\x04 \x01(\x03\"\x99\x01\n\x0eTransferConfig\x12+\n\x05retry\x18\x01 \x01(\x0b\x32\x1c.transferd.api.RetryStrategy\x12\x0f\n\x07license\x18\x02 \x01(\t\x12\x10\n\x08localLog\x18\x03 \x01(\t\x12\x11\n\tremoteLog\x18\x04 \x01(\t\x12\x10\n\x08logLevel\x18\x05 \x01(\x0f\x12\x12\n\nasperaConf\x18\x06 \x01(\t\"/\n\rTransferRange\x12\x0e\n\x06offset\x18\x01 \x01(\x03\x12\x0e\n\x06length\x18\x02 \x01(\x03\"\x89\x01\n\x0fTransferRequest\x12\x31\n\x0ctransferType\x18\x01 \x01(\x0e\x32\x1b.transferd.api.TransferType\x12-\n\x06\x63onfig\x18\x02 \x01(\x0b\x32\x1d.transferd.api.TransferConfig\x12\x14\n\x0ctransferSpec\x18\x03 \x01(\t\"\xd5\x01\n\x15StartTransferResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x31\n\x0ctransferType\x18\x04 \x01(\x0e\x32\x1b.transferd.api.TransferType\x12-\n\x06status\x18\x05 \x01(\x0e\x32\x1d.transferd.api.TransferStatus\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x14.transferd.api.Error\")\n\x13TransferInfoRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\"\xc3\x03\n\x10TransferResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x31\n\x0ctransferType\x18\x04 \x01(\x0e\x32\x1b.transferd.api.TransferType\x12-\n\x06status\x18\x05 \x01(\x0e\x32\x1d.transferd.api.TransferStatus\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x14.transferd.api.Error\x12\x33\n\rtransferEvent\x18\x07 \x01(\x0e\x32\x1c.transferd.api.TransferEvent\x12\x31\n\x0ctransferInfo\x18\x08 \x01(\x0b\x32\x1b.transferd.api.TransferInfo\x12\x0f\n\x07message\x18\t \x01(\t\x12>\n\x0bsessionInfo\x18\n \x01(\x0b\x32).transferd.api.SessionTransferInformation\x12\x38\n\x08\x66ileInfo\x18\x0b \x01(\x0b\x32&.transferd.api.FileTransferInformation\"\x99\x02\n\x15QueryTransferResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12\r\n\x05title\x18\x03 \x01(\t\x12\x31\n\x0ctransferType\x18\x04 \x01(\x0e\x32\x1b.transferd.api.TransferType\x12-\n\x06status\x18\x05 \x01(\x0e\x32\x1d.transferd.api.TransferStatus\x12#\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x14.transferd.api.Error\x12\x31\n\x0ctransferInfo\x18\x07 \x01(\x0b\x32\x1b.transferd.api.TransferInfo\x12\x0f\n\x07message\x18\x08 \x01(\t\"\x8f\x04\n\x0cTransferInfo\x12\x17\n\x0f\x61verageRateKbps\x18\x01 \x01(\x03\x12\x11\n\tbytesLost\x18\x02 \x01(\x03\x12\x18\n\x10\x62ytesTransferred\x18\x03 \x01(\x03\x12\x14\n\x0c\x62ytesWritten\x18\x04 \x01(\x03\x12\x1c\n\x14\x64irectoriesCompleted\x18\x05 \x01(\x03\x12\x15\n\rstartTimeUsec\x18\x06 \x01(\x03\x12\x13\n\x0b\x65lapsedUsec\x18\x07 \x01(\x03\x12\x13\n\x0b\x65ndTimeUsec\x18\x08 \x01(\x03\x12\x11\n\terrorCode\x18\t \x01(\t\x12\x18\n\x10\x65rrorDescription\x18\n \x01(\t\x12\x16\n\x0e\x66ilesCompleted\x18\x0b \x01(\x03\x12\x16\n\x0etargetRateKbps\x18\x0c \x01(\x03\x12\x13\n\x0bminRateKbps\x18\r \x01(\x03\x12\x1d\n\x15\x61rgTransfersAttempted\x18\x0e \x01(\x03\x12\x1a\n\x12\x61rgTransfersPassed\x18\x0f \x01(\x03\x12\x1b\n\x13\x61rgTransfersSkipped\x18\x10 \x01(\x03\x12\x1a\n\x12\x61rgTransfersFailed\x18\x11 \x01(\x03\x12\x18\n\x10\x66ileChecksumType\x18\x12 \x01(\t\x12\x0e\n\x06\x63ookie\x18\x13 \x01(\t\x12\x11\n\tdirection\x18\x14 \x01(\t\x12\x11\n\toperation\x18\x15 \x01(\t\x12\x0e\n\x06tags64\x18\x16 \x01(\t\"\xfe\x11\n\x1aSessionTransferInformation\x12\n\n\x02id\x18\x01 \x01(\t\x12\x11\n\tsessionId\x18\x02 \x01(\t\x12\x0c\n\x04user\x18\x03 \x01(\t\x12\x12\n\nclientUser\x18\x04 \x01(\t\x12\x14\n\x0c\x63lientNodeId\x18\x05 \x01(\t\x12\x17\n\x0f\x63lientClusterId\x18\x06 \x01(\t\x12\x14\n\x0cserverNodeId\x18\x07 \x01(\t\x12\x17\n\x0fserverClusterId\x18\x08 \x01(\t\x12\x17\n\x0f\x63lientIPAddress\x18\t \x01(\t\x12\x17\n\x0fserverIPAddress\x18\n \x01(\t\x12\x0c\n\x04port\x18\x0b \x01(\x03\x12\x0f\n\x07tcpPort\x18\x0c \x01(\x03\x12\x0e\n\x06status\x18\r \x01(\t\x12\x15\n\rstartTimeUsec\x18\x0e \x01(\x03\x12\x13\n\x0b\x65ndTimeUsec\x18\x0f \x01(\x03\x12\x13\n\x0b\x65lapsedUsec\x18\x10 \x01(\x03\x12\x18\n\x10\x62ytesTransferred\x18\x11 \x01(\x03\x12\x14\n\x0c\x62ytesWritten\x18\x12 \x01(\x03\x12\x11\n\tbytesLost\x18\x13 \x01(\x03\x12\x16\n\x0e\x66ilesCompleted\x18\x14 \x01(\x03\x12\x13\n\x0b\x66ilesFailed\x18\x15 \x01(\x03\x12\x14\n\x0c\x66ilesSkipped\x18\x16 \x01(\x03\x12\x1c\n\x14\x64irectoriesCompleted\x18\x17 \x01(\x03\x12\x16\n\x0etargetRateKbps\x18\x18 \x01(\x03\x12\x13\n\x0bminRateKbps\x18\x19 \x01(\x03\x12\x14\n\x0c\x63\x61lcRateKbps\x18\x1a \x01(\x03\x12\x18\n\x10networkDelayUsec\x18\x1b \x01(\x03\x12\x11\n\terrorCode\x18\x1c \x01(\x03\x12\x11\n\terrorDesc\x18\x1d \x01(\t\x12\x18\n\x10manifestFilePath\x18\x1e \x01(\t\x12\x1f\n\x17sourcePathsScanExcluded\x18\x1f \x01(\x03\x12 \n\x18sourcePathsScanIrregular\x18 \x01(\x03\x12\x1d\n\x15sourcePathsScanFailed\x18! \x01(\x03\x12 \n\x18sourcePathsScanAttempted\x18\" \x01(\x03\x12\x18\n\x10transfersSkipped\x18# \x01(\x03\x12\x17\n\x0ftransfersPassed\x18$ \x01(\x03\x12\x17\n\x0ftransfersFailed\x18% \x01(\x03\x12\x1a\n\x12transfersAttempted\x18& \x01(\x03\x12\x0e\n\x06\x63ookie\x18\' \x01(\t\x12\x11\n\tdirection\x18( \x01(\t\x12\x18\n\x10\x66ileChecksumType\x18) \x01(\t\x12\x11\n\toperation\x18* \x01(\t\x12\x0c\n\x04tags\x18+ \x01(\t\x12\x1d\n\x15\x61rgTransfersAttempted\x18, \x01(\x03\x12\x1a\n\x12\x61rgTransfersPassed\x18- \x01(\x03\x12\x1b\n\x13\x61rgTransfersSkipped\x18. \x01(\x03\x12\x1a\n\x12\x61rgTransfersFailed\x18/ \x01(\x03\x12\x12\n\nencryption\x18\x30 \x01(\t\x12\x10\n\x08\x61\x64\x61ptive\x18\x31 \x01(\t\x12\x0e\n\x06remote\x18\x32 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x33 \x01(\t\x12\x10\n\x08priority\x18\x34 \x01(\x03\x12\x12\n\ntransferId\x18\x35 \x01(\t\x12\x0f\n\x07rateCap\x18\x36 \x01(\x03\x12\x12\n\nminRateCap\x18\x37 \x01(\x03\x12\x11\n\tpolicyCap\x18\x38 \x01(\t\x12\x10\n\x08rateLock\x18\x39 \x01(\t\x12\x13\n\x0bminRateLock\x18: \x01(\t\x12\x12\n\npolicyLock\x18; \x01(\t\x12\x16\n\x0eserverHostname\x18< \x01(\t\x12\x15\n\rremoteAddress\x18= \x01(\t\x12\x0e\n\x06\x63ipher\x18> \x01(\t\x12\x14\n\x0cresumePolicy\x18? \x01(\t\x12\x14\n\x0c\x63reatePolicy\x18@ \x01(\x03\x12\x16\n\x0emanifestPolicy\x18\x41 \x01(\t\x12\x0f\n\x07precalc\x18\x42 \x01(\t\x12\x17\n\x0foverwritePolicy\x18\x43 \x01(\t\x12\x16\n\x0erttAutocorrect\x18\x44 \x01(\t\x12\x12\n\ntimePolicy\x18\x45 \x01(\x03\x12\x1a\n\x12manifestInprogress\x18\x46 \x01(\t\x12\x14\n\x0c\x66ilesEncrypt\x18G \x01(\t\x12\x14\n\x0c\x66ilesDecrypt\x18H \x01(\t\x12\x14\n\x0c\x64\x61tagramSize\x18I \x01(\x03\x12\x14\n\x0cvLinkVersion\x18J \x01(\x03\x12\x18\n\x10peerVLinkVersion\x18K \x01(\x03\x12\x19\n\x11vLinkLocalEnabled\x18L \x01(\t\x12\x1a\n\x12vLinkRemoteEnabled\x18M \x01(\t\x12\x15\n\rreadBlockSize\x18N \x01(\x03\x12\x16\n\x0ewriteBlockSize\x18O \x01(\x03\x12\x17\n\x0f\x63lusterNumNodes\x18P \x01(\x03\x12\x15\n\rclusterNodeId\x18Q \x01(\x03\x12\x11\n\tmoveRange\x18R \x01(\t\x12\x11\n\tkeepalive\x18S \x01(\t\x12\x11\n\ttestLogin\x18T \x01(\t\x12\x10\n\x08useProxy\x18U \x01(\t\x12\x1c\n\x14rateControlAlgorithm\x18V \x01(\t\x12\x0c\n\x04pmtu\x18W \x01(\x03\x12\x18\n\x10preTransferFiles\x18X \x01(\x03\x12\x18\n\x10preTransferBytes\x18Y \x01(\x03\x12\x17\n\x0fpreTransferDirs\x18Z \x01(\x03\x12\x1a\n\x12preTransferSpecial\x18[ \x01(\x03\x12 \n\x18sourcePathsScanCompleted\x18\\ \x01(\x03\x12\x19\n\x11\x61rgScansAttempted\x18] \x01(\x03\x12\x19\n\x11\x61rgScansCompleted\x18^ \x01(\x03\x12\x1b\n\x13\x61rgFaspFileArgIndex\x18_ \x01(\x03\x12\x1b\n\x13\x64irCreatesAttempted\x18` \x01(\x03\x12\x18\n\x10\x64irCreatesFailed\x18\x61 \x01(\x03\x12\x18\n\x10\x64irCreatesPassed\x18\x62 \x01(\x03\x12\x19\n\x11\x64irScansCompleted\x18\x63 \x01(\x03\"\xdb\x02\n\x17\x46ileTransferInformation\x12\x0e\n\x06\x66ileId\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x15\n\rstartTimeUsec\x18\x03 \x01(\x03\x12\x13\n\x0b\x65lapsedUsec\x18\x04 \x01(\x03\x12\x0e\n\x06status\x18\x05 \x01(\t\x12\x11\n\terrorCode\x18\x06 \x01(\x03\x12\x18\n\x10\x65rrorDescription\x18\x07 \x01(\t\x12\x0c\n\x04size\x18\t \x01(\x03\x12\x10\n\x08\x66ileType\x18\n \x01(\t\x12\x18\n\x10\x66ileChecksumType\x18\x0b \x01(\t\x12\x10\n\x08\x63hecksum\x18\x0c \x01(\t\x12\x11\n\tstartByte\x18\r \x01(\x03\x12\x14\n\x0c\x62ytesWritten\x18\x0e \x01(\x03\x12\x17\n\x0f\x62ytesContiguous\x18\x0f \x01(\x03\x12\x11\n\tsessionId\x18\x10 \x01(\t\x12\x18\n\x10\x66\x61spFileArgIndex\x18\x11 \x01(\x03\"G\n\x1bTransferModificationRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12\x14\n\x0ctransferSpec\x18\x02 \x01(\t\"\x9a\x01\n\x1cTransferModificationResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12-\n\x06status\x18\x03 \x01(\x0e\x32\x1d.transferd.api.TransferStatus\x12#\n\x05\x65rror\x18\x04 \x01(\x0b\x32\x14.transferd.api.Error\"\\\n\x13TransferPathRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12\x31\n\x0ctransferPath\x18\x02 \x03(\x0b\x32\x1b.transferd.api.TransferPath\"`\n\x0cTransferPath\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\t\x12+\n\x05range\x18\x03 \x01(\x0b\x32\x1c.transferd.api.TransferRange\"c\n\x14TransferPathResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"3\n\x1dLockPersistentTransferRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\"m\n\x1eLockPersistentTransferResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"]\n\x13RegistrationRequest\x12\x12\n\ntransferId\x18\x01 \x03(\t\x12\x32\n\x07\x66ilters\x18\x02 \x03(\x0b\x32!.transferd.api.RegistrationFilter\"\xc8\x02\n\x12RegistrationFilter\x12;\n\x08operator\x18\x01 \x01(\x0e\x32).transferd.api.RegistrationFilterOperator\x12/\n\teventType\x18\x02 \x03(\x0e\x32\x1c.transferd.api.TransferEvent\x12\x12\n\ntransferId\x18\x03 \x03(\t\x12\x0e\n\x06\x63ookie\x18\x04 \x03(\t\x12\x0e\n\x06tags64\x18\x05 \x03(\t\x12\x11\n\tdirection\x18\x06 \x01(\t\x12\x13\n\x0b\x63ookieRegex\x18\x07 \x01(\t\x12\x31\n\x0ctransferType\x18\x08 \x03(\x0e\x32\x1b.transferd.api.TransferType\x12\x35\n\x0etransferStatus\x18\t \x03(\x0e\x32\x1d.transferd.api.TransferStatus\"8\n\x13StopTransferRequest\x12\x12\n\ntransferId\x18\x01 \x03(\t\x12\r\n\x05\x64\x65lay\x18\x02 \x01(\x03\"W\n\x14StopTransferResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12+\n\nstopResult\x18\x02 \x03(\x0b\x32\x17.transferd.api.StopInfo\"T\n\x08StopInfo\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12\x0f\n\x07stopped\x18\x02 \x01(\x08\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"\x15\n\x13InstanceInfoRequest\"z\n\x14InstanceInfoResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12)\n\x04info\x18\x02 \x01(\x0b\x32\x1b.transferd.api.InstanceInfo\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"\x9f\x01\n\x0cInstanceInfo\x12\x16\n\x0emanagementPort\x18\x01 \x01(\x03\x12-\n\nasperaInfo\x18\x02 \x03(\x0b\x32\x19.transferd.api.AsperaInfo\x12/\n\x0blicenseInfo\x18\x03 \x01(\x0b\x32\x1a.transferd.api.LicenseInfo\x12\x17\n\x0fpromiscuousMode\x18\x04 \x01(\x08\"]\n\x0bLicenseInfo\x12\x0f\n\x07maxRate\x18\x01 \x01(\t\x12\x15\n\raccountNumber\x18\x02 \x01(\t\x12\x15\n\rlicenseNumber\x18\x03 \x01(\t\x12\x0f\n\x07license\x18\x04 \x01(\t\"w\n\nAsperaInfo\x12\x14\n\x0c\x61speraBinary\x18\x01 \x01(\t\x12\x15\n\rasperaVersion\x18\x02 \x01(\t\x12\x17\n\x0foperatingSystem\x18\x03 \x01(\t\x12#\n\x05\x65rror\x18\x04 \x01(\x0b\x32\x14.transferd.api.Error\"(\n\x10PeerCheckRequest\x12\x14\n\x0ctransferSpec\x18\x01 \x01(\t\"_\n\x11PeerCheckResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x11\n\treachable\x18\x02 \x01(\x08\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"\x8d\x01\n\x17WriteStreamChunkRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12+\n\x05range\x18\x03 \x01(\x0b\x32\x1c.transferd.api.TransferRange\x12#\n\x05\x63hunk\x18\x04 \x01(\x0b\x32\x14.transferd.api.Chunk\"g\n\x18WriteStreamChunkResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"i\n\x12WriteStreamRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x0c\n\x04size\x18\x03 \x01(\x03\x12#\n\x05\x63hunk\x18\x04 \x01(\x0b\x32\x14.transferd.api.Chunk\"b\n\x13WriteStreamResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x12\n\ntransferId\x18\x02 \x01(\t\x12#\n\x05\x65rror\x18\x03 \x01(\x0b\x32\x14.transferd.api.Error\"\'\n\x11ReadStreamRequest\x12\x12\n\ntransferId\x18\x01 \x01(\t\"\x92\x01\n\x12ReadStreamResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\x0c\n\x04path\x18\x02 \x01(\t\x12\x10\n\x08pathSize\x18\x03 \x01(\x03\x12#\n\x05\x63hunk\x18\x04 \x01(\x0b\x32\x14.transferd.api.Chunk\x12#\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x14.transferd.api.Error\"\x19\n\x05\x43hunk\x12\x10\n\x08\x63ontents\x18\x01 \x01(\x0c\"\\\n\x11ValidationRequest\x12\x14\n\x0ctransferSpec\x18\x01 \x01(\t\x12\x31\n\x0ctransferType\x18\x02 \x01(\x0e\x32\x1b.transferd.api.TransferType\"\x8c\x01\n\x12ValidationResponse\x12\x12\n\napiVersion\x18\x01 \x01(\t\x12\r\n\x05valid\x18\x02 \x01(\x08\x12\x18\n\x10validatorVersion\x18\x03 \x01(\t\x12\x14\n\x0cunknownField\x18\x04 \x03(\t\x12#\n\x05\x65rror\x18\x05 \x01(\x0b\x32\x14.transferd.api.Error\"\xe9\x0e\n\x0eTransferSpecV1\x12\x0e\n\x06\x63ipher\x18\x01 \x01(\t\x12\x1a\n\x12\x63ontent_protection\x18\x02 \x01(\t\x12#\n\x1b\x63ontent_protection_password\x18\x03 \x01(\t\x12\x0e\n\x06\x63ookie\x18\x04 \x01(\t\x12\x12\n\ncreate_dir\x18\x05 \x01(\x08\x12\x1e\n\x16\x64\x65lete_before_transfer\x18\x06 \x01(\x08\x12\x15\n\rdelete_source\x18\x07 \x01(\x08\x12\x1b\n\x13\x64\x65stination_root_id\x18\x08 \x01(\t\x12\x11\n\tdirection\x18\t \x01(\t\x12\x1a\n\x12\x65xclude_newer_than\x18\n \x01(\t\x12\x1a\n\x12\x65xclude_older_than\x18\x0b \x01(\t\x12\x11\n\tfasp_port\x18\x0c \x01(\x03\x12\x15\n\rhttp_fallback\x18\r \x01(\x08\x12\x1a\n\x12http_fallback_port\x18\x0e \x01(\x03\x12\x1b\n\x13https_fallback_port\x18\x0f \x01(\x03\x12\x1b\n\x13move_after_transfer\x18\x10 \x01(\t\x12\x15\n\rmulti_session\x18\x11 \x01(\x03\x12\x1f\n\x17multi_session_threshold\x18\x12 \x01(\x03\x12\x11\n\toverwrite\x18\x13 \x01(\t\x12\"\n\x05paths\x18\x14 \x03(\x0b\x32\x13.transferd.api.Path\x12\x1d\n\x15precalculate_job_size\x18\x15 \x01(\x08\x12\x1c\n\x14preserve_access_time\x18\x16 \x01(\x08\x12\x1e\n\x16preserve_creation_time\x18\x17 \x01(\x08\x12\"\n\x1apreserve_modification_time\x18\x18 \x01(\x08\x12\x16\n\x0epreserve_times\x18\x19 \x01(\x08\x12\x13\n\x0brate_policy\x18\x1a \x01(\t\x12\x19\n\x11remote_access_key\x18\x1b \x01(\t\x12\x13\n\x0bremote_host\x18\x1c \x01(\t\x12\x17\n\x0fremote_password\x18\x1d \x01(\t\x12\x13\n\x0bremote_user\x18\x1e \x01(\t\x12\x1d\n\x15remove_after_transfer\x18\x1f \x01(\x08\x12 \n\x18remove_empty_directories\x18 \x01(\x08\x12\x15\n\rresume_policy\x18! \x01(\t\x12\x16\n\x0eretry_duration\x18\" \x01(\x03\x12\x16\n\x0esource_root_id\x18# \x01(\t\x12\x10\n\x08ssh_port\x18$ \x01(\x03\x12\x17\n\x0fssh_private_key\x18% \x01(\t\x12\"\n\x1assh_private_key_passphrase\x18& \x01(\t\x12\x16\n\x0esymlink_policy\x18\' \x01(\t\x12\x0c\n\x04tags\x18( \x01(\t\x12\x0e\n\x06tags64\x18) \x01(\t\x12\x1c\n\x14target_rate_cap_kbps\x18* \x01(\x03\x12\x18\n\x10target_rate_kbps\x18+ \x01(\x03\x12\r\n\x05title\x18, \x01(\t\x12\r\n\x05token\x18- \x01(\t\x12\x15\n\tuse_ascp4\x18. \x01(\x08\x42\x02\x18\x01\x12,\n\nfasp_proxy\x18/ \x01(\x0b\x32\x18.transferd.api.FASPProxy\x12\x18\n\x10\x64\x65stination_root\x18\x30 \x01(\t\x12\x13\n\x0bsource_root\x18\x31 \x01(\t\x12\x19\n\x11min_rate_cap_kbps\x18\x32 \x01(\x03\x12\x18\n\x10lock_rate_policy\x18\x33 \x01(\x08\x12\x1d\n\x15lock_target_rate_kbps\x18\x34 \x01(\x08\x12\x1a\n\x12lock_min_rate_kbps\x18\x35 \x01(\x08\x12\x12\n\nsrc_base64\x18\x36 \x01(\t\x12%\n\x04icos\x18\x37 \x01(\x0b\x32\x17.transferd.api.ICOSSpec\x12,\n\x08node_api\x18\x38 \x01(\x0b\x32\x1a.transferd.api.NodeAPISpec\x12\x1b\n\x13\x61pply_local_docroot\x18\x39 \x01(\x08\x12\x15\n\rpreserve_acls\x18: \x01(\t\x12\x1c\n\x14preserve_remote_acls\x18; \x01(\t\x12\x1f\n\x17preserve_file_owner_uid\x18< \x01(\x08\x12\x1f\n\x17preserve_file_owner_gid\x18= \x01(\x08\x12\x1f\n\x17preserve_extended_attrs\x18> \x01(\t\x12&\n\x1epreserve_remote_extended_attrs\x18? \x01(\t\x12#\n\x1bpreserve_source_access_time\x18@ \x01(\x08\x12\x1f\n\x17remove_empty_source_dir\x18\x41 \x01(\x08\x12\x1d\n\x15save_before_overwrite\x18\x42 \x01(\x08\x12\x1c\n\x14skip_duplicate_check\x18\x43 \x01(\x08\x12\x1a\n\x12skip_special_files\x18\x44 \x01(\x08\x12\x1c\n\x14ssh_private_key_path\x18\x45 \x01(\t\"+\n\x04Path\x12\x0e\n\x06source\x18\x01 \x01(\t\x12\x13\n\x0b\x64\x65stination\x18\x02 \x01(\t\"<\n\tFASPProxy\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x10\n\x08password\x18\x03 \x01(\t\"\xd8\x02\n\x0eTransferSpecV2\x12\x35\n\x12session_initiation\x18\x01 \x01(\x0b\x32\x19.transferd.api.Initiation\x12)\n\x08security\x18\x02 \x01(\x0b\x32\x17.transferd.api.Security\x12)\n\x08tracking\x18\x03 \x01(\x0b\x32\x17.transferd.api.Tracking\x12.\n\x0b\x66ile_system\x18\x04 \x01(\x0b\x32\x19.transferd.api.Filesystem\x12+\n\ttransport\x18\x05 \x01(\x0b\x32\x18.transferd.api.Transport\x12%\n\x06\x61ssets\x18\x06 \x01(\x0b\x32\x15.transferd.api.Assets\x12\x11\n\tdirection\x18\x07 \x01(\t\x12\x13\n\x0bremote_host\x18\x08 \x01(\t\x12\r\n\x05title\x18\t \x01(\t\"\x86\x01\n\nInitiation\x12#\n\x03ssh\x18\x01 \x01(\x0b\x32\x16.transferd.api.SSHSpec\x12%\n\x04icos\x18\x02 \x01(\x0b\x32\x17.transferd.api.ICOSSpec\x12,\n\x08node_api\x18\x03 \x01(\x0b\x32\x1a.transferd.api.NodeAPISpec\"\xbd\x01\n\x07SSHSpec\x12\x10\n\x08ssh_port\x18\x01 \x01(\x03\x12\x17\n\x0fremote_password\x18\x02 \x01(\t\x12\x13\n\x0bremote_user\x18\x03 \x01(\t\x12\x17\n\x0fssh_private_key\x18\x04 \x01(\t\x12\"\n\x1assh_private_key_passphrase\x18\x05 \x01(\t\x12\x17\n\x0fssh_fingerprint\x18\x06 \x01(\t\x12\x1c\n\x14ssh_private_key_path\x18\x07 \x01(\t\"j\n\x08ICOSSpec\x12\x0f\n\x07\x61pi_key\x18\x01 \x01(\t\x12\x0e\n\x06\x62ucket\x18\x02 \x01(\t\x12\x1f\n\x17ibm_service_instance_id\x18\x03 \x01(\t\x12\x1c\n\x14ibm_service_endpoint\x18\x04 \x01(\t\"/\n\x11NodeAPIHeaderSpec\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\"M\n\x0bNodeAPISpec\x12\x0b\n\x03url\x18\x01 \x01(\t\x12\x31\n\x07headers\x18\x02 \x03(\x0b\x32 .transferd.api.NodeAPIHeaderSpec\"i\n\x08Security\x12#\n\x1b\x63ontent_protection_password\x18\x01 \x01(\t\x12\x19\n\x11remote_access_key\x18\x02 \x01(\t\x12\r\n\x05token\x18\x03 \x01(\t\x12\x0e\n\x06\x63ipher\x18\x04 \x01(\t\"8\n\x08Tracking\x12\x0e\n\x06\x63ookie\x18\x01 \x01(\t\x12\x0c\n\x04tags\x18\x02 \x01(\t\x12\x0e\n\x06tags64\x18\x03 \x01(\t\"\xc8\x07\n\nFilesystem\x12\x12\n\ncreate_dir\x18\x01 \x01(\x08\x12\x1e\n\x16\x64\x65lete_before_transfer\x18\x02 \x01(\x08\x12\x1a\n\x12\x65xclude_newer_than\x18\x03 \x01(\t\x12\x1a\n\x12\x65xclude_older_than\x18\x04 \x01(\t\x12\x1b\n\x13move_after_transfer\x18\x05 \x01(\t\x12\x11\n\toverwrite\x18\x06 \x01(\t\x12\x1d\n\x15precalculate_job_size\x18\x07 \x01(\x08\x12\x1c\n\x14preserve_access_time\x18\x08 \x01(\x08\x12\x1e\n\x16preserve_creation_time\x18\t \x01(\x08\x12\"\n\x1apreserve_modification_time\x18\n \x01(\x08\x12\x16\n\x0epreserve_times\x18\x0b \x01(\x08\x12\x1d\n\x15remove_after_transfer\x18\x0c \x01(\x08\x12 \n\x18remove_empty_directories\x18\r \x01(\x08\x12\x15\n\rresume_policy\x18\x0e \x01(\t\x12\x16\n\x0esymlink_policy\x18\x0f \x01(\t\x12\x15\n\rchecksum_type\x18\x10 \x01(\t\x12\x12\n\nsrc_base64\x18\x11 \x01(\t\x12\x36\n\x12inclusion_patterns\x18\x12 \x03(\x0b\x32\x1a.transferd.api.PathPattern\x12\x36\n\x12\x65xclusion_patterns\x18\x13 \x03(\x0b\x32\x1a.transferd.api.PathPattern\x12\x1b\n\x13\x61pply_local_docroot\x18\x14 \x01(\x08\x12\x15\n\rpreserve_acls\x18\x15 \x01(\t\x12\x1c\n\x14preserve_remote_acls\x18\x16 \x01(\t\x12\x1f\n\x17preserve_file_owner_uid\x18\x17 \x01(\x08\x12\x1f\n\x17preserve_file_owner_gid\x18\x18 \x01(\x08\x12\x1f\n\x17preserve_extended_attrs\x18\x19 \x01(\t\x12&\n\x1epreserve_remote_extended_attrs\x18\x1a \x01(\t\x12#\n\x1bpreserve_source_access_time\x18\x1b \x01(\x08\x12\x1f\n\x17remove_empty_source_dir\x18\x1c \x01(\x08\x12\x1d\n\x15save_before_overwrite\x18\x1d \x01(\x08\x12\x1c\n\x14skip_duplicate_check\x18\x1e \x01(\x08\x12\x1a\n\x12skip_special_files\x18\x1f \x01(\x08\"\xed\x03\n\tTransport\x12\x11\n\tfasp_port\x18\x01 \x01(\x03\x12\x32\n\rhttp_fallback\x18\x02 \x01(\x0b\x32\x1b.transferd.api.HTTPFallback\x12,\n\nfasp_proxy\x18\x03 \x01(\x0b\x32\x18.transferd.api.FASPProxy\x12+\n\tstreaming\x18\x04 \x01(\x0b\x32\x18.transferd.api.Streaming\x12\x32\n\rmulti_session\x18\x05 \x01(\x0b\x32\x1b.transferd.api.MultiSession\x12\x1f\n\x17multi_session_threshold\x18\x06 \x01(\x03\x12\x13\n\x0brate_policy\x18\x07 \x01(\t\x12\x18\n\x10lock_rate_policy\x18\x08 \x01(\x08\x12\x1c\n\x14target_rate_cap_kbps\x18\t \x01(\x03\x12\x18\n\x10target_rate_kbps\x18\n \x01(\x03\x12\x19\n\x11min_rate_cap_kbps\x18\x0b \x01(\x03\x12\x15\n\rmin_rate_kbps\x18\x0c \x01(\x03\x12\x1d\n\x15lock_target_rate_kbps\x18\r \x01(\x08\x12\x1a\n\x12lock_min_rate_kbps\x18\x0e \x01(\x08\x12\x15\n\tuse_ascp4\x18\x0f \x01(\x08\x42\x02\x18\x01\"\x90\x01\n\x06\x41ssets\x12\x1b\n\x13\x64\x65stination_root_id\x18\x01 \x01(\t\x12\x16\n\x0esource_root_id\x18\x02 \x01(\t\x12\x18\n\x10\x64\x65stination_root\x18\x03 \x01(\t\x12\x13\n\x0bsource_root\x18\x04 \x01(\t\x12\"\n\x05paths\x18\x05 \x03(\x0b\x32\x13.transferd.api.Path\"\x1e\n\x0bPathPattern\x12\x0f\n\x07pattern\x18\x01 \x01(\t\"+\n\x0cHTTPFallback\x12\x0c\n\x04port\x18\x01 \x01(\x03\x12\r\n\x05proxy\x18\x02 \x01(\t\"\x92\x01\n\tStreaming\x12\x12\n\nchunk_size\x18\x01 \x01(\x03\x12\x14\n\x0clocal_memory\x18\x02 \x01(\x03\x12\x15\n\rremote_memory\x18\x03 \x01(\x03\x12\x13\n\x0bsparse_file\x18\x04 \x01(\x08\x12/\n\x0b\x63ompression\x18\x05 \x01(\x0b\x32\x1a.transferd.api.Compression\"+\n\x0b\x43ompression\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\x0c\n\x04hint\x18\x02 \x01(\x05\"\xe6\x01\n\x0cMultiSession\x12\x0e\n\x06\x65nable\x18\x01 \x01(\x08\x12\x1a\n\x12number_of_sessions\x18\x02 \x01(\x05\x12/\n\x05hosts\x18\x03 \x01(\x0b\x32 .transferd.api.MultiSessionHosts\x12@\n\x0e\x66ile_splitting\x18\x04 \x01(\x0b\x32(.transferd.api.MultiSessionFileSplitting\x12\x37\n\tbandwidth\x18\x05 \x01(\x0b\x32$.transferd.api.MultiSessionBandwidth\"2\n\x11MultiSessionHosts\x12\x0e\n\x06usedns\x18\x01 \x01(\x08\x12\r\n\x05hosts\x18\x02 \x03(\t\"6\n\x19MultiSessionFileSplitting\x12\x19\n\x11size_kb_threshold\x18\x01 \x01(\x05\"9\n\x15MultiSessionBandwidth\x12 \n\x18\x62\x61ndwidth_kpbs_threshold\x18\x01 \x01(\x05*\xdb\x01\n\x0cTransferType\x12\x19\n\x15UNKNOWN_TRANSFER_TYPE\x10\x00\x12\x10\n\x0c\x46ILE_REGULAR\x10\x01\x12\x13\n\x0f\x46ILE_PERSISTENT\x10\x02\x12\x1c\n\x14URL_STREAM_TO_STREAM\x10\x03\x1a\x02\x08\x01\x12\x1b\n\x17\x46ILE_TO_STREAM_DOWNLOAD\x10\x04\x12\x19\n\x15STREAM_TO_FILE_UPLOAD\x10\x05\x12 \n\x18PERSISTENT_STREAM_UPLOAD\x10\x06\x1a\x02\x08\x01\x12\x11\n\rASYNC_SESSION\x10\x07*\x80\x01\n\x0eTransferStatus\x12\x12\n\x0eUNKNOWN_STATUS\x10\x00\x12\n\n\x06QUEUED\x10\x01\x12\x0b\n\x07RUNNING\x10\x02\x12\r\n\tCOMPLETED\x10\x03\x12\n\n\x06\x46\x41ILED\x10\x04\x12\x0c\n\x08\x43\x41NCELED\x10\x05\x12\n\n\x06PAUSED\x10\x06\x12\x0c\n\x08ORPHANED\x10\x07*\x8c\x02\n\rTransferEvent\x12\x11\n\rUNKNOWN_EVENT\x10\x00\x12\x11\n\rSESSION_START\x10\x01\x12\x10\n\x0cSESSION_STOP\x10\x02\x12\x11\n\rSESSION_ERROR\x10\x03\x12\x0e\n\nFILE_START\x10\x04\x12\r\n\tFILE_STOP\x10\x05\x12\x0e\n\nFILE_ERROR\x10\x06\x12\x0c\n\x08\x41RG_STOP\x10\x07\x12\x0c\n\x08PROGRESS\x10\x08\x12\x0e\n\nCONNECTING\x10\t\x12\x15\n\x11RATE_MODIFICATION\x10\n\x12\r\n\tFILE_SKIP\x10\x0b\x12\x19\n\x15\x42\x41NDWIDTH_MEASUREMENT\x10\x0c\x12\x14\n\x10SESSION_CANCELED\x10\r*-\n\x1aRegistrationFilterOperator\x12\x06\n\x02OR\x10\x00\x12\x07\n\x03\x41ND\x10\x01\x32\x98\x0b\n\x0fTransferService\x12Q\n\x08Validate\x12 .transferd.api.ValidationRequest\x1a!.transferd.api.ValidationResponse\"\x00\x12W\n\rStartTransfer\x12\x1e.transferd.api.TransferRequest\x1a$.transferd.api.StartTransferResponse\"\x00\x12_\n\x18StartTransferWithMonitor\x12\x1e.transferd.api.TransferRequest\x1a\x1f.transferd.api.TransferResponse\"\x00\x30\x01\x12[\n\rQueryTransfer\x12\".transferd.api.TransferInfoRequest\x1a$.transferd.api.QueryTransferResponse\"\x00\x12k\n\x0eModifyTransfer\x12*.transferd.api.TransferModificationRequest\x1a+.transferd.api.TransferModificationResponse\"\x00\x12]\n\x10\x41\x64\x64TransferPaths\x12\".transferd.api.TransferPathRequest\x1a#.transferd.api.TransferPathResponse\"\x00\x12w\n\x16LockPersistentTransfer\x12,.transferd.api.LockPersistentTransferRequest\x1a-.transferd.api.LockPersistentTransferResponse\"\x00\x12Y\n\x0cStopTransfer\x12\".transferd.api.StopTransferRequest\x1a#.transferd.api.StopTransferResponse\"\x00\x12[\n\x10MonitorTransfers\x12\".transferd.api.RegistrationRequest\x1a\x1f.transferd.api.TransferResponse\"\x00\x30\x01\x12V\n\rGetAPIVersion\x12 .transferd.api.APIVersionRequest\x1a!.transferd.api.APIVersionResponse\"\x00\x12T\n\x07GetInfo\x12\".transferd.api.InstanceInfoRequest\x1a#.transferd.api.InstanceInfoResponse\"\x00\x12V\n\x0fIsPeerReachable\x12\x1f.transferd.api.PeerCheckRequest\x1a .transferd.api.PeerCheckResponse\"\x00\x12g\n\x10WriteStreamChunk\x12&.transferd.api.WriteStreamChunkRequest\x1a\'.transferd.api.WriteStreamChunkResponse\"\x00(\x01\x12X\n\x0bWriteStream\x12!.transferd.api.WriteStreamRequest\x1a\".transferd.api.WriteStreamResponse\"\x00(\x01\x12U\n\nReadStream\x12 .transferd.api.ReadStreamRequest\x1a!.transferd.api.ReadStreamResponse\"\x00\x30\x01\x42\x45\n%com.ibm.software.aspera.transferd.apiZ\x1cibm.com/aspera/transferd/apib\x06proto3"
9
+
10
+ pool = Google::Protobuf::DescriptorPool.generated_pool
11
+ pool.add_serialized_file(descriptor_data)
12
+
13
+ module Transferd
14
+ module Api
15
+ Error = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Error").msgclass
16
+ APIVersionRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.APIVersionRequest").msgclass
17
+ APIVersionResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.APIVersionResponse").msgclass
18
+ RetryStrategy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.RetryStrategy").msgclass
19
+ BasicRetryStrategy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.BasicRetryStrategy").msgclass
20
+ ExponentialBackoffRetryStrategy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ExponentialBackoffRetryStrategy").msgclass
21
+ TransferConfig = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferConfig").msgclass
22
+ TransferRange = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferRange").msgclass
23
+ TransferRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferRequest").msgclass
24
+ StartTransferResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.StartTransferResponse").msgclass
25
+ TransferInfoRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferInfoRequest").msgclass
26
+ TransferResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferResponse").msgclass
27
+ QueryTransferResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.QueryTransferResponse").msgclass
28
+ TransferInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferInfo").msgclass
29
+ SessionTransferInformation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.SessionTransferInformation").msgclass
30
+ FileTransferInformation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.FileTransferInformation").msgclass
31
+ TransferModificationRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferModificationRequest").msgclass
32
+ TransferModificationResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferModificationResponse").msgclass
33
+ TransferPathRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferPathRequest").msgclass
34
+ TransferPath = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferPath").msgclass
35
+ TransferPathResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferPathResponse").msgclass
36
+ LockPersistentTransferRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.LockPersistentTransferRequest").msgclass
37
+ LockPersistentTransferResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.LockPersistentTransferResponse").msgclass
38
+ RegistrationRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.RegistrationRequest").msgclass
39
+ RegistrationFilter = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.RegistrationFilter").msgclass
40
+ StopTransferRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.StopTransferRequest").msgclass
41
+ StopTransferResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.StopTransferResponse").msgclass
42
+ StopInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.StopInfo").msgclass
43
+ InstanceInfoRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.InstanceInfoRequest").msgclass
44
+ InstanceInfoResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.InstanceInfoResponse").msgclass
45
+ InstanceInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.InstanceInfo").msgclass
46
+ LicenseInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.LicenseInfo").msgclass
47
+ AsperaInfo = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.AsperaInfo").msgclass
48
+ PeerCheckRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.PeerCheckRequest").msgclass
49
+ PeerCheckResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.PeerCheckResponse").msgclass
50
+ WriteStreamChunkRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.WriteStreamChunkRequest").msgclass
51
+ WriteStreamChunkResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.WriteStreamChunkResponse").msgclass
52
+ WriteStreamRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.WriteStreamRequest").msgclass
53
+ WriteStreamResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.WriteStreamResponse").msgclass
54
+ ReadStreamRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ReadStreamRequest").msgclass
55
+ ReadStreamResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ReadStreamResponse").msgclass
56
+ Chunk = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Chunk").msgclass
57
+ ValidationRequest = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ValidationRequest").msgclass
58
+ ValidationResponse = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ValidationResponse").msgclass
59
+ TransferSpecV1 = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferSpecV1").msgclass
60
+ Path = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Path").msgclass
61
+ FASPProxy = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.FASPProxy").msgclass
62
+ TransferSpecV2 = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferSpecV2").msgclass
63
+ Initiation = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Initiation").msgclass
64
+ SSHSpec = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.SSHSpec").msgclass
65
+ ICOSSpec = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.ICOSSpec").msgclass
66
+ NodeAPIHeaderSpec = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.NodeAPIHeaderSpec").msgclass
67
+ NodeAPISpec = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.NodeAPISpec").msgclass
68
+ Security = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Security").msgclass
69
+ Tracking = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Tracking").msgclass
70
+ Filesystem = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Filesystem").msgclass
71
+ Transport = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Transport").msgclass
72
+ Assets = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Assets").msgclass
73
+ PathPattern = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.PathPattern").msgclass
74
+ HTTPFallback = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.HTTPFallback").msgclass
75
+ Streaming = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Streaming").msgclass
76
+ Compression = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.Compression").msgclass
77
+ MultiSession = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.MultiSession").msgclass
78
+ MultiSessionHosts = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.MultiSessionHosts").msgclass
79
+ MultiSessionFileSplitting = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.MultiSessionFileSplitting").msgclass
80
+ MultiSessionBandwidth = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.MultiSessionBandwidth").msgclass
81
+ TransferType = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferType").enummodule
82
+ TransferStatus = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferStatus").enummodule
83
+ TransferEvent = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.TransferEvent").enummodule
84
+ RegistrationFilterOperator = ::Google::Protobuf::DescriptorPool.generated_pool.lookup("transferd.api.RegistrationFilterOperator").enummodule
85
+ end
86
+ end
@@ -0,0 +1,84 @@
1
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
2
+ # Source: transferd.proto for package 'transferd.api'
3
+
4
+ require 'grpc'
5
+ require 'transferd_pb'
6
+
7
+ module Transferd
8
+ module Api
9
+ module TransferService
10
+ #
11
+ # Transfer service definition. This service enables users to start, manage and monitor transfers.
12
+ # You can also get information about the transfer service settings and confirm the availability of
13
+ # communication between the engine and a remote transfer server.
14
+ class Service
15
+
16
+ include ::GRPC::GenericService
17
+
18
+ self.marshal_class_method = :encode
19
+ self.unmarshal_class_method = :decode
20
+ self.service_name = 'transferd.api.TransferService'
21
+
22
+ #
23
+ # Validate accepts a transfer spec string and a transfer type, and returns the validation result.
24
+ rpc :Validate, ::Transferd::Api::ValidationRequest, ::Transferd::Api::ValidationResponse
25
+ #
26
+ # StartTransfer starts a new transfer and returns the transfer information required to manage and monitor the transfer.
27
+ # This request doesn't close until the transfer is terminated or the request is canceled by the client.
28
+ rpc :StartTransfer, ::Transferd::Api::TransferRequest, ::Transferd::Api::StartTransferResponse
29
+ #
30
+ # StartTransferWithMonitor starts a new transfer and streams back the transfer events.
31
+ # The request doesn't return immediately, as it continues streaming responses to the client until the transfer is terminated or the request is canceled
32
+ # by the client.
33
+ rpc :StartTransferWithMonitor, ::Transferd::Api::TransferRequest, stream(::Transferd::Api::TransferResponse)
34
+ #
35
+ # QueryTransfer requests transfer data.
36
+ rpc :QueryTransfer, ::Transferd::Api::TransferInfoRequest, ::Transferd::Api::QueryTransferResponse
37
+ #
38
+ # ModifyTransfer modifies an existing transfer.
39
+ rpc :ModifyTransfer, ::Transferd::Api::TransferModificationRequest, ::Transferd::Api::TransferModificationResponse
40
+ #
41
+ # AddTransferPaths can be used with persistent transfer to add paths to an existing transfer.
42
+ # (type TransferType.FILE_PERSISTENT).
43
+ rpc :AddTransferPaths, ::Transferd::Api::TransferPathRequest, ::Transferd::Api::TransferPathResponse
44
+ #
45
+ # LockPersistentTransfer, used with persistent transfer, marks an existing persistent transfer as done.
46
+ # Once the method is called, any subsequent call to AddTransferPaths results in an error.
47
+ # (type TransferType.FILE_PERSISTENT).
48
+ rpc :LockPersistentTransfer, ::Transferd::Api::LockPersistentTransferRequest, ::Transferd::Api::LockPersistentTransferResponse
49
+ #
50
+ # StopTransfer stops a transfer.
51
+ rpc :StopTransfer, ::Transferd::Api::StopTransferRequest, ::Transferd::Api::StopTransferResponse
52
+ #
53
+ # MonitorTransfers monitors transfers matching the defined filters and streams back the transfer events.
54
+ # The request doesn't return an immediate response because MonitorTransfers continues streaming
55
+ # responses to the client until the client cancels the request.
56
+ rpc :MonitorTransfers, ::Transferd::Api::RegistrationRequest, stream(::Transferd::Api::TransferResponse)
57
+ #
58
+ # GetAPIVersion gets the API version.
59
+ rpc :GetAPIVersion, ::Transferd::Api::APIVersionRequest, ::Transferd::Api::APIVersionResponse
60
+ #
61
+ # GetInfo gets data about the TransferD service instance.
62
+ rpc :GetInfo, ::Transferd::Api::InstanceInfoRequest, ::Transferd::Api::InstanceInfoResponse
63
+ #
64
+ # IsPeerReachable confirms whether or not the peer endpoint is reachable.
65
+ rpc :IsPeerReachable, ::Transferd::Api::PeerCheckRequest, ::Transferd::Api::PeerCheckResponse
66
+ #
67
+ # WriteStreamChunk writes chunks of streaming data for the specified in-progress
68
+ # transfer of type PERSISTENT_STREAM_UPLOAD, at a specific offset.
69
+ # When StopTransfer is called on the transfer, subsequent calls to this function will fail.
70
+ rpc :WriteStreamChunk, stream(::Transferd::Api::WriteStreamChunkRequest), ::Transferd::Api::WriteStreamChunkResponse
71
+ #
72
+ # WriteStream writes chunks of streaming data for the specified in-progress transfer of type STREAM_TO_FILE_UPLOAD.
73
+ # Once StopTransfer is called on the transfer, subsequent calls to this function will fail.
74
+ rpc :WriteStream, stream(::Transferd::Api::WriteStreamRequest), ::Transferd::Api::WriteStreamResponse
75
+ #
76
+ # ReadStream reads chunks of streaming data from a specified in-progress transfer of type FILE_TO_STREAM_DOWNLOAD.
77
+ # Once StopTransfer is called on this transfer, subsequent calls to this function will fail.
78
+ rpc :ReadStream, ::Transferd::Api::ReadStreamRequest, stream(::Transferd::Api::ReadStreamResponse)
79
+ end
80
+
81
+ Stub = Service.rpc_stub_class
82
+ end
83
+ end
84
+ end
data.tar.gz.sig CHANGED
Binary file