aspera-cli 4.20.0 → 4.21.2

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 (73) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/CHANGELOG.md +41 -3
  4. data/CONTRIBUTING.md +69 -142
  5. data/README.md +687 -461
  6. data/bin/ascli +5 -14
  7. data/bin/asession +3 -5
  8. data/examples/get_proto_file.rb +4 -3
  9. data/examples/proxy.pac +20 -20
  10. data/lib/aspera/agent/base.rb +2 -0
  11. data/lib/aspera/agent/connect.rb +20 -2
  12. data/lib/aspera/agent/{alpha.rb → desktop.rb} +12 -18
  13. data/lib/aspera/agent/direct.rb +30 -31
  14. data/lib/aspera/agent/node.rb +1 -11
  15. data/lib/aspera/agent/{trsdk.rb → transferd.rb} +37 -51
  16. data/lib/aspera/api/alee.rb +1 -1
  17. data/lib/aspera/api/aoc.rb +13 -8
  18. data/lib/aspera/api/cos_node.rb +1 -1
  19. data/lib/aspera/api/node.rb +49 -32
  20. data/lib/aspera/ascp/installation.rb +98 -77
  21. data/lib/aspera/ascp/management.rb +27 -6
  22. data/lib/aspera/cli/extended_value.rb +9 -3
  23. data/lib/aspera/cli/formatter.rb +155 -154
  24. data/lib/aspera/cli/info.rb +2 -1
  25. data/lib/aspera/cli/main.rb +12 -0
  26. data/lib/aspera/cli/manager.rb +4 -4
  27. data/lib/aspera/cli/plugin.rb +2 -2
  28. data/lib/aspera/cli/plugins/aoc.rb +134 -73
  29. data/lib/aspera/cli/plugins/config.rb +114 -83
  30. data/lib/aspera/cli/plugins/cos.rb +1 -0
  31. data/lib/aspera/cli/plugins/faspex.rb +4 -2
  32. data/lib/aspera/cli/plugins/faspex5.rb +29 -14
  33. data/lib/aspera/cli/plugins/node.rb +51 -41
  34. data/lib/aspera/cli/transfer_progress.rb +2 -0
  35. data/lib/aspera/cli/version.rb +1 -1
  36. data/lib/aspera/command_line_builder.rb +1 -1
  37. data/lib/aspera/coverage.rb +5 -3
  38. data/lib/aspera/environment.rb +59 -16
  39. data/lib/aspera/faspex_postproc.rb +3 -5
  40. data/lib/aspera/hash_ext.rb +2 -12
  41. data/lib/aspera/node_simulator.rb +230 -112
  42. data/lib/aspera/oauth/base.rb +40 -48
  43. data/lib/aspera/oauth/factory.rb +41 -2
  44. data/lib/aspera/oauth/jwt.rb +4 -1
  45. data/lib/aspera/persistency_action_once.rb +1 -1
  46. data/lib/aspera/persistency_folder.rb +20 -2
  47. data/lib/aspera/preview/generator.rb +13 -10
  48. data/lib/aspera/preview/options.rb +2 -2
  49. data/lib/aspera/preview/terminal.rb +1 -1
  50. data/lib/aspera/preview/utils.rb +11 -6
  51. data/lib/aspera/products/connect.rb +82 -0
  52. data/lib/aspera/products/desktop.rb +30 -0
  53. data/lib/aspera/products/other.rb +82 -0
  54. data/lib/aspera/products/transferd.rb +61 -0
  55. data/lib/aspera/rest.rb +22 -17
  56. data/lib/aspera/secret_hider.rb +9 -2
  57. data/lib/aspera/ssh.rb +31 -24
  58. data/lib/aspera/temp_file_manager.rb +5 -4
  59. data/lib/aspera/transfer/parameters.rb +2 -1
  60. data/lib/aspera/transfer/spec.yaml +22 -20
  61. data/lib/aspera/transfer/sync.rb +1 -5
  62. data/lib/aspera/transfer/uri.rb +2 -2
  63. data/lib/aspera/uri_reader.rb +18 -1
  64. data/lib/transferd_pb.rb +86 -0
  65. data/lib/transferd_services_pb.rb +84 -0
  66. data.tar.gz.sig +0 -0
  67. metadata +13 -166
  68. metadata.gz.sig +0 -0
  69. data/examples/build_exec +0 -74
  70. data/examples/build_exec_rubyc +0 -40
  71. data/lib/aspera/ascp/products.rb +0 -168
  72. data/lib/transfer_pb.rb +0 -84
  73. data/lib/transfer_services_pb.rb +0 -82
