// This file is part of BOINC.
// http://boinc.berkeley.edu
// Copyright (C) 2008 University of California
//
// BOINC is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License
// as published by the Free Software Foundation,
// either version 3 of the License, or (at your option) any later version.
//
// BOINC is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with BOINC.  If not, see <http://www.gnu.org/licenses/>.

#ifndef _ERROR_NUMBERS_H_
#define _ERROR_NUMBERS_H_

// The following are process exit codes (not function return values).
// They are used by the core client and apps.
// NOTE: Unix passes only 8 bits of exit code,
// and Unix uses roughly 1-137, so let's start at 192

#define EXIT_STATEFILE_WRITE        192
    // client exit when can't write statefile
#define EXIT_SIGNAL                 193
    // app was killed by signal
#define EXIT_ABORTED_BY_CLIENT      194
#define EXIT_CHILD_FAILED           195
#define EXIT_DISK_LIMIT_EXCEEDED    196
#define EXIT_TIME_LIMIT_EXCEEDED    197
#define EXIT_MEM_LIMIT_EXCEEDED     198
#define EXIT_CLIENT_EXITING         199
#define EXIT_UNSTARTED_LATE         200
#define EXIT_MISSING_COPROC         201
#define EXIT_ABORTED_BY_PROJECT     202
#define EXIT_ABORTED_VIA_GUI        203
#define EXIT_UNKNOWN                204
#define EXIT_OUT_OF_MEMORY          205

// Function return values.
// NOTE:  add new errors to the end of the list and don't change
// old error numbers to avoid confusion between versions.
// Add a text description of your error to boincerror() in util.C.
//
#define BOINC_SUCCESS       0
#define ERR_SELECT          -100
#define ERR_MALLOC          -101
#define ERR_READ            -102
#define ERR_WRITE           -103
#define ERR_FREAD           -104
#define ERR_FWRITE          -105
#define ERR_IO              -106
#define ERR_CONNECT         -107
#define ERR_FOPEN           -108
#define ERR_RENAME          -109
#define ERR_UNLINK          -110
#define ERR_OPENDIR         -111
#define ERR_XML_PARSE       -112
    // Unexpected XML tag or XML format
#define ERR_GETHOSTBYNAME   -113
    // Couldn't resolve hostname
#define ERR_GIVEUP_DOWNLOAD -114
    // too much time has elapsed without progress on file xfer,
    // or we got a 404 (not found) status code from server
#define ERR_GIVEUP_UPLOAD   -115
#define ERR_NULL            -116
    // unexpected NULL pointer
#define ERR_NEG             -117
    // unexpected negative value
#define ERR_BUFFER_OVERFLOW -118
    // caught buffer overflow
#define ERR_MD5_FAILED      -119
    // MD5 checksum failed for a file
#define ERR_RSA_FAILED      -120
    // RSA key check failed for a file
#define ERR_OPEN            -121
#define ERR_DUP2            -122
#define ERR_NO_SIGNATURE    -123
#define ERR_THREAD          -124
    // Error creating a thread
#define ERR_SIGNAL_CATCH    -125
#define ERR_BAD_FORMAT      -126
#define ERR_UPLOAD_TRANSIENT    -127
#define ERR_UPLOAD_PERMANENT    -128
#define ERR_IDLE_PERIOD     -129
    // can't start work because of user prefs
#define ERR_ALREADY_ATTACHED    -130
#define ERR_FILE_TOO_BIG    -131
    // an output file was bigger than max_nbytes
#define ERR_GETRUSAGE       -132
    // getrusage failed
#define ERR_BENCHMARK_FAILED -133
#define ERR_BAD_HEX_FORMAT  -134
    // hex-format key data is bad
#define ERR_GETADDRINFO     -135
#define ERR_DB_NOT_FOUND    -136
    // no rows found in lookup() or enumerate()
#define ERR_DB_NOT_UNIQUE   -137
    // not unique in lookup()
#define ERR_DB_CANT_CONNECT -138
#define ERR_GETS            -139
    // gets() or fgets()
#define ERR_SCANF           -140
    // scanf() or fscanf()
#define ERR_READDIR         -143
#define ERR_SHMGET          -144
#define ERR_SHMCTL          -145
#define ERR_SHMAT           -146
#define ERR_FORK            -147
#define ERR_EXEC            -148
#define ERR_NOT_EXITED      -149
    // a process didn't exit that was supposed to
#define ERR_NOT_IMPLEMENTED -150
    // a system call not implemented on this platform
