1package mega
2
3import (
4	"errors"
5	"fmt"
6)
7
8var (
9	// General errors
10	EINTERNAL  = errors.New("Internal error occured")
11	EARGS      = errors.New("Invalid arguments")
12	EAGAIN     = errors.New("Try again")
13	ERATELIMIT = errors.New("Rate limit reached")
14	EBADRESP   = errors.New("Bad response from server")
15
16	// Upload errors
17	EFAILED  = errors.New("The upload failed. Please restart it from scratch")
18	ETOOMANY = errors.New("Too many concurrent IP addresses are accessing this upload target URL")
19	ERANGE   = errors.New("The upload file packet is out of range or not starting and ending on a chunk boundary")
20	EEXPIRED = errors.New("The upload target URL you are trying to access has expired. Please request a fresh one")
21
22	// Filesystem/Account errors
23	ENOENT              = errors.New("Object (typically, node or user) not found")
24	ECIRCULAR           = errors.New("Circular linkage attempted")
25	EACCESS             = errors.New("Access violation")
26	EEXIST              = errors.New("Trying to create an object that already exists")
27	EINCOMPLETE         = errors.New("Trying to access an incomplete resource")
28	EKEY                = errors.New("A decryption operation failed")
29	ESID                = errors.New("Invalid or expired user session, please relogin")
30	EBLOCKED            = errors.New("User blocked")
31	EOVERQUOTA          = errors.New("Request over quota")
32	ETEMPUNAVAIL        = errors.New("Resource temporarily not available, please try again later")
33	EMACMISMATCH        = errors.New("MAC verification failed")
34	EBADATTR            = errors.New("Bad node attribute")
35	ETOOMANYCONNECTIONS = errors.New("Too many connections on this resource.")
36	EWRITE              = errors.New("File could not be written to (or failed post-write integrity check).")
37	EREAD               = errors.New("File could not be read from (or changed unexpectedly during reading).")
38	EAPPKEY             = errors.New("Invalid or missing application key.")
39	ESSL                = errors.New("SSL verification failed")
40	EGOINGOVERQUOTA     = errors.New("Not enough quota")
41	EMFAREQUIRED        = errors.New("Multi-factor authentication required")
42
43	// Config errors
44	EWORKER_LIMIT_EXCEEDED = errors.New("Maximum worker limit exceeded")
45)
46
47type ErrorMsg int
48
49func parseError(errno ErrorMsg) error {
50	switch {
51	case errno == 0:
52		return nil
53	case errno == -1:
54		return EINTERNAL
55	case errno == -2:
56		return EARGS
57	case errno == -3:
58		return EAGAIN
59	case errno == -4:
60		return ERATELIMIT
61	case errno == -5:
62		return EFAILED
63	case errno == -6:
64		return ETOOMANY
65	case errno == -7:
66		return ERANGE
67	case errno == -8:
68		return EEXPIRED
69	case errno == -9:
70		return ENOENT
71	case errno == -10:
72		return ECIRCULAR
73	case errno == -11:
74		return EACCESS
75	case errno == -12:
76		return EEXIST
77	case errno == -13:
78		return EINCOMPLETE
79	case errno == -14:
80		return EKEY
81	case errno == -15:
82		return ESID
83	case errno == -16:
84		return EBLOCKED
85	case errno == -17:
86		return EOVERQUOTA
87	case errno == -18:
88		return ETEMPUNAVAIL
89	case errno == -19:
90		return ETOOMANYCONNECTIONS
91	case errno == -20:
92		return EWRITE
93	case errno == -21:
94		return EREAD
95	case errno == -22:
96		return EAPPKEY
97	case errno == -23:
98		return ESSL
99	case errno == -24:
100		return EGOINGOVERQUOTA
101	case errno == -26:
102		return EMFAREQUIRED
103	}
104
105	return fmt.Errorf("Unknown mega error %d", errno)
106}
107