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