#define ERR_GETHOSTNAME     -151
#define ERR_NETOPEN         -152
#define ERR_SOCKET          -153
#define ERR_FCNTL           -154
#define ERR_AUTHENTICATOR   -155
    // scheduler request host ID doesn't match authenticator
#define ERR_SCHED_SHMEM     -156
    // sched shmem has bad contents
#define ERR_ASYNCSELECT     -157
#define ERR_BAD_RESULT_STATE    -158
#define ERR_DB_CANT_INIT    -159
#define ERR_NOT_UNIQUE       -160
    // state files had redundant entries
#define ERR_NOT_FOUND        -161
    // inconsistent client state
#define ERR_NO_EXIT_STATUS   -162
    // exit_status not found in scheduler request 
#define ERR_FILE_MISSING    -163
#define ERR_SEMGET          -165
#define ERR_SEMCTL          -166
#define ERR_SEMOP           -167
#define ERR_FTOK            -168
#define ERR_SOCKS_UNKNOWN_FAILURE -169
#define ERR_SOCKS_REQUEST_FAILED  -170
#define ERR_SOCKS_BAD_USER_PASS   -171
#define ERR_SOCKS_UNKNOWN_SERVER_VERSION -172
#define ERR_SOCKS_UNSUPPORTED     -173
#define ERR_SOCKS_CANT_REACH_HOST -174
#define ERR_SOCKS_CONN_REFUSED    -175
#define ERR_TIMER_INIT            -176
#define ERR_INVALID_PARAM   -178
#define ERR_SIGNAL_OP       -179
#define ERR_BIND            -180
#define ERR_LISTEN          -181
#define ERR_TIMEOUT         -182
#define ERR_PROJECT_DOWN    -183
#define ERR_HTTP_TRANSIENT  -184
    // HTTP errors other than 404 and 416
#define ERR_RESULT_START    -185
#define ERR_RESULT_DOWNLOAD -186
#define ERR_RESULT_UPLOAD   -187
#define ERR_BAD_USER_NAME   -188
#define ERR_INVALID_URL     -189
#define ERR_MAJOR_VERSION   -190
#define ERR_NO_OPTION       -191
#define ERR_MKDIR           -192
#define ERR_INVALID_EVENT   -193
#define ERR_ALREADY_RUNNING -194
#define ERR_NO_APP_VERSION  -195
#define ERR_WU_USER_RULE    -196
#define ERR_ABORTED_VIA_GUI -197
#define ERR_INSUFFICIENT_RESOURCE   -198
#define ERR_RETRY           -199
#define ERR_WRONG_SIZE      -200
#define ERR_USER_PERMISSION -201
    // e.g. user didn't allow network connection
#define ERR_SHMEM_NAME      -202
#define ERR_NO_NETWORK_CONNECTION -203
#define ERR_IN_PROGRESS     -204
#define ERR_BAD_EMAIL_ADDR  -205
#define ERR_BAD_PASSWD      -206
#define ERR_NONUNIQUE_EMAIL -207
#define ERR_ACCT_CREATION_DISABLED  -208
#define ERR_ATTACH_FAIL_INIT       -209
#define ERR_ATTACH_FAIL_DOWNLOAD   -210
#define ERR_ATTACH_FAIL_PARSE      -211
#define ERR_ATTACH_FAIL_BAD_KEY    -212
#define ERR_ATTACH_FAIL_FILE_WRITE -213
#define ERR_ATTACH_FAIL_SERVER_ERROR -214
#define ERR_SIGNING_KEY             -215
#define ERR_FFLUSH          -216 
#define ERR_FSYNC           -217
#define ERR_TRUNCATE        -218
#define ERR_WRONG_URL       -219
#define ERR_DUP_NAME        -220
#define ERR_GETGRNAM        -222
#define ERR_CHOWN           -223
#define ERR_HTTP_PERMANENT  -224
    // represents HTTP 404 or 416 error
#define ERR_BAD_FILENAME    -225
#define ERR_TOO_MANY_EXITS  -226
#define ERR_RMDIR           -227
#define ERR_SYMLINK         -229
#define ERR_DB_CONN_LOST    -230
#define ERR_CRYPTO          -231
#define ERR_ABORTED_ON_EXIT -232
#define ERR_PROC_PARSE      -235
#define ERR_STATFS          -236
#define ERR_PIPE            -237
#define ERR_NEED_HTTPS      -238

// PLEASE: add a text description of your error to 
// the text description function boincerror() in str_util.cpp.

// returns short text description of error corresponding to
// int errornumber from error_numbers.h
//
extern const char* boincerror(int which_error);

#endif
