1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_Task.h
4 
5   Copyright (C)2009 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: 32862 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_TASK_H_
17 #define NN_BOSS_BOSS_TASK_H_
18 
19 #include <nn/fnd/fnd_TimeSpan.h>
20 #include <nn/boss/boss_Const.h>
21 #include <nn/boss/boss_Result.h>
22 #include <nn/boss/boss_Types.h>
23 #include <nn/boss/boss_TaskAction.h>
24 #include <nn/boss/boss_TaskPolicy.h>
25 #include <nn/boss/boss_TaskStatus.h>
26 #include <nn/boss/boss_TaskError.h>
27 #include <nn/boss/boss_TaskOption.h>
28 
29 
30 #ifdef __cplusplus
31 
32 namespace nn {
33 namespace boss {
34 
35 /*!
36   @brief        タスクを表すクラスです。タスクの登録や登録解除、タスクの操作の際などに利用します。
37 */
38 class Task
39 {
40 public:
41 /*!
42   @brief        コンストラクタです。
43 */
44     explicit Task(void);
45 
46 /*!
47   @brief        デストラクタです。
48 */
49     virtual ~Task(void);
50 
51 /*!
52   @brief        タスク登録済のタスクIDを指定して初期化します。この初期化にとってオブジェクトの再利用が可能になります。
53   @param[in]    pTaskId         タスクIDを指定します。 TaskId[TASK_ID_LENGTH]
54   @return       関数の実行結果を返します。以下に挙げる Result を返します。
55   @retval       ResultSuccess           初期化に成功しました。
56   @retval       ResultInvalidTaskId     タスクIDのポインタがNULLまたは0文字列です。
57   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
58 */
59     nn::Result Initialize(const char* pTaskId);
60 
61 /*!
62   @brief        タスク登録後、実行間隔を更新します。タスクの実行開始指示後でも変更が可能です。
63                 有効な実行間隔は、1~3時間です。
64   @param[in]    interval        実行間隔を指定します。単位は時間です。
65   @return       関数の実行結果を返します。以下に挙げる Result を返します。
66   @retval       ResultSuccess                   実行間隔の更新に成功しました。
67   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
68   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
69   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
70   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
71 */
UpdateInterval(u32 interval)72     inline nn::Result UpdateInterval(u32 interval){return UpdateIntervalWithSec(interval*60*60);}
73 
74 /*!
75   @brief        タスク登録後、実行間隔を更新します。単位は秒です。タスクの実行開始指示後でも変更が可能です。
76   @param[in]    intervalSec        実行間隔を指定します。単位は秒です。
77   @return       関数の実行結果を返します。以下に挙げる Result を返します。
78   @retval       ResultSuccess                   実行間隔の更新に成功しました。
79   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
80   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
81   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
82   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
83 */
84     nn::Result UpdateIntervalWithSec(u32 intervalSec);
85 
86 /*!
87   @brief  タスク登録後、消尽回数を更新します。タスクの実行開始指示後でも変更が可能です。
88   @param[in]    count           実行回数を指定します。
89   @return       関数の実行結果を返します。以下に挙げる Result を返します。
90   @retval       ResultSuccess                   消尽回数の更新に成功しました。
91   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
92   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
93   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
94   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
95 */
96     nn::Result UpdateCount(u32 count);
97 
98 /*!
99   @brief        実行間隔を取得します。単位は時間です。タスクの実行開始指示後でも変更が可能です。
100   @retval       実行間隔が返ります。<BR>
101 */
GetInterval(void)102     inline u32 GetInterval(void)
103     {
104         const u32 intervalSec = GetIntervalSec();
105         if(intervalSec > 0)
106         {
107             return (intervalSec / (60*60));
108         }
109         else
110         {
111             return 0;
112         }
113     }
114 
115 /*!
116   @brief        実行間隔を取得します。単位は秒です。
117   @retval       実行間隔が返ります。<BR>
118 */
119     u32 GetIntervalSec(void);
120 
121 /*!
122   @brief        消尽回数を取得します。
123   @return       消尽回数が返ります。<BR>
124         @retval U32_CANNOT_GET_DATA データが取得できません。
125 */
126     u32 GetCount(void);
127 
128 /*!
129   @brief        タスクのサービスステータス取得します。サービスステータスは、サーバからサービス終了の通知を検出した場合、そのステータスを確認できます。
130                 但し、タスク登録後、一度もサーバへアクセスしていない状態では、@ref SERVICE_UNKNOWN となりますので、ご注意ください。
131   @return       タスクのサービスステータスが返ります。<BR>
132 */
133     TaskServiceStatus GetServiceStatus(void);
134 
135 /*!
136   @brief        タスクの開始指示します。インフラ接続可能な状態になると、スケジューリングされたタスクがバックグラウンドで自動実行されます。
137                 タスクの実行が終了すると、実行結果がエラーかどうかに関わらず、タスクの属性で指定した消尽回数が1差し引かれます。
138                 その結果、消尽回数がゼロでない限り、タスクの属性で指定しました実行間隔時間後に、再度タスクが実行されます。
139                 なお、消尽回数がゼロになったタスクは、内部データベースの容量の上限に達した場合、自動的に削除されることがありますので、ご注意ください。
140                 以下の場合は、タスク開始指示を行ってもタスク実行のスケジューリングされませんので、ご注意ください。
141                 ・消尽回数がゼロのタスク<BR>
142                 ・タスクの実行優先順位が@ref PRIORITY_STOPPED のタスク<BR>
143                 ・ペアレンタルコントロールが有効で、タスク属性でペアレンタルコントロールの解除がされていない場合<BR>
144                 ・EULA同意がされていない状態で、タスク属性でEULA同意の解除がされていない場合<BR>
145                 ・ゾーンAPからダウンロードされたポリシーリストで、タスク実行が停止された場合<BR>
146                 ・ダウンロードサービスを行うサーバからサービス停止の提示されていた場合<BR>
147                 ・管理者が全タスクを一時的に停止中の場合<BR>
148                 良くあるケースの確認方法として、消尽回数の確認は、@ref GetCount 関数によって可能です。
149                 ペアレンタルコントロールおよび、EULA同意については、Configツールなどで設定が可能です。
150                 管理者が全タスクを一時的に停止中の場合は、@ref GetState 関数によって @ref TASK_PAUSED が返されますので識別が可能です。
151          <BR>
152                 タスク完了待機の方法は、下記のような方法があります。
153                 ・@ref WaitFinish 関数による実行完了を待つ方法
154                 ・最大の時間待ち時間を指定して @ref WaitFinish 関数による実行完了を待つ方法
155                 ・@ref GetState 関数による実行完了タスク状態のポーリングも使用可能
156                 ・@ref RegisterNewArrivalEvent 関数で登録した Event による新着イベント待ちを方法
157                 なお、完了を検知後、@ref GetState でタスクの状態、@ref GetResult でタスクの実行結果コード、
158                 @ref GetHttpStatusCode でhttp通信の結果コードが確認できます。
159                 なお、その他詳細情報は、@ref GetStateDetail で取得可能です。
160          <BR>
161   @return       関数の実行結果を返します。以下に挙げる Result を返します。
162   @retval       ResultSuccess                   タスクの開始指示に成功しました。
163   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
164   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
165   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
166   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
167 */
168     nn::Result Start(void);
169 
170 /*!
171   @brief        タスクの即時開始指示します。あらかじめ、インフラ接続可能な状態にした後に呼び出す必要があります。
172                 スケジュールされた時間に先駆けタスク実行が可能になりますので、バックグラウンドで動作するタスクを必要応じて即実行する用途に向いています。
173                 この即時開始指示を行いますと、実行中の他のタスクがあった場合でも、そのタスクを中断して最優先で対象のタスクを実行することができます。
174                 @ref Start との違いは、すでに実行時刻がきている状態である点、通信が中断した場合は、リジューム状態には至らず、タスク実行結果がエラーとなります。
175                 また、注意点として、対象のタスクのみ1回だけ実行したい場合は、消尽回数を「1」に設定をしてください。
176                 「1」以上設定しますと通常のタスクと同じように消尽回数がゼロになるまでバックグラウンドでタスクが自動実行されます。
177                 インフラ接続可能にするためには、nn::ac::Connect()を参照ください。
178   @return       関数の実行結果を返します。以下に挙げる Result を返します。
179   @retval       ResultSuccess                   タスクの即時開始指示に成功しました。
180   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
181   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
182   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
183   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
184 */
185     nn::Result StartImmediate(void);
186 
187 /*!
188   @brief        タスクの実行中止指示します。一度中止指示を行ったタスクは、@ref Start で再度開始指示ができます。
189                 中止状態のタスクは、@ref GetState 関数を呼び出すとタスクの状態として @ref TASK_STOPPED が返ります。
190   @return       関数の実行結果を返します。以下に挙げる Result を返します。
191   @retval       ResultSuccess                   タスクの実行中止指示に成功しました。
192   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
193   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
194   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
195   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
196 */
197     nn::Result Cancel(void);
198 
199 /*!
200   @brief        指定時間内にタスクの完了待ちを行います。タイムアウト機能がついた、@ref WaitFinish です。
201                 URLの更新日時が以前と同じ日時の場合、ダウンロードはされずタスクの完了にはなりませんので、ご注意ください。
202   @param[in]    timeout      タイムアウト時間を指定します。
203   @return       関数の実行結果を返します。以下に挙げる Result を返します。
204   @retval       ResultSuccess                   @ref TASK_DONE または、@ref TASK_ERROR でタスクが完了しました。
205   @retval       ResultWaitFinishTaskNotDone     タスクの開始指示されていないか(@ref TASK_REGISTERED 状態)、タスク実行が停止中(@ref TASK_STOPPED 状態)です。再度タスクの開始指示を行ってからタスクの完了待ちをしてください。
206   @retval       ResultWaitFinishTimeout         WaitFinish関数でタイムアウトになりました。再度完了待ちを行うなどの対応を行ってください。
207   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
208   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
209   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
210   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
211 */
212     nn::Result WaitFinish(const nn::fnd::TimeSpan& timeout);
213 
214 /*!
215   @brief        タスクの完了待ち指示します。
216                 URLの更新日時が以前と同じ日時の場合、ダウンロードはされずタスクの完了にはなりませんので、ご注意ください。
217   @return       関数の実行結果を返します。以下に挙げる Result を返します。
218   @retval       ResultSuccess                   @ref TASK_DONE または、@ref TASK_ERROR でタスクが完了しました。
219   @retval       ResultWaitFinishTaskNotDone     タスクの開始指示されていないか(@ref TASK_REGISTERED 状態)、タスク実行が停止中(@ref TASK_STOPPED 状態)です。再度タスクの開始指示を行ってからタスクの完了待ちをしてください。
220   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
221   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
222   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
223   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
224 */
225     nn::Result WaitFinish(void);
226 
227 /*!
228   @brief        タスク状態の取得します。
229                 通常、タスクの状態は、下記の①から⑤までを遷移します。
230                 ①TASK_REGISTERED(登録済み)<BR>
231                 ②TASK_WAITING_TIMER(Start()後、時間待ち)<BR>
232                 ③TASK_WAITING(実行待ち)<BR>
233                 ④TASK_RUNNINGまたは、TASK_RETRY(実行中)<BR>
234                 ⑤TASK_DONEまたは、TASK_ERROR(実行終了状態)<BR>
235                 特殊な状態として、TASK_PAUSED(一時停止中)、TASK_STOPPED(Cancel()による停止中)があります。
236                 また、短時間で状態が変わる場合もあり、すべての状態を捕捉できない場合があることにご注意ください。
237   @param[in]    acknowledge  タスク実行が終わると、実行結果を確認できるように実行終了状態を保持します。
238                              このフラグをtrueにして呼び出しますと、実行終了状態を保持を解除します。
239                              仮に消尽回数がゼロでないタスクの場合は、前回のタスク実行完了直後に再スケジューリングされますので、
240                              次回の返り値は、@ref TASK_WAITING_TIMER に切り替わることになります。 (省略可能)
241   @param[out]   pCount       消尽回数が返ります。 (省略可能)
242   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
243   @return       タスクの状態を示すコードが返ります。<BR>
244 */
245     TaskStateCode GetState(bool acknowledge=false, u32* pCount=NULL, u8* pStepID=NULL);
246 
247 /*!
248   @brief        通信エラーコードを取得します。
249                 下記は、よくあるhttp通信におけるレスポンスコードの例です。<BR>
250                 200	正常なhttp通信結果です。<BR>
251                 206	正常なhttp通信結果ですが、まだ継続データがある状態です。<BR>
252                 401	Basic認証結果が正しくありません。Basic認証には対応していませんので、使用しないでください。<BR>
253                 404	URLコンテンツが見つかりません。URLが正しいか、コンテンツが削除されていないか確認ください。<BR>
254                 403	アクセスが認められていないURLが指定されました。URLが正しいか確認ください。<BR>
255                 500	サーバ側の問題でエラーが発生しました。サーバの運用者に連絡ください。<BR>
256   @param[out]   pCount       消尽回数が返ります。 (省略可能)
257   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
258   @return       通信エラーコードが返ります。<BR>
259         @retval U32_CANNOT_GET_DATA データが取得できません。
260 */
261     u32 GetHttpStatusCode(u32* pCount=NULL, u8* pStepID=NULL);
262 
263 /*!
264   @brief        @ref nn::boss::GetHttpStatusCode の旧名です。
265                  互換性のために残しているものですので、新規利用は避けてください。
266 */
267     u32 GetCommErrorCode(u32* pCount=NULL, u8* pStepID=NULL) NN_ATTRIBUTE_DEPRECATED;
268 
269 /*!
270   @brief        タスク結果コードを取得します。
271                 タスク結果コードについては、@ref TaskResultCode を参照してください。
272          <BR>
273                 よくあるタスク実行中のエラーについて <BR>
274                 ①インフラ通信が切断された場合 <BR>
275                   @ref HTTP_ERROR_RECV <BR>
276                   @ref HTTP_ERROR_CONNECT <BR>
277                 ②サーバへの接続が失敗した場合(URLが示すサーバが見つからない場合) <BR>
278                   @ref HTTP_ERROR_DNS <BR>
279                   @ref HTTP_ERROR_CONNECT <BR>
280                 ③サーバへの接続が失敗した場合(HTTPSのネゴシエーションに失敗した場合) <BR>
281                   @ref SSL_ERROR_FAILED <BR>
282                   @ref SSL_ERROR_VERIFY_COMMON_NAME <BR>
283                   @ref SSL_ERROR_VERIFY_ROOT_CA <BR>
284                   @ref SSL_ERROR_VERIFY_CHAIN <BR>
285                   @ref SSL_ERROR_VERIFY_DATE <BR>
286                 ④NSAダウンロードが失敗した場合( NSAストレージ領域が不足した場合)<BR>
287                   @ref NSA_ERROR_STORAGE_INSUFFICIENCY <BR>
288                 ⑤NSAダウンロードが失敗した場合( NSAフォーマット以外か、通信エラーで内容が壊れたファイルをダウンロードした場合)<BR>
289                   @ref NSA_ERROR_INVALID_FORMAT <BR>
290                   @ref NSA_ERROR_VERIFY_HASH <BR>
291                   @ref NSA_ERROR_VERIFY_SIGNATURE <BR>
292                   @ref NSA_NSD_ERROR_VERIFY_HASH <BR>
293                   @ref NSA_NSD_ERROR_VERIFY_SIGNATURE <BR>
294                   @ref NSA_NSD_ERROR_INVALID_FORMAT <BR>
295          <BR>
296   @param[out]   pCount       消尽回数が返ります。 (省略可能)
297   @param[out]   pStepID      タスクステップIDが返ります。(省略可能)
298   @return       タスク結果コードが返ります。<BR>
299 */
300     TaskResultCode GetResult(u32* pCount=NULL, u8* pStepID=NULL);
301 
302 /*!
303   @brief        タスク状態を取得します。
304                 あらかじめ、@ref TaskStatus のインスタンスを用意ください。また、このインスタンスは、128B程度のメモリを必要としますのでご注意ください。
305                 それぞれの属性値の取得については、@ref TaskStatus のGetProperty()を参照ください。
306   @param[out]   pStatus      タスクステータスが返ります。
307   @param[in]    acknowledge  タスク実行が終わると、実行結果を確認できるように、@ref TaskStatus 内のタスクの実行終了状態を
308                              示すコード @ref TaskStateCode を保持します。このフラグをtrueにして呼び出しますと、
309                              この実行終了状態の保持を解除します。
310                              仮に消尽回数がゼロでないタスクの場合は、前回のタスク実行完了直後に再スケジューリングされますので、
311                              次回からタスクの状態は、@ref TASK_WAITING_TIMER に切り替わることになります。 (省略可能)
312   @param[out]   pStepID      タスクステップIDが返ります。
313   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
314   @return       関数の実行結果を返します。以下に挙げる Result を返します。
315   @retval       ResultSuccess                   タスク状態を取得に成功しました。
316   @retval       ResultInvalidTaskStatus         タスクステータスのポインタがNULLです。
317   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
318   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
319   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
320   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
321 */
322     nn::Result GetStateDetail(TaskStatus* pStatus, bool acknowledge=false, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
323 
324 /*!
325   @brief        @ref nn::boss::GetStateDetail の旧名です。
326                  互換性のために残しているものですので、新規利用は避けてください。
327 */
328     nn::Result GetStatus(TaskStatus* pStatus, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID) NN_ATTRIBUTE_DEPRECATED;
329 
330 /*!
331   @brief        タスクエラー状態を取得します。
332                 あらかじめ、@ref TaskError のインスタンスを用意ください。また、このインスタンスは、136B程度のメモリを必要としますのでご注意ください。
333   @param[out]   pTaskError    タスクエラー状態が返ります。
334   @param[out]   pStepID      タスクステップIDが返ります。
335   @param[in]    taskStep     タスクステップIDを指定します。 (省略時はカレントステップ)
336   @return       関数の実行結果を返します。以下に挙げる Result を返します。
337   @retval       ResultSuccess                   取得に成功しました。
338   @retval       ResultInvalidTaskError          タスクエラー情報のポインタがNULLです。
339   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
340   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
341   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
342   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
343 */
344     nn::Result GetError(TaskError* pTaskError, u8* pStepID=NULL, u8 taskStep=CURRENT_STEP_ID);
345 
346 /*!
347   @brief        登録済のタスク情報を取得します。
348                 あらかじめ、@ref TaskPolicy のインスタンス、@ref TaskAction のインスタンス、
349                 @ref TaskOptionのインスタンスを用意ください。
350                 それぞれの属性値の取得については、各クラスのGetProperty()を参照ください。
351   @param[out]   pPolicy      タスクポリシーを指定します。
352   @param[out]   pAction      タスクアクションを指定します。
353   @param[out]   pOption      タスクオプションを指定します。
354   @param[in]    taskStep     タスクステップID指定 (省略時はカレントステップ)
355   @return       関数の実行結果を返します。以下に挙げる Result を返します。
356   @retval       ResultSuccess                   取得に成功しました。
357   @retval       ResultInvalidTaskId             タスクIDのポインタがNULLまたは0文字列です。
358   @retval       ResultInvalidPolicy             ポリシィ情報のポインタがNULLです。
359   @retval       ResultInvalidAction             タスクアクションのポインタがNULLです。
360   @retval       ResultInvalidOption             タスクオプションのポインタがNULL,またはoptionコードが範囲外です。
361   @retval       ResultTaskNotExist              指定されたタスクIDが見つかりません。登録済であるか確認ください。
362   @retval       ResultIpcNotSessionInitialized  セッションが初期化されていないか、権限不適合です。@ref Initialize もしくは @ref InitailizePriviledged の呼び出し前に本関数が呼び出されると、このResultが返ります。BOSSライブラリを利用する際には、必ず初めに@ref Initialize もしくは @ref InitailizePriviledged を呼び出してください。
363   @retval       上記以外                        想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
364 */
365     nn::Result GetInfo(TaskPolicy* pPolicy, TaskAction* pAction, TaskOption* pOption, u8 taskStep=CURRENT_STEP_ID);
366 
367 /*!
368   @brief  タスクIDを取得します。
369   @return タスクIDの文字列が返ります。<BR>
370 */
371     char*               GetTaskId(void);
372 
373 protected:
374     friend class AccessConfig;
375     TaskConfig          m_Task;
376 private:
377     bool                CheckTaskId(void);
378 
379 };
380 
381 } // end of namespace boss
382 } // end of namespace nn
383 
384 #endif // __cplusplus
385 
386 #endif /* NN_BOSS_BOSS_TASK_H_ */
387