@@ -35,22 +35,23 @@ module Aspera
35
35
 
36
36
  # ensure that provided folder exists, or create it, generate a unique filename
37
37
  # @return path to that unique file
38
- def new_file_path_in_folder(temp_folder, add_base = '')
38
+ def new_file_path_in_folder(temp_folder, prefix: nil, suffix: nil)
39
39
  FileUtils.mkdir_p(temp_folder)
40
- new_file = File.join(temp_folder, add_base + SecureRandom.uuid)
40
+ new_file = File.join(temp_folder, [prefix, SecureRandom.uuid, suffix].compact.join('-'))
41
41
  @created_files.push(new_file)
42
42
  new_file
43
43
  end
44
44
 
45
45
  # same as above but in global temp folder, with user's name
46
- def new_file_path_global(base_name)
46
+ def new_file_path_global(prefix=nil, suffix: nil)
47
47
  username =
48
48
  begin
49
49
  Etc.getlogin || Etc.getpwuid(Process.uid).name || 'unknown_user'
50
50
  rescue StandardError
51
51
  'unknown_user'
52
52
  end
53
- new_file_path_in_folder(Etc.systmpdir, base_name + '_' + username + '_')
53
+ prefix = [prefix, username].compact.join('-')
54
+ new_file_path_in_folder(Etc.systmpdir, prefix: prefix, suffix: suffix)
54
55
  end
55
56
 
56
57
  def cleanup_expired(temp_folder)
@@ -8,6 +8,7 @@ require 'aspera/transfer/error'
8
8
  require 'aspera/transfer/spec'
9
9
  require 'aspera/ascp/installation'
10
10
  require 'aspera/cli/formatter'
11
+ require 'aspera/agent/base'
11
12
  require 'aspera/rest'
12
13
  require 'securerandom'
13
14
  require 'base64'
@@ -20,7 +21,7 @@ module Aspera
20
21
  # translate transfer specification to ascp parameter list
21
22
  class Parameters
22
23
  # Agents shown in manual for parameters (sub list)
23
- SUPPORTED_AGENTS = %i[direct node connect trsdk httpgw].freeze
24
+ SUPPORTED_AGENTS = Agent::Base.agent_list.freeze
24
25
  FILE_LIST_OPTIONS = ['--file-list', '--file-pair-list'].freeze
25
26
  # Short names of columns in manual
26
27
  SUPPORTED_AGENTS_SHORT = SUPPORTED_AGENTS.map{|agent_sym|agent_sym.to_s[0].to_sym}
@@ -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
@@ -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
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'uri'
4
+ require 'aspera/assert'
4
5
  require 'aspera/rest'
6
+ require 'aspera/temp_file_manager'
5
7
 
6
8
  module Aspera
7
9
  # read some content from some URI, support file: , http: and https: schemes
8
10
  module UriReader
11
+ FILE_SCHEME_PREFIX = 'file:///'
12
+ private_constant :FILE_SCHEME_PREFIX
9
13
  class << self
10
14
  # read some content from some URI, support file: , http: and https: schemes
11
15
  def read(uri_to_read)
@@ -18,8 +22,21 @@ module Aspera
18
22
  raise 'URL shall have a path, check syntax' if local_file_path.nil?
19
23
  local_file_path = File.expand_path(local_file_path.gsub(%r{^/}, '')) if %r{^/(~|.|..)/}.match?(local_file_path)
20
24
  return File.read(local_file_path)
25
+ else Aspera.error_unexpected_value(uri.scheme) {"scheme for [#{uri_to_read}]"}
26
+ end
27
+ end
28
+
29
+ # @return path to file with content at URL
30
+ def read_as_file(url)
31
+ if url.start_with?('file:')
32
+ # require specific file scheme: the path part is "relative", or absolute if there are 4 slash
33
+ raise "use format: #{FILE_SCHEME_PREFIX}<path>" unless url.start_with?(FILE_SCHEME_PREFIX)
34
+ return File.expand_path(url[FILE_SCHEME_PREFIX.length..-1])
21
35
  else
22
- raise "unknown scheme: [#{uri.scheme}] for [#{uri_to_read}]"
36
+ # autodelete on exit
37
+ sdk_archive_path = TempFileManager.instance.new_file_path_global(suffix: File.basename(url))
38
+ Aspera::Rest.new(base_url: url, redirect_max: 3).call(operation: 'GET', save_to_file: sdk_archive_path)
39
+ return sdk_archive_path
23
40
  end
24
41
  end
25
42
  end
@@ -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