1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: ssl_Result.h 4 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 5 These coded instructions, statements, and computer programs contain 6 proprietary information of Nintendo of America Inc. and/or Nintendo 7 Company Ltd., and are protected by Federal copyright law. They may 8 not be disclosed to third parties or copied or duplicated in any form, 9 in whole or in part, without the prior written consent of Nintendo. 10 $Rev: 31762 $ 11 *--------------------------------------------------------------------------- 12 13 14 */ 15 16 #ifndef NN_SSL_SSL_RESULT_H_ 17 #define NN_SSL_SSL_RESULT_H_ 18 19 #include <nn/Result.h> 20 #include <nn/net/compatible/nssl.h> 21 22 //Macro to convert NHTTP library Result code to HTTP ResultCode. 23 #define CHANGE_NSSL_RESULT_CODE_MASK 0x000003ff 24 #define CHANGE_NSSL_RESULT_CODE(nhttpCode) \ 25 (nhttpCode) & (CHANGE_NSSL_RESULT_CODE_MASK) 26 27 /* Please see man pages for details 28 29 30 */ 31 32 /* Please see man pages for details 33 34 */ 35 enum NnSslResultCode 36 { 37 /* SSL processing related */ 38 NNSSL_ENONE = CHANGE_NSSL_RESULT_CODE(NSSL_ENONE), // 39 NNSSL_EFAILED = CHANGE_NSSL_RESULT_CODE(NSSL_EFAILED), // 40 NNSSL_EWANT_READ = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_READ), // 41 NNSSL_EWANT_WRITE = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_WRITE), // 42 NNSSL_ESYSCALL = CHANGE_NSSL_RESULT_CODE(NSSL_ESYSCALL), // 43 NNSSL_EZERO_RETURN = CHANGE_NSSL_RESULT_CODE(NSSL_EZERO_RETURN), // 44 NNSSL_EWANT_CONNECT = CHANGE_NSSL_RESULT_CODE(NSSL_EWANT_CONNECT), // 45 NNSSL_ESSLID = CHANGE_NSSL_RESULT_CODE(NSSL_ESSLID), // 46 NNSSL_EVERIFY_COMMON_NAME = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_COMMON_NAME), // 47 NNSSL_EVERIFY_ROOT_CA = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_ROOT_CA), // 48 NNSSL_EVERIFY_CHAIN = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_CHAIN), // 49 NNSSL_EVERIFY_DATE = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_DATE), // 50 NNSSL_EGET_SERVER_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EGET_SERVER_CERT), // 51 NNSSL_EVERIFY_REVOKED_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_REVOKED_CERT), // 52 NNSSL_ESTATE = CHANGE_NSSL_RESULT_CODE(NSSL_ESTATE), // 53 NNSSL_ERANDOM = CHANGE_NSSL_RESULT_CODE(NSSL_ERANDOM), // 54 NNSSL_EVERIFY_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_EVERIFY_SERVER_CERT), // 55 NNSSL_ECERT_BUF_ALREADY_SET = CHANGE_NSSL_RESULT_CODE(NSSL_ECERT_BUF_ALREADY_SET), // 56 57 /* Other error */ 58 NNSSL_ER_ALREADY_INITIALIZED = nn::Result::DESCRIPTION_ALREADY_INITIALIZED, // 59 NNSSL_ER_NOT_INITIALIZED = nn::Result::DESCRIPTION_NOT_INITIALIZED, // 60 NNSSL_ER_OUT_OF_MEMORY = nn::Result::DESCRIPTION_OUT_OF_MEMORY, // 61 NNSSL_ER_NOT_ASSIGN_SERVER = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(50)), // 62 NNSSL_ER_ALREADY_ASSIGN_SERVER = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(51)), // 63 NNSSL_ER_IPC_SESSION = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(52)), // 64 NNSSL_ER_CONN_PROCESS_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(53)), // 65 NNSSL_ER_FAIL_TO_CREATE_CERT_STORE = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(54)), // 66 NNSSL_ER_FAIL_TO_CREATE_CRL_STORE = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(55)), // 67 NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(56)), // 68 NNSSL_ER_INVALID_PARAM = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(57)), // 69 NNSSL_ER_CLIENT_PROCESS_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(58)), // 70 NNSSL_ER_IPC_SESSION_MAX = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(59)), // 71 NNSSL_ER_INTERNAL_CERT = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(60)), // 72 NNSSL_ER_INTERNAL_CRL = CHANGE_NSSL_RESULT_CODE(NSSL_ERROR_CODE(61)) // 73 }; 74 75 /* 76 77 */ 78 79 80 #ifdef __cplusplus 81 82 namespace nn { 83 namespace ssl { 84 /* Please see man pages for details 85 86 87 */ 88 enum ResultCode 89 { 90 /* SSL processing related */ 91 ENONE = NNSSL_ENONE, // 92 EFAILED = NNSSL_EFAILED, // 93 EWANT_READ = NNSSL_EWANT_READ, // 94 EWANT_WRITE = NNSSL_EWANT_WRITE, // 95 ESYSCALL = NNSSL_ESYSCALL, // 96 EZERO_RETURN = NNSSL_EZERO_RETURN, // 97 EWANT_CONNECT = NNSSL_EWANT_CONNECT, // 98 ESSLID = NNSSL_ESSLID, // 99 EVERIFY_COMMON_NAME = NNSSL_EVERIFY_COMMON_NAME, // 100 EVERIFY_ROOT_CA = NNSSL_EVERIFY_ROOT_CA, // 101 EVERIFY_CHAIN = NNSSL_EVERIFY_CHAIN, // 102 EVERIFY_DATE = NNSSL_EVERIFY_DATE, // 103 EGET_SERVER_CERT = NNSSL_EGET_SERVER_CERT, // 104 EVERIFY_REVOKED_CERT = NNSSL_EVERIFY_REVOKED_CERT, // 105 ESTATE = NNSSL_ESTATE, // 106 ERANDOM = NNSSL_ERANDOM, // 107 EVERIFY_CERT = NNSSL_EVERIFY_CERT, // 108 ECERT_BUF_ALREADY_SET = NNSSL_ECERT_BUF_ALREADY_SET, // 109 110 111 /* Other error */ 112 ER_ALREADY_INITIALIZED = NNSSL_ER_ALREADY_INITIALIZED, // 113 ER_NOT_INITIALIZED = NNSSL_ER_NOT_INITIALIZED, // 114 ER_OUT_OF_MEMORY = NNSSL_ER_OUT_OF_MEMORY, // 115 ER_NOT_ASSIGN_SERVER = NNSSL_ER_NOT_ASSIGN_SERVER, // 116 ER_ALREADY_ASSIGN_SERVER = NNSSL_ER_ALREADY_ASSIGN_SERVER, // 117 ER_IPC_SESSION = NNSSL_ER_IPC_SESSION, // 118 ER_CONN_PROCESS_MAX = NNSSL_ER_CONN_PROCESS_MAX, // 119 ER_FAIL_TO_CREATE_CERT_STORE = NNSSL_ER_FAIL_TO_CREATE_CERT_STORE, // 120 ER_FAIL_TO_CREATE_CRL_STORE = NNSSL_ER_FAIL_TO_CREATE_CRL_STORE, // 121 ER_FAIL_TO_CREATE_CLIENT_CERT = NNSSL_ER_FAIL_TO_CREATE_CLIENT_CERT, // 122 ER_INVALID_PARAM = NNSSL_ER_INVALID_PARAM, // 123 ER_CLIENT_PROCESS_MAX = NNSSL_ER_CLIENT_PROCESS_MAX, // 124 ER_IPC_SESSION_MAX = NNSSL_ER_IPC_SESSION_MAX, // 125 ER_INTERNAL_CERT = NNSSL_ER_INTERNAL_CERT, // 126 ER_INTERNAL_CRL = NNSSL_ER_INTERNAL_CRL // 127 }; 128 129 namespace detail { 130 /* Please see man pages for details 131 132 133 134 135 */ 136 NN_DEFINE_RESULT_FUNC_LM(MakePermanentResult, Result::LEVEL_PERMANENT, Result::MODULE_NN_SSL); 137 138 139 /* Please see man pages for details 140 141 142 143 */ ChangeNsslRetCodeToResult(ResultCode returnCode)144 inline Result ChangeNsslRetCodeToResult(ResultCode returnCode) 145 { 146 if(returnCode == ENONE) 147 { 148 return ResultSuccess(); 149 } 150 else if((returnCode == EWANT_READ) || (returnCode == EWANT_WRITE) || (returnCode == EWANT_CONNECT)) 151 { 152 return detail::MakePermanentResult(Result::SUMMARY_WOULD_BLOCK, returnCode); 153 } 154 else if(returnCode == ER_INVALID_PARAM) 155 { 156 return detail::MakePermanentResult(Result::SUMMARY_INVALID_ARGUMENT, returnCode); 157 } 158 else 159 { 160 return detail::MakePermanentResult(Result::SUMMARY_INVALID_STATE, returnCode); 161 } 162 } 163 164 /* Please see man pages for details 165 166 167 168 */ ChangeNsslRetCodeToResult(s32 returnCode)169 inline Result ChangeNsslRetCodeToResult(s32 returnCode) 170 { 171 return ChangeNsslRetCodeToResult(static_cast<ResultCode>(CHANGE_NSSL_RESULT_CODE(returnCode))); 172 } 173 } 174 175 176 /* Please see man pages for details 177 178 179 180 */ 181 NN_DEFINE_RESULT_CONST_LM( 182 ResultProtocolFailedErr, 183 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EFAILED 184 ); 185 186 /* Please see man pages for details 187 188 189 190 */ 191 NN_DEFINE_RESULT_CONST_LM( 192 ResultWantRead, 193 detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_READ 194 ); 195 196 /* Please see man pages for details 197 198 199 200 */ 201 NN_DEFINE_RESULT_CONST_LM( 202 ResultWantWrite, 203 detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_WRITE 204 ); 205 206 /* Please see man pages for details 207 208 209 210 */ 211 NN_DEFINE_RESULT_CONST_LM( 212 ResultSystemCallErr, 213 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESYSCALL 214 ); 215 216 217 /* Please see man pages for details 218 219 220 221 */ 222 NN_DEFINE_RESULT_CONST_LM( 223 ResultSocketZeroReturn, 224 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EZERO_RETURN 225 ); 226 227 /* Please see man pages for details 228 229 230 231 */ 232 NN_DEFINE_RESULT_CONST_LM( 233 ResultWantConnect, 234 detail::MakePermanentResult, Result::SUMMARY_WOULD_BLOCK, EWANT_CONNECT 235 ); 236 237 /* Please see man pages for details 238 239 240 241 */ 242 NN_DEFINE_RESULT_CONST_LM( 243 ResultInternalSslIdErr, 244 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESSLID 245 ); 246 247 /* Please see man pages for details 248 249 250 251 */ 252 NN_DEFINE_RESULT_CONST_LM( 253 ResultFailToGetServerCert, 254 detail::MakePermanentResult, Result::SUMMARY_SUCCESS, EGET_SERVER_CERT 255 ); 256 257 /* Please see man pages for details 258 259 260 261 */ 262 NN_DEFINE_RESULT_CONST_LM( 263 ResultVerifyCertRevokedErr, 264 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_REVOKED_CERT 265 ); 266 267 /* Please see man pages for details 268 269 270 271 */ 272 NN_DEFINE_RESULT_CONST_LM( 273 ResultLibraryStateErr, 274 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ESTATE 275 ); 276 277 /* Please see man pages for details 278 279 280 281 */ 282 NN_DEFINE_RESULT_CONST_LM( 283 ResultRandomErr, 284 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ERANDOM 285 ); 286 287 /* Please see man pages for details 288 289 290 291 */ 292 NN_DEFINE_RESULT_CONST_LM( 293 ResultVerifyCertErr, 294 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, EVERIFY_CERT 295 ); 296 297 /* Please see man pages for details 298 299 300 301 */ 302 NN_DEFINE_RESULT_CONST_LM( 303 ResultAlreadyInitializedErr, 304 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_INITIALIZED 305 ); 306 307 /* Please see man pages for details 308 309 310 311 */ 312 NN_DEFINE_RESULT_CONST_LM( 313 ResultNotInitializedErr, 314 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_INITIALIZED 315 ); 316 317 /* Please see man pages for details 318 319 320 321 */ 322 NN_DEFINE_RESULT_CONST_LM( 323 ResultOutOfMemoryErr, 324 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_OUT_OF_MEMORY 325 ); 326 327 /* Please see man pages for details 328 329 330 331 */ 332 NN_DEFINE_RESULT_CONST_LM( 333 ResultNotAssignServerErr, 334 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_NOT_ASSIGN_SERVER 335 ); 336 337 338 /* Please see man pages for details 339 340 341 342 */ 343 NN_DEFINE_RESULT_CONST_LM( 344 ResultAlreadyAssignServerErr, 345 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_ALREADY_ASSIGN_SERVER 346 ); 347 348 /* Please see man pages for details 349 350 351 352 */ 353 NN_DEFINE_RESULT_CONST_LM( 354 ResultIpcSessionErr, 355 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION 356 ); 357 358 /* Please see man pages for details 359 360 361 362 */ 363 NN_DEFINE_RESULT_CONST_LM( 364 ResultProcessConnectionMaxErr, 365 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CONN_PROCESS_MAX 366 ); 367 368 /* Please see man pages for details 369 370 371 372 */ 373 NN_DEFINE_RESULT_CONST_LM( 374 ResultFailToCreateCertStoreErr, 375 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CERT_STORE 376 ); 377 378 /* Please see man pages for details 379 380 381 382 */ 383 NN_DEFINE_RESULT_CONST_LM( 384 ResultFailToCreateCrlStoreErr, 385 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CRL_STORE 386 ); 387 388 389 /* Please see man pages for details 390 391 392 393 */ 394 NN_DEFINE_RESULT_CONST_LM( 395 ResultFailToCreateClientCertErr, 396 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_FAIL_TO_CREATE_CLIENT_CERT 397 ); 398 399 /* Please see man pages for details 400 401 402 403 */ 404 NN_DEFINE_RESULT_CONST_LM( 405 ResultInvalidParamErr, 406 detail::MakePermanentResult, Result::SUMMARY_INVALID_ARGUMENT, ER_INVALID_PARAM 407 ); 408 409 /* Please see man pages for details 410 411 412 413 */ 414 NN_DEFINE_RESULT_CONST_LM( 415 ResultNotImplementedErr, 416 detail::MakePermanentResult, Result::SUMMARY_INTERNAL, nn::Result::DESCRIPTION_NOT_IMPLEMENTED 417 ); 418 419 /* Please see man pages for details 420 421 422 423 */ 424 NN_DEFINE_RESULT_CONST_LM( 425 ResultClientProcessMaxErr, 426 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_CLIENT_PROCESS_MAX 427 ); 428 429 /* Please see man pages for details 430 431 432 433 */ 434 NN_DEFINE_RESULT_CONST_LM( 435 ResultIpcSessionMaxErr, 436 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_IPC_SESSION_MAX 437 ); 438 439 /* Please see man pages for details 440 441 442 443 */ 444 NN_DEFINE_RESULT_CONST_LM( 445 ResultInternalCertErr, 446 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CERT 447 ); 448 449 /* Please see man pages for details 450 451 452 453 */ 454 NN_DEFINE_RESULT_CONST_LM( 455 ResultInternalCrlErr, 456 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ER_INTERNAL_CRL 457 ); 458 459 /* Please see man pages for details 460 461 462 463 */ 464 NN_DEFINE_RESULT_CONST_LM( 465 ResultServerCertBufAlreadySetErr, 466 detail::MakePermanentResult, Result::SUMMARY_INVALID_STATE, ECERT_BUF_ALREADY_SET 467 ); 468 } // end of namespace ssl 469 } // end of namespace nn 470 471 #endif // __cplusplus 472 473 474 #endif /* NN_SSL_SSL_RESULT_H_ */ 475