1 /*--------------------------------------------------------------------------
2   Project:  Horizon
3   File:     rdt_Result.h
4 
5   Copyright (C)2010 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 25720 $
14  *-------------------------------------------------------------------------*/
15 
16 ////#include "stdafx.h"
17 
18 #ifndef NN_RDT_RESULT_H_
19 #define NN_RDT_RESULT_H_
20 
21 #include <nn/Result.h>
22 
23 
24 namespace nn { namespace rdt { namespace CTR {
25 
26 
27 enum Description
28 {
29     DESCRIPTION_RESET_RECEIVED = 1,   //!< 相手からリセット信号を受け取ったので、こちらはCLOSED状態に移行する
30     DESCRIPTION_UNTIMELY_CALL  = 2    //!< 状態に対する関数呼び出しが不適切
31 };
32 
33 
34 /*!
35   @class nn::rdt::CTR::ResultAlreadyInitialized
36   @brief 既に初期化は済んでいたので、何もせずに関数を抜けたことを示します(非エラー)。
37 
38          初期化関数を2回以上呼び出したりすると、このリザルトコードが返されることがあります。
39  */
40 NN_DEFINE_RESULT_CONST(
41     ResultAlreadyInitialized,
42     Result::LEVEL_INFO,
43     Result::SUMMARY_NOTHING_HAPPENED,
44     Result::MODULE_NN_RDT,
45     Result::DESCRIPTION_ALREADY_INITIALIZED);
46 
47 
48 /*!
49   @class nn::rdt::CTR::ResultDoNothing
50   @brief 何もせずに関数を抜けたことを示します(非エラー)。
51 
52          例えば、ゼロバイトのデータ送信を試みた場合などに、このリザルトコードが返されます。
53 */
54 NN_DEFINE_RESULT_CONST(
55     ResultDoNothing,
56     Result::LEVEL_INFO,
57     Result::SUMMARY_NOTHING_HAPPENED,
58     Result::MODULE_NN_RDT,
59     Result::DESCRIPTION_SUCCESS);
60 
61 
62 /*!
63     @class nn::rdt::CTR::ResultNotInitialized
64     @brief インスタンスが初期化されていなかったことを示します。
65 
66            ほとんどのRDT APIは、インスタンスが初期化されていなければ使用することはできません。
67            RDT APIを呼び出す前に、初期化関数を呼び出し、インスタンスを初期化して下さい。
68 */
69 NN_DEFINE_RESULT_CONST(
70     ResultNotInitialized,
71     Result::LEVEL_USAGE,
72     Result::SUMMARY_INVALID_STATE,
73     Result::MODULE_NN_RDT,
74     Result::DESCRIPTION_NOT_INITIALIZED);
75 
76 
77 /*!
78   @class nn::rdt::CTR::ResultSendBufferIsNotAvailable
79   @brief @ref Sender::Sendでデータを送信バッファに書き込もうとしましたが、送信バッファの空きが不足していたことを示します。
80 
81          送信バッファに空きを作るには、@ref Sender::Processを呼び出して下さい。
82          @ref Sender::Processは実際の送信処理を実行しますので、送信バッファにコピーされた
83          データは次第に捌けていきます(もちろん、通信相手が適切にデータを受信できていることが前提です)
84          このリザルトコードに遭遇しても、何度か@ref Sender::Processを呼び出してから
85          再び@ref Sender::Sendを試みれば、成功する可能性があります。
86  */
87 NN_DEFINE_RESULT_CONST(
88     ResultSendBufferIsNotAvailable,
89     Result::LEVEL_TEMPORARY,
90     Result::SUMMARY_OUT_OF_RESOURCE,
91     Result::MODULE_NN_RDT,
92     Result::DESCRIPTION_OUT_OF_MEMORY);
93 
94 
95 /*!
96   @class nn::rdt::CTR::ResultInvalidSize
97   @brief 引数のサイズ指定が誤っていることを示します。
98 
99          例えばバッファのサイズとして、ゼロを指定したりすると、このリザルトコードが返されます。
100  */
101 NN_DEFINE_RESULT_CONST(
102     ResultInvalidSize,
103     Result::LEVEL_USAGE,
104     Result::SUMMARY_INVALID_ARGUMENT,
105     Result::MODULE_NN_RDT,
106     Result::DESCRIPTION_INVALID_SIZE);
107 
108 
109 /*!
110   @class nn::rdt::CTR::ResultMisalignedAddress
111   @brief 引数として渡されたメモリアドレスのアライメントが誤っていたことを示します。
112 
113          RDTライブラリには、8バイトアライメントが要求される箇所があります。
114          このようなケースでは、適切にアライメントのとれたメモリアドレスを
115          渡す必要があります。
116  */
117 NN_DEFINE_RESULT_CONST(
118     ResultMisalignedAddress,
119     Result::LEVEL_USAGE,
120     Result::SUMMARY_INVALID_ARGUMENT,
121     Result::MODULE_NN_RDT,
122     Result::DESCRIPTION_MISALIGNED_ADDRESS);
123 
124 
125 /*!
126   @class nn::rdt::CTR::ResultNullPointer
127   @brief 引数にヌルポインタが指定されたことによるエラーを示します。
128 
129          例えば、ワークメモリのためにメモリアドレスを渡したり、データ書き込み先の
130          メモリアドレスを渡しているような箇所でヌルポインタを使うことはできません。
131  */
132 NN_DEFINE_RESULT_CONST(
133     ResultNullPointer,
134     Result::LEVEL_USAGE,
135     Result::SUMMARY_INVALID_ARGUMENT,
136     Result::MODULE_NN_RDT,
137     Result::DESCRIPTION_INVALID_POINTER);
138 
139 
140 /*!
141   @class nn::rdt::CTR::ResultResetReceived
142   @brief 通信相手(ピア)からリセット信号を受信し、CLOSED状態に遷移したことを表します。
143 
144          リセット信号は、誤った接続要求に対する応答として送出されたり、@ref Sender::Cancel、
145          @ref Receiver::Cancel の実行によって送出されたりします。このリセット信号を受信すると、
146          インスタンスはCLOSED状態に遷移しますので、状況に応じて再接続を試みたり、
147          通信を中断するなどの対応をとって下さい。
148  */
149 NN_DEFINE_RESULT_CONST(
150     ResultResetReceived,
151     Result::LEVEL_STATUS,
152     Result::SUMMARY_STATUS_CHANGED,
153     Result::MODULE_NN_RDT,
154             DESCRIPTION_RESET_RECEIVED);
155 
156 
157 /*!
158   @class nn::rdt::CTR::ResultResendQueueIsFull
159   @brief RDTライブラリ内部の再送キューが満杯だったことを示します。
160 
161          これは、RDTライブラリのバグが強く疑われる内部エラーです。もし開発中に
162          このエラーを発見されましたら、任天堂へのご連絡をお願いいたします。
163  */
164 NN_DEFINE_RESULT_CONST(
165     ResultResendQueueIsFull,
166     Result::LEVEL_RESET,
167     Result::SUMMARY_OUT_OF_RESOURCE,
168     Result::MODULE_NN_RDT,
169     Result::DESCRIPTION_OUT_OF_MEMORY);
170 
171 
172 /*!
173   @class nn::rdt::CTR::ResultUntimelyFunctionCall
174   @brief その関数を呼ぶべき状態ではなかったことを示します。
175 
176          @ref Sender::Open, @ref Receiver::Wait などは、関数を呼び出すべきタイミング
177          (インスタンスの状態)が存在します。例えば、既に SENDER_STATE_OPENED 状態である状況で
178          @ref Sender::Openを呼び出すのは誤りです。このような場合にこのリザルトコードが返されます。
179  */
180 NN_DEFINE_RESULT_CONST(
181     ResultUntimelyFunctionCall,
182     Result::LEVEL_STATUS,
183     Result::SUMMARY_INVALID_STATE,
184     Result::MODULE_NN_RDT,
185             DESCRIPTION_UNTIMELY_CALL);
186 
187 
188 /*!
189   @class nn::rdt::CTR::ResultNoData
190   @brief ライブラリ内部でのみ使用されるリザルトコードです。受信セグメントが存在しない(まだ到着していない)ことを示します。
191 
192          このリザルトコードはRDTライブラリ内部でのみ使用されるものですので、
193          アプリケーション開発者がこれをケアする必要はありません。
194  */
195 NN_DEFINE_RESULT_CONST(
196     ResultNoData,
197     Result::LEVEL_TEMPORARY,
198     Result::SUMMARY_NOT_FOUND,
199     Result::MODULE_NN_RDT,
200     Result::DESCRIPTION_NO_DATA);
201 
202 
203 }}} // namespace nn::rdt::CTR
204 
205 #endif  // end of NN_RDT_RESULT_H_
206