aspera-cli 4.6.0 → 4.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +427 -300
- data/bin/ascli +2 -1
- data/bin/asession +1 -0
- data/docs/test_env.conf +2 -0
- data/examples/aoc.rb +4 -3
- data/examples/faspex4.rb +21 -19
- data/examples/proxy.pac +1 -1
- data/examples/transfer.rb +15 -15
- data/lib/aspera/aoc.rb +135 -124
- data/lib/aspera/ascmd.rb +85 -75
- data/lib/aspera/ats_api.rb +11 -10
- data/lib/aspera/cli/basic_auth_plugin.rb +13 -14
- data/lib/aspera/cli/extended_value.rb +42 -33
- data/lib/aspera/cli/formater.rb +138 -111
- data/lib/aspera/cli/info.rb +17 -0
- data/lib/aspera/cli/listener/line_dump.rb +3 -2
- data/lib/aspera/cli/listener/logger.rb +2 -1
- data/lib/aspera/cli/listener/progress.rb +16 -18
- data/lib/aspera/cli/listener/progress_multi.rb +13 -16
- data/lib/aspera/cli/main.rb +122 -130
- data/lib/aspera/cli/manager.rb +146 -154
- data/lib/aspera/cli/plugin.rb +38 -34
- data/lib/aspera/cli/plugins/alee.rb +6 -6
- data/lib/aspera/cli/plugins/aoc.rb +273 -276
- data/lib/aspera/cli/plugins/ats.rb +82 -76
- data/lib/aspera/cli/plugins/bss.rb +14 -16
- data/lib/aspera/cli/plugins/config.rb +350 -306
- data/lib/aspera/cli/plugins/console.rb +23 -19
- data/lib/aspera/cli/plugins/cos.rb +18 -18
- data/lib/aspera/cli/plugins/faspex.rb +180 -159
- data/lib/aspera/cli/plugins/faspex5.rb +64 -54
- data/lib/aspera/cli/plugins/node.rb +147 -140
- data/lib/aspera/cli/plugins/orchestrator.rb +68 -66
- data/lib/aspera/cli/plugins/preview.rb +92 -96
- data/lib/aspera/cli/plugins/server.rb +79 -75
- data/lib/aspera/cli/plugins/shares.rb +23 -24
- data/lib/aspera/cli/plugins/sync.rb +20 -22
- data/lib/aspera/cli/transfer_agent.rb +40 -39
- data/lib/aspera/cli/version.rb +2 -1
- data/lib/aspera/colors.rb +35 -27
- data/lib/aspera/command_line_builder.rb +48 -34
- data/lib/aspera/cos_node.rb +29 -21
- data/lib/aspera/data_repository.rb +3 -2
- data/lib/aspera/environment.rb +50 -45
- data/lib/aspera/fasp/agent_base.rb +22 -20
- data/lib/aspera/fasp/agent_connect.rb +13 -11
- data/lib/aspera/fasp/agent_direct.rb +48 -59
- data/lib/aspera/fasp/agent_httpgw.rb +33 -39
- data/lib/aspera/fasp/agent_node.rb +15 -13
- data/lib/aspera/fasp/agent_trsdk.rb +12 -14
- data/lib/aspera/fasp/error.rb +2 -1
- data/lib/aspera/fasp/error_info.rb +68 -52
- data/lib/aspera/fasp/installation.rb +106 -94
- data/lib/aspera/fasp/listener.rb +1 -0
- data/lib/aspera/fasp/parameters.rb +83 -92
- data/lib/aspera/fasp/parameters.yaml +305 -249
- data/lib/aspera/fasp/resume_policy.rb +11 -14
- data/lib/aspera/fasp/transfer_spec.rb +26 -0
- data/lib/aspera/fasp/uri.rb +22 -21
- data/lib/aspera/faspex_gw.rb +55 -90
- data/lib/aspera/hash_ext.rb +4 -3
- data/lib/aspera/id_generator.rb +8 -7
- data/lib/aspera/keychain/encrypted_hash.rb +17 -16
- data/lib/aspera/keychain/macos_security.rb +6 -10
- data/lib/aspera/log.rb +25 -20
- data/lib/aspera/nagios.rb +13 -12
- data/lib/aspera/node.rb +30 -22
- data/lib/aspera/oauth.rb +175 -226
- data/lib/aspera/open_application.rb +4 -3
- data/lib/aspera/persistency_action_once.rb +6 -6
- data/lib/aspera/persistency_folder.rb +5 -9
- data/lib/aspera/preview/file_types.rb +6 -5
- data/lib/aspera/preview/generator.rb +25 -24
- data/lib/aspera/preview/options.rb +16 -14
- data/lib/aspera/preview/utils.rb +98 -98
- data/lib/aspera/{proxy_auto_config.erb.js → proxy_auto_config.js} +23 -31
- data/lib/aspera/proxy_auto_config.rb +111 -20
- data/lib/aspera/rest.rb +115 -113
- data/lib/aspera/rest_call_error.rb +2 -2
- data/lib/aspera/rest_error_analyzer.rb +23 -25
- data/lib/aspera/rest_errors_aspera.rb +15 -14
- data/lib/aspera/ssh.rb +12 -10
- data/lib/aspera/sync.rb +42 -41
- data/lib/aspera/temp_file_manager.rb +18 -14
- data/lib/aspera/timer_limiter.rb +2 -1
- data/lib/aspera/uri_reader.rb +7 -5
- data/lib/aspera/web_auth.rb +79 -76
- metadata +64 -21
- data/docs/Makefile +0 -65
- data/docs/README.erb.md +0 -4424
- data/docs/README.md +0 -13
- data/docs/diagrams.txt +0 -49
- data/docs/doc_tools.rb +0 -58
- data/lib/aspera/cli/plugins/shares2.rb +0 -114
- data/lib/aspera/fasp/default.rb +0 -17
@@ -1,4 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'aspera/fasp/agent_base'
|
3
|
+
require 'aspera/fasp/transfer_spec'
|
2
4
|
require 'aspera/log'
|
3
5
|
require 'tty-spinner'
|
4
6
|
|
@@ -10,7 +12,7 @@ module Aspera
|
|
10
12
|
# option include: root_id if the node is an access key
|
11
13
|
attr_writer :options
|
12
14
|
def initialize(options)
|
13
|
-
raise
|
15
|
+
raise 'node specification must be Hash' unless options.is_a?(Hash)
|
14
16
|
[:url,:username,:password].each { |k| raise "missing parameter [#{k}] in node specification: #{options}" unless options.has_key?(k) }
|
15
17
|
super()
|
16
18
|
# root id is required for access key
|
@@ -21,7 +23,7 @@ module Aspera
|
|
21
23
|
'X-Aspera-AccessKey'=>options[:username],
|
22
24
|
'Authorization' =>options[:password]
|
23
25
|
}
|
24
|
-
raise
|
26
|
+
raise 'root_id is required for access key' if @root_id.nil?
|
25
27
|
else
|
26
28
|
rest_params[:auth]={
|
27
29
|
type: :basic,
|
@@ -44,24 +46,24 @@ module Aspera
|
|
44
46
|
|
45
47
|
# use this to set the node_api end point before using the class.
|
46
48
|
def node_api=(new_value)
|
47
|
-
if !@node_api.nil?
|
49
|
+
if !@node_api.nil? && !new_value.nil?
|
48
50
|
Log.log.warn('overriding existing node api value')
|
49
51
|
end
|
50
52
|
@node_api=new_value
|
51
53
|
end
|
52
54
|
|
53
55
|
# generic method
|
54
|
-
def start_transfer(transfer_spec,
|
56
|
+
def start_transfer(transfer_spec,_options=nil)
|
55
57
|
# add root id if access key
|
56
|
-
if
|
58
|
+
if !@root_id.nil?
|
57
59
|
case transfer_spec['direction']
|
58
|
-
when
|
59
|
-
when
|
60
|
+
when Fasp::TransferSpec::DIRECTION_SEND then transfer_spec['source_root_id']=@root_id
|
61
|
+
when Fasp::TransferSpec::DIRECTION_RECEIVE then transfer_spec['destination_root_id']=@root_id
|
60
62
|
else raise "unexpected direction in ts: #{transfer_spec['direction']}"
|
61
63
|
end
|
62
64
|
end
|
63
65
|
# manage special additional parameter
|
64
|
-
if transfer_spec.has_key?('EX_ssh_key_paths')
|
66
|
+
if transfer_spec.has_key?('EX_ssh_key_paths') && transfer_spec['EX_ssh_key_paths'].is_a?(Array) && !transfer_spec['EX_ssh_key_paths'].empty?
|
65
67
|
# not standard, so place standard field
|
66
68
|
if transfer_spec.has_key?('ssh_private_key')
|
67
69
|
Log.log.warn('Both ssh_private_key and EX_ssh_key_paths are present, using ssh_private_key')
|
@@ -71,7 +73,7 @@ module Aspera
|
|
71
73
|
transfer_spec.delete('EX_ssh_key_paths')
|
72
74
|
end
|
73
75
|
end
|
74
|
-
if transfer_spec['tags'].is_a?(Hash)
|
76
|
+
if transfer_spec['tags'].is_a?(Hash) && transfer_spec['tags']['aspera'].is_a?(Hash)
|
75
77
|
transfer_spec['tags']['aspera']['xfer_retry']||=150
|
76
78
|
end
|
77
79
|
# optimisation in case of sending to the same node
|
@@ -91,14 +93,14 @@ module Aspera
|
|
91
93
|
# lets emulate management events to display progress bar
|
92
94
|
loop do
|
93
95
|
# status is empty sometimes with status 200...
|
94
|
-
trdata=node_api_.read("ops/transfers/#{@transfer_id}")[:data] || {
|
96
|
+
trdata=node_api_.read("ops/transfers/#{@transfer_id}")[:data] || {'status'=>'unknown'} rescue {'status'=>'waiting(read error)'}
|
95
97
|
case trdata['status']
|
96
98
|
when 'completed'
|
97
99
|
notify_end(@transfer_id)
|
98
100
|
break
|
99
101
|
when 'waiting','partially_completed','unknown','waiting(read error)'
|
100
102
|
if spinner.nil?
|
101
|
-
spinner = TTY::Spinner.new(
|
103
|
+
spinner = TTY::Spinner.new('[:spinner] :title', format: :classic)
|
102
104
|
spinner.start
|
103
105
|
end
|
104
106
|
spinner.update(title: trdata['status'])
|
@@ -106,7 +108,7 @@ module Aspera
|
|
106
108
|
#puts trdata
|
107
109
|
when 'running'
|
108
110
|
#puts "running: sessions:#{trdata["sessions"].length}, #{trdata["sessions"].map{|i| i['bytes_transferred']}.join(',')}"
|
109
|
-
if !started
|
111
|
+
if !started && trdata['precalc'].is_a?(Hash) &&
|
110
112
|
trdata['precalc']['status'].eql?('ready')
|
111
113
|
notify_begin(@transfer_id,trdata['precalc']['bytes_expected'])
|
112
114
|
started=true
|
@@ -115,7 +117,7 @@ module Aspera
|
|
115
117
|
end
|
116
118
|
else
|
117
119
|
Log.log.warn("trdata -> #{trdata}")
|
118
|
-
raise Fasp::Error
|
120
|
+
raise Fasp::Error, "#{trdata['status']}: #{trdata['error_desc']}"
|
119
121
|
end
|
120
122
|
sleep 1
|
121
123
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'aspera/fasp/agent_base'
|
2
3
|
require 'aspera/fasp/installation'
|
3
4
|
require 'json'
|
@@ -7,22 +8,19 @@ module Aspera
|
|
7
8
|
class AgentTrsdk < AgentBase
|
8
9
|
DEFAULT_OPTIONS = {
|
9
10
|
address: '127.0.0.1',
|
10
|
-
port:
|
11
|
+
port: 55_002
|
11
12
|
}
|
12
13
|
private_constant :DEFAULT_OPTIONS
|
13
14
|
|
14
15
|
# options come from transfer_info
|
15
16
|
def initialize(user_opts)
|
16
|
-
raise "expecting Hash (or nil), but have #{user_opts.class}" unless user_opts.nil?
|
17
|
+
raise "expecting Hash (or nil), but have #{user_opts.class}" unless user_opts.nil? || user_opts.is_a?(Hash)
|
17
18
|
# set default options and override if specified
|
18
19
|
options=DEFAULT_OPTIONS.clone
|
19
20
|
if !user_opts.nil?
|
20
21
|
user_opts.each do |k,v|
|
21
|
-
|
22
|
-
|
23
|
-
else
|
24
|
-
raise "Unknown local agent parameter: #{k}, expect one of #{DEFAULT_OPTIONS.keys.map{|i|i.to_s}.join(",")}"
|
25
|
-
end
|
22
|
+
raise "Unknown local agent parameter: #{k}, expect one of #{DEFAULT_OPTIONS.keys.map(&:to_s).join(',')}" unless DEFAULT_OPTIONS.has_key?(k)
|
23
|
+
options[k]=v
|
26
24
|
end
|
27
25
|
end
|
28
26
|
Log.log.debug("options= #{options}")
|
@@ -34,8 +32,8 @@ module Aspera
|
|
34
32
|
begin
|
35
33
|
get_info_response = @transfer_client.get_info(Transfersdk::InstanceInfoRequest.new)
|
36
34
|
Log.log.debug("daemon info: #{get_info_response}")
|
37
|
-
rescue GRPC::Unavailable
|
38
|
-
Log.log.warn(
|
35
|
+
rescue GRPC::Unavailable
|
36
|
+
Log.log.warn('no daemon present, starting daemon...')
|
39
37
|
# location of daemon binary
|
40
38
|
bin_folder=File.realpath(File.join(Installation.instance.sdk_ruby_folder,'..'))
|
41
39
|
# config file and logs are created in same folder
|
@@ -49,19 +47,19 @@ module Aspera
|
|
49
47
|
use_embedded: false,
|
50
48
|
user_defined: {
|
51
49
|
bin: bin_folder,
|
52
|
-
etc: bin_folder
|
50
|
+
etc: bin_folder
|
53
51
|
}
|
54
52
|
}
|
55
53
|
}
|
56
54
|
File.write(conf_file,config.to_json)
|
57
|
-
trd_pid = Process.spawn(Installation.instance.path(:transferd),'--config'
|
55
|
+
trd_pid = Process.spawn(Installation.instance.path(:transferd),'--config', conf_file, out: "#{log_base}.out", err: "#{log_base}.err")
|
58
56
|
Process.detach(trd_pid)
|
59
57
|
sleep(2.0)
|
60
58
|
retry
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
64
|
-
def start_transfer(transfer_spec,
|
62
|
+
def start_transfer(transfer_spec,_options=nil)
|
65
63
|
# create a transfer request
|
66
64
|
transfer_request = Transfersdk::TransferRequest.new(
|
67
65
|
transferType: Transfersdk::TransferType::FILE_REGULAR, # transfer type (file/stream)
|
@@ -82,7 +80,7 @@ module Aspera
|
|
82
80
|
#Log.log.debug("#{response.sessionInfo.preTransferBytes} #{response.transferInfo.bytesTransferred}")
|
83
81
|
case response.status
|
84
82
|
when :RUNNING
|
85
|
-
if !started
|
83
|
+
if !started && !response.sessionInfo.preTransferBytes.eql?(0)
|
86
84
|
notify_begin(@transfer_id,response.sessionInfo.preTransferBytes)
|
87
85
|
started=true
|
88
86
|
elsif started
|
@@ -90,7 +88,7 @@ module Aspera
|
|
90
88
|
end
|
91
89
|
when :FAILED, :COMPLETED, :CANCELED
|
92
90
|
notify_end(@transfer_id)
|
93
|
-
raise Fasp::Error
|
91
|
+
raise Fasp::Error, JSON.parse(response.message)['Description'] unless :COMPLETED.eql?(response.status)
|
94
92
|
break
|
95
93
|
when :QUEUED,:UNKNOWN_STATUS,:PAUSED,:ORPHANED
|
96
94
|
# ignore
|
data/lib/aspera/fasp/error.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'aspera/fasp/error_info'
|
2
3
|
|
3
4
|
module Aspera
|
@@ -11,7 +12,7 @@ module Aspera
|
|
11
12
|
end
|
12
13
|
|
13
14
|
def info
|
14
|
-
r=Fasp::ERROR_INFO[@err_code] || {r: false
|
15
|
+
r=Fasp::ERROR_INFO[@err_code] || {r: false, c: 'UNKNOWN', m: 'unknown', a: 'unknown'}
|
15
16
|
return r.merge({i: @err_code})
|
16
17
|
end
|
17
18
|
|
@@ -1,60 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module Aspera
|
2
3
|
module Fasp
|
3
4
|
# from https://www.google.com/search?q=FASP+error+codes
|
4
5
|
# Note that the fact that an error is retryable is not internally defined by protocol, it's client responsibility
|
5
6
|
ERROR_INFO = {
|
6
|
-
# id
|
7
|
-
1 => { r: false
|
8
|
-
2 => { r: false
|
9
|
-
3 => { r: false
|
10
|
-
4 => { r: false
|
11
|
-
5 => { r: false
|
12
|
-
6 => { r: false
|
13
|
-
7 => { r: false
|
14
|
-
8 => { r: false
|
15
|
-
9 => { r: false
|
16
|
-
10 => { r: false
|
17
|
-
11 => { r: false
|
18
|
-
12 => { r: true
|
19
|
-
13 => { r: true
|
20
|
-
14 => { r: true
|
21
|
-
15 => { r: true
|
22
|
-
16 => { r: true
|
23
|
-
17 => { r: true
|
24
|
-
18 => { r: true
|
25
|
-
19 => { r: false
|
26
|
-
20 => { r: false
|
27
|
-
21 => { r: false
|
28
|
-
22 => { r: false
|
29
|
-
23 => { r: true
|
30
|
-
24 => { r: false
|
31
|
-
25 => { r: false
|
32
|
-
26 => { r: false
|
33
|
-
27 => { r: false
|
34
|
-
28 => { r: false
|
35
|
-
29 => { r: false
|
36
|
-
30 => { r: false
|
37
|
-
31 => { r: false
|
38
|
-
32 => { r: true
|
39
|
-
33 => { r: true
|
40
|
-
34 => { r: false
|
41
|
-
35 => { r: true
|
42
|
-
36 => { r: true
|
43
|
-
37 => { r: true
|
44
|
-
38 => { r: false
|
45
|
-
39 => { r: true
|
46
|
-
40 => { r: true
|
47
|
-
41 => { r: false
|
48
|
-
42 => { r: false
|
49
|
-
43 => { r: false
|
50
|
-
44 => { r: true
|
51
|
-
45 => { r: true
|
52
|
-
46 => { r: false
|
53
|
-
47 => { r: false
|
54
|
-
48 => { r: false
|
55
|
-
49 => { r: false
|
56
|
-
50 => { r: false
|
57
|
-
51 => { r: false
|
7
|
+
# id retryable mnemo message additional info
|
8
|
+
1 => { r: false, c: 'FASP_PROTO', m: 'Generic fasp(tm) protocol error', a: 'fasp(tm) error'},
|
9
|
+
2 => { r: false, c: 'ASCP', m: 'Generic SCP error', a: 'ASCP error'},
|
10
|
+
3 => { r: false, c: 'AMBIGUOUS_TARGET', m: 'Target incorrectly specified', a: 'Ambiguous target'},
|
11
|
+
4 => { r: false, c: 'NO_SUCH_FILE', m: 'No such file or directory', a: 'No such file or directory'},
|
12
|
+
5 => { r: false, c: 'NO_PERMS', m: 'Insufficient permission to read or write', a: 'Insufficient permissions'},
|
13
|
+
6 => { r: false, c: 'NOT_DIR', m: 'Target is not a directory', a: 'Target must be a directory'},
|
14
|
+
7 => { r: false, c: 'IS_DIR', m: 'File is a directory - expected regular file', a: 'Expected regular file'},
|
15
|
+
8 => { r: false, c: 'USAGE', m: 'Incorrect usage of scp command', a: 'Incorrect usage of Aspera scp command'},
|
16
|
+
9 => { r: false, c: 'LIC_DUP', m: 'Duplicate license', a: 'Duplicate license'},
|
17
|
+
10 => { r: false, c: 'LIC_RATE_EXCEEDED', m: 'Rate exceeds the cap imposed by license', a: 'Rate exceeds cap imposed by license'},
|
18
|
+
11 => { r: false, c: 'INTERNAL_ERROR', m: 'Internal error (unexpected error)', a: 'Internal error'},
|
19
|
+
12 => { r: true, c: 'TRANSFER_ERROR', m: 'Error establishing control connection', a: 'Error establishing SSH connection (check SSH port and firewall)'},
|
20
|
+
13 => { r: true, c: 'TRANSFER_TIMEOUT', m: 'Timeout establishing control connection', a: 'Timeout establishing SSH connection (check SSH port and firewall)'},
|
21
|
+
14 => { r: true, c: 'CONNECTION_ERROR', m: 'Error establishing data connection', a: 'Error establishing UDP connection (check UDP port and firewall)'},
|
22
|
+
15 => { r: true, c: 'CONNECTION_TIMEOUT', m: 'Timeout establishing data connection', a: 'Timeout establishing UDP connection (check UDP port and firewall)'},
|
23
|
+
16 => { r: true, c: 'CONNECTION_LOST', m: 'Connection lost', a: 'Connection lost'},
|
24
|
+
17 => { r: true, c: 'RCVR_SEND_ERROR', m: 'Receiver fails to send feedback', a: 'Network failure (receiver can\'t send feedback)'},
|
25
|
+
18 => { r: true, c: 'RCVR_RECV_ERROR', m: 'Receiver fails to receive data packets', a: 'Network failure (receiver can\'t receive UDP data)'},
|
26
|
+
19 => { r: false, c: 'AUTH', m: 'Authentication failure', a: 'Authentication failure'},
|
27
|
+
20 => { r: false, c: 'NOTHING', m: 'Nothing to transfer', a: 'Nothing to transfer'},
|
28
|
+
21 => { r: false, c: 'NOT_REGULAR', m: 'Not a regular file (special file)', a: 'Not a regular file'},
|
29
|
+
22 => { r: false, c: 'FILE_TABLE_OVR', m: 'File table overflow', a: 'File table overflow'},
|
30
|
+
23 => { r: true, c: 'TOO_MANY_FILES', m: 'Too many files open', a: 'Too many files open'},
|
31
|
+
24 => { r: false, c: 'FILE_TOO_BIG', m: 'File too big for file system', a: 'File too big for filesystem'},
|
32
|
+
25 => { r: false, c: 'NO_SPACE_LEFT', m: 'No space left on disk', a: 'No space left on disk'},
|
33
|
+
26 => { r: false, c: 'READ_ONLY_FS', m: 'Read only file system', a: 'Read only filesystem'},
|
34
|
+
27 => { r: false, c: 'SOME_FILE_ERRS', m: 'Some individual files failed', a: 'One or more files failed'},
|
35
|
+
28 => { r: false, c: 'USER_CANCEL', m: 'Cancelled by user', a: 'Cancelled by user'},
|
36
|
+
29 => { r: false, c: 'LIC_NOLIC', m: 'License not found or unable to access', a: 'Unable to access license info'},
|
37
|
+
30 => { r: false, c: 'LIC_EXPIRED', m: 'License expired', a: 'License expired'},
|
38
|
+
31 => { r: false, c: 'SOCK_SETUP', m: 'Unable to setup socket (create, bind, etc ...)', a: 'Unable to set up socket'},
|
39
|
+
32 => { r: true, c: 'OUT_OF_MEMORY', m: 'Out of memory, unable to allocate', a: 'Out of memory'},
|
40
|
+
33 => { r: true, c: 'THREAD_SPAWN', m: 'Can\'t spawn thread', a: 'Unable to spawn thread'},
|
41
|
+
34 => { r: false, c: 'UNAUTHORIZED', m: 'Unauthorized by external auth server', a: 'Unauthorized'},
|
42
|
+
35 => { r: true, c: 'DISK_READ', m: 'Error reading source file from disk', a: 'Disk read error'},
|
43
|
+
36 => { r: true, c: 'DISK_WRITE', m: 'Error writing to disk', a: 'Disk write error'},
|
44
|
+
37 => { r: true, c: 'AUTHORIZATION', m: 'Used interchangeably with ERR_UNAUTHORIZED', a: 'Authorization failure'},
|
45
|
+
38 => { r: false, c: 'LIC_ILLEGAL', m: 'Operation not permitted by license', a: 'Operation not permitted by license'},
|
46
|
+
39 => { r: true, c: 'PEER_ABORTED_SESSION', m: 'Remote peer terminated session', a: 'Peer aborted session'},
|
47
|
+
40 => { r: true, c: 'DATA_TRANSFER_TIMEOUT', m: 'Transfer stalled, timed out', a: 'Data transfer stalled, timed out'},
|
48
|
+
41 => { r: false, c: 'BAD_PATH', m: 'Path violates docroot containment', a: 'File location is outside \'docroot\' hierarchy'},
|
49
|
+
42 => { r: false, c: 'ALREADY_EXISTS', m: 'File or directory already exists', a: 'File or directory already exists'},
|
50
|
+
43 => { r: false, c: 'STAT_FAILS', m: 'Cannot stat file', a: 'Cannot collect details about file or directory'},
|
51
|
+
44 => { r: true, c: 'PMTU_BRTT_ERROR', m: 'UDP session initiation fatal error', a: 'UDP session initiation fatal error'},
|
52
|
+
45 => { r: true, c: 'BWMEAS_ERROR', m: 'Bandwidth measurement fatal error', a: 'Bandwidth measurement fatal error'},
|
53
|
+
46 => { r: false, c: 'VLINK_ERROR', m: 'Virtual link error', a: 'Virtual link error'},
|
54
|
+
47 => { r: false, c: 'CONNECTION_ERROR_HTTP', m: 'Error establishing HTTP connection', a: 'Error establishing HTTP connection (check HTTP port and firewall)'},
|
55
|
+
48 => { r: false, c: 'FILE_ENCRYPTION_ERROR', m: 'File encryption error, e.g. corrupt file', a: 'File encryption/decryption error, e.g. corrupt file'},
|
56
|
+
49 => { r: false, c: 'FILE_DECRYPTION_PASS', m: 'File encryption/decryption error, e.g. corrupt file', a: 'File decryption error, bad passphrase'},
|
57
|
+
50 => { r: false, c: 'BAD_CONFIGURATION', m: 'Aspera.conf contains invalid data and was rejected', a: 'Invalid configuration'},
|
58
|
+
51 => { r: false, c: 'INSECURE_CONNECTION', m: 'Remote-host key check failure', a: 'Remote host is not who we expected'},
|
59
|
+
52 => { r: false, c: 'START_VALIDATION_FAILED', m: 'File start validation failed', a: 'File start validation failed'},
|
60
|
+
53 => { r: false, c: 'STOP_VALIDATION_FAILED', m: 'File stop validation failed', a: 'File stop validation failed'},
|
61
|
+
54 => { r: false, c: 'THRESHOLD_VALIDATION_FAILED',m: 'File threshold validation failed', a: 'File threshold validation failed'},
|
62
|
+
55 => { r: false, c: 'FILEPATH_TOO_LONG', m: 'File path/name too long for underlying file system', a: 'File path exceeds underlying file system limit'},
|
63
|
+
56 => { r: false, c: 'ILLEGAL_CHARS_IN_PATH', m: 'Windows path contains illegal characters', a: 'Path being written to Windows file system contains illegal characters'},
|
64
|
+
57 => { r: false, c: 'CHUNK_MUST_MATCH_ALIGNMENT', m: 'Chunk size/start must be aligned with storage', a: 'Chunk size/start must be aligned with storage'},
|
65
|
+
58 => { r: false, c: 'VALIDATION_SESSION_ABORT', m: 'Session aborted to due to validation error', a: 'Session aborted to due validation error'},
|
66
|
+
59 => { r: false, c: 'REMOTE_STORAGE_ERROR', m: 'Remote storage errored', a: 'Remote storage errored'},
|
67
|
+
60 => { r: false, c: 'LUA_SCRIPT_ABORTED_SESSION', m: 'Session aborted due to Lua script abort', a: 'Session aborted due to Lua script abort'},
|
68
|
+
61 => { r: true, c: 'SSEAR_RETRYABLE', m: 'Transfer failed because of a retryable Encryption at Rest error', a: 'Transfer failed because of a retryable Encryption at Rest error'},
|
69
|
+
62 => { r: false, c: 'SSEAR_FATAL', m: 'Transfer failed because of a fatal Encryption at Rest error', a: 'Transfer failed because of a fatal Encryption at Rest error'},
|
70
|
+
63 => { r: false, c: 'LINK_LOOP', m: 'Path refers to a symbolic link loop', a: 'Path refers to a symbolic link loop'},
|
71
|
+
64 => { r: false, c: 'CANNOT_RENAME_PARTIAL_FILES',m: 'Can\'t rename a partial file', a: 'Can\'t rename a partial file.'},
|
72
|
+
65 => { r: false, c: 'CIPHER_NON_COMPAT_FIPS', m: 'Can\'t use this cipher with FIPS mode enabled', a: 'Can\'t use this cipher with FIPS mode enabled'},
|
73
|
+
66 => { r: false, c: 'PEER_REQUIRES_FIPS', m: 'Peer rejects cipher due to FIPS mode enabled on peer', a: 'Peer rejects cipher due to FIPS mode enabled on peer'}
|
58
74
|
}
|
59
75
|
end
|
60
76
|
end
|