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