1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     ssl_Connection.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_CONNECTION_H_
17 #define NN_SSL_SSL_CONNECTION_H_
18 
19 #include <nn/Result.h>
20 #include <nn/Handle.h>
21 #include <nn/os.h>
22 #include <nn/util/util_NonCopyable.h>
23 #include <nn/ssl/ssl_Const.h>
24 #include <nn/ssl/ssl_Types.h>
25 #include <nn/ssl/ssl_CertStore.h>
26 #include <nn/ssl/ssl_CrlStore.h>
27 #include <nn/ssl/ssl_ClientCert.h>
28 #include <nn/ssl/ssl_ConnectionIpc.h>
29 
30 
31 #ifdef __cplusplus
32 
33 
34 namespace nn {
35 namespace ssl {
36 
37 
38 /* Please see man pages for details
39 
40 */
41 class Connection : private nn::util::NonCopyable<Connection>
42 {
43 public:
44 
45     //----------------------------------------
46     //
47     //@{
48 
49     /* Please see man pages for details
50 
51 
52     */
53     explicit Connection(s32 socketDesc);
54 
55     /* Please see man pages for details
56 
57     */
58     explicit Connection();
59 
60     /* Please see man pages for details
61 
62     */
63     virtual ~Connection(void);
64 
65     /* Please see man pages for details
66 
67 
68 
69 
70     */
71     bool AssignSocket(s32 socketDesc);
72 
73     /* Please see man pages for details
74 
75 
76 
77 
78 
79 
80 
81 
82 
83     */
84     nn::Result SetServerCertBuffer(uptr bufferAddress, size_t bufferSize);
85 
86     /* Please see man pages for details
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103                                                                                        
104 
105 
106 
107 
108 
109 
110     */
111     nn::Result Initialize(const char* pServerName, u32 verifyOpt = VERIFY_NONE);
112 
113     /* Please see man pages for details
114 
115     */
116     nn::Result AssignServer(const char* pServerName, u32 verifyOpt = VERIFY_NONE){return Initialize(pServerName, verifyOpt);}
117 
118     /* Please see man pages for details
119 
120 
121 
122 
123 
124 
125 
126 
127     */
128     nn::Result Shutdown(void);
129 
130     //@}
131 
132 
133     //----------------------------------------
134     //
135     //@{
136 
137     /* Please see man pages for details
138 
139 
140 
141 
142 
143 
144 
145 
146 
147 
148 
149 
150 
151 
152     */
153     nn::Result DoHandshake(void);
154 
155     /* Please see man pages for details
156 
157 
158 
159 
160 
161 
162 
163 
164 
165 
166     */
167     nn::Result DoHandshake( size_t* pServerCertSize, u32* pServerCertNum = NULL);
168 
169     //@}
170 
171     //----------------------------------------
172     //
173     //@{
174 
175     /* Please see man pages for details
176 
177 
178 
179 
180 
181 
182 
183 
184 
185 
186 
187 
188 
189 
190 
191 
192 
193 */
194     nn::Result Read(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL);
195 
196 
197     /* Please see man pages for details
198 
199 
200 
201 
202 
203 
204 
205 
206 
207 
208 
209 
210 
211 */
212     nn::Result Peek(u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier = NULL);
213 
214     /* Please see man pages for details
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227 
228     */
229     nn::Result Write(const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier = NULL);
230 
231     //@}
232 
233     //----------------------------------------
234     //
235     //@{
236 
237     /* Please see man pages for details
238 
239 
240 
241 
242 
243 
244 
245 
246 
247 
248 
249 
250 
251 
252 
253 
254 
255 */
256     nn::Result SetServerCertStore(CertStore& certStore);
257 
258     /* Please see man pages for details
259 
260 
261 
262 
263 
264 
265 
266     */
267     nn::Result SetClientCert(ClientCert& clientCert);
268 
269     /* Please see man pages for details
270 
271 
272 
273 
274 
275 
276 
277     */
278     nn::Result SetCRLStore(CrlStore& crlStore);
279 
280     /* Please see man pages for details
281 
282 
283 
284 
285 
286 
287 
288      */
289     nn::Result AddEVPolicyId( const char* pPolicyId );
290 
291     //@}
292 
293     /* Please see man pages for details
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308     */
309     nn::Result DisableVerifyOptionForDebug( u32 excludeVerifyOptions );
310 
311     /* Please see man pages for details
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 
323 
324 
325 
326     */
327     nn::Result GetCipherInfo( char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits );
328 
329 
330     /*
331 
332 
333 
334 
335 
336 
337 
338      */
339     nn::Result GetCertVerifyErrors( u32* pCertVerifyErrors );
340 
341 #ifdef NDEBUG_ENABLE
342     /*
343 
344 
345      */
GetConnectionHandle()346     ConnectionHandle GetConnectionHandle(){return m_connectHandle;}
347 #endif
348 
349 
350 private:
351     /* Please see man pages for details
352 
353      */
354     bool m_isAssigned;
355     NN_PADDING3;
356 
357     /* Please see man pages for details
358 
359      */
360     s32 m_socket;
361     /* Please see man pages for details
362 
363     */
364     ConnectionHandle m_connectHandle;
365 
366     /* Please see man pages for details
367 
368      */
369     nn::Handle m_privateIpcSession;
370 
371     /* Please see man pages for details
372 
373      */
374     ConnectionIpc m_privateIpcClient;
375 
376     /* Please see man pages for details
377 
378      */
379     nn::os::TransferMemoryBlock m_serverCertBuffer;
380 
381     /* Please see man pages for details
382 
383 
384     */
IsAssigned()385     bool IsAssigned(){return m_isAssigned;}
386 
387 
388     /* Please see man pages for details
389 
390 
391     */
392     Result AssignPrivateIpcClient( void );
393 
394     /* Please see man pages for details
395 
396 
397     */
398     Result ShutdownConnection( void );
399 };
400 
401 
402 } // end of namespace ssl
403 } // end of namespace nn
404 
405 
406 #endif // __cplusplus
407 
408 
409 
410 #include <nn/util/detail/util_CLibImpl.h>
411 
412 
413 /* Please see man pages for details
414 
415 
416 
417 
418 
419 
420 
421 
422 */
423 
424 /* Please see man pages for details
425 
426 
427 
428 
429 */
430 NN_UTIL_DETAIL_CLIBIMPL_DEFINE_BUFFER_CLASS(nnsslConnection, nn::ssl::Connection, 56, u32);
431 
432 /* Please see man pages for details
433 
434 */
435 NN_EXTERN_C bool nnsslConnectionAssignSocket(nnsslConnection* this_, s32 socket);
436 
437 /* Please see man pages for details
438 
439 */
440 NN_EXTERN_C nnResult nnsslConnectionAssignServer(nnsslConnection* this_, const char* pServerName, u32 verifyOpt);
441 
442 /* Please see man pages for details
443 
444 */
445 NN_EXTERN_C nnResult nnsslConnectionSetServerCertBuffer(nnsslConnection* this_, uptr bufferAddress, size_t bufferSize);
446 
447 /* Please see man pages for details
448 
449 */
450 NN_EXTERN_C nnResult nnsslConnectionShutdown(nnsslConnection* this_);
451 
452 /* Please see man pages for details
453 
454 */
455 NN_EXTERN_C nnResult nnsslConnectionDoHandshake(nnsslConnection* this_);
456 
457 /* Please see man pages for details
458 
459 */
460 NN_EXTERN_C nnResult nnsslConnectionDoHandshakeEx(nnsslConnection* this_, size_t* pServerCertSize, u32* pServerCertNum);
461 
462 /* Please see man pages for details
463 
464 */
465 NN_EXTERN_C nnResult nnsslConnectionRead(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier);
466 
467 /* Please see man pages for details
468 
469 */
470 NN_EXTERN_C nnResult nnsslConnectionPeek(nnsslConnection* this_, u8* pDataBuf, size_t dataBufSize, size_t* pReadSizeCourier);
471 
472 /* Please see man pages for details
473 
474 */
475 NN_EXTERN_C nnResult nnsslConnectionWrite(nnsslConnection* this_, const u8* pDataBuf, size_t dataBufSize, size_t* pWrittenDataSizeCourier);
476 
477 /* Please see man pages for details
478 
479 */
480 NN_EXTERN_C nnResult nnsslConnectionSetServerCertStore(nnsslConnection* this_, nnsslCertStore* certStore);
481 
482 /* Please see man pages for details
483 
484 */
485 NN_EXTERN_C nnResult nnsslConnectionSetClientCert(nnsslConnection* this_, nnsslClientCert* pClientCert);
486 
487 /* Please see man pages for details
488 
489 */
490 NN_EXTERN_C nnResult nnsslConnectionSetCRLStore(nnsslConnection* this_, nnsslCrlStore* crlStore);
491 
492 /* Please see man pages for details
493 
494 */
495 NN_EXTERN_C nnResult nnsslConnectionDisableVerifyOptionForDebug(nnsslConnection* this_, u32 excludeVerifyOptions);
496 
497 /* Please see man pages for details
498 
499 */
500 NN_EXTERN_C nnResult nnsslConnectionGetCipherInfo(nnsslConnection* this_, char* pVersionBuf, size_t versionBufSize, char* pCipherKindStrBuf, size_t cipherKindStrBufSize, s32* pAlgBits, s32* pEffectiveBits );
501 
502 /* Please see man pages for details
503 
504 */
505 NN_EXTERN_C nnResult nnsslConnectionGetCertVerifyErrors(nnsslConnection* this_, u32* pCertVerifyErrors );
506 
507 /*
508 
509 
510 
511 */
512 
513 #endif /* NN_SSL_SSL_CONNECTION_H_ */
514