1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     boss_TaskAction.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: 34926 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_BOSS_BOSS_TASK_ACTION_H_
17 #define NN_BOSS_BOSS_TASK_ACTION_H_
18 
19 #include <nn/types.h>
20 #include <nn/http/http_Types.h>
21 #include <nn/ssl/ssl_Const.h>
22 
23 #include <nn/boss/boss_Const.h>
24 #include <nn/boss/boss_Result.h>
25 #include <nn/boss/boss_Types.h>
26 
27 #ifdef __cplusplus
28 
29 namespace nn {
30 namespace boss {
31 
32 
33 /*!
34   @brief        タスクアクションの基底となるクラスです。アプリケーションが直接インスタンス化しての用途はありません。
35 */
36 class TaskActionBase
37 {
38 protected:
39 /*!
40   @brief        コンストラクタです。
41 */
42     explicit TaskActionBase(void);
43 
44 /*!
45   @brief        デストラクタです。
46 */
47     virtual ~TaskActionBase(void);
48 
49 public:
50 /*!
51   @brief        登録した独自ルート証明書の使用を設定します。
52 
53                 内臓されているルート証明書と併用できます。
54 
55   @return       関数の実行結果を返します。以下に挙げる Result を返します。
56   @retval       ResultSuccess           設定に成功しました。
57   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
58 */
59     nn::Result SetPrivateRootCa(void);
60 
61 /*!
62   @brief        機器に内蔵されているルート証明書の使用を設定します。
63 
64                 独自ルート証明書と併用できます。
65 
66   @param[in]    inCaCertName   証明書ストア名を指定します。
67   @return       関数の実行結果を返します。以下に挙げる Result を返します。
68   @retval       ResultSuccess           設定に成功しました。
69   @retval       ResultInvalidMaxRootCa  ルートCAの最大設定数を超えました。
70   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
71 */
72     nn::Result SetRootCa(const nn::http::InternalCaCertId inCaCertName);
73 
74 /*!
75   @brief        @ref 内蔵ルート証明書の使用設定をすべてクリアします。
76 
77   @return       関数の実行結果を返します。以下に挙げる Result を返します。
78   @retval       ResultSuccess           設定に成功しました。
79   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
80 */
81     nn::Result ClearRootCaSetting( void );
82 
83 /*!
84   @brief        登録した独自クライアント証明書の使用を設定します。
85 
86                 独自ルート証明書のみが使用されます。
87 
88   @return       関数の実行結果を返します。以下に挙げる Result を返します。
89   @retval       ResultSuccess           設定に成功しました。
90   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
91 */
92     nn::Result SetPrivateClientCert(void);
93 
94 
95 
96 /*!
97   @brief        機器に内蔵されているクライアント証明書の使用を設定します。
98 
99                 指定された機器内蔵クライアント証明書1枚のみが使用されます。
100 
101   @param[in]    inClientCertName   証明書ストア名を指定します。
102   @return       関数の実行結果を返します。以下に挙げる Result を返します。
103   @retval       ResultSuccess               設定に成功しました。
104   @retval       ResultInvalidMaxClientCert  ClientCertの最大設定数を超えました。
105   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
106 */
107     nn::Result SetClientCert(const nn::http::InternalClientCertId inClientCertName);
108 
109 
110 /*!
111   @brief        アクセスポイント情報を付加します。
112 
113   @param[in]    info        アクセスポイント情報を指定します。
114   @return       関数の実行結果を返します。以下に挙げる Result を返します。
115   @retval       ResultSuccess           設定に成功しました。
116   @retval       上記以外                想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
117 */
118     nn::Result SetApInfo(ApInfoType info);
119 
120 
121 /*!
122   @brief        httpヘッダ部にヘッダ追加を設定します。
123 
124   @param[in]    pLabel      ヘッダ名を指定します。
125   @param[in]    pValue      ヘッダ値を指定します。
126   @return       関数の実行結果を返します。以下に挙げる Result を返します。
127   @retval       ResultSuccess                       設定に成功しました。
128   @retval       ResultHttpRequestHeaderPointerNull  HTTPリクエストヘッダのポインタがNULLです。
129   @retval       ResultInvalidMaxHttpRequestHeader   HTTPリクエストヘッダの登録数が最大数を超えました。
130   @retval       上記以外                            想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
131 */
132     nn::Result AddHeaderField(const char* pLabel, const char* pValue);
133 
134 /*!
135   @brief        LastModifiedTimeの初期値を設定します。
136 
137   @param[in]    pLastModifiedTime      設定するLastModifiedTime文字列(この文字列が、そのままHTTPリクエストのIf-Modified-Sinceヘッダフィールドに設定されます。)
138   @return       関数の実行結果を返します。以下に挙げる Result を返します。
139   @retval       ResultSuccess               設定に成功しました。
140   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
141   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
142 */
143     nn::Result SetLastModifiedTime(const char* pLastModifiedTime);
144 
145 protected:
146 /*!
147   @brief        クラス内のプロパティの値を設定します。
148 
149         下記のプロパティを使用できます。 説明部のデータ型の領域を確保した後、呼び出してください。\n
150         識別子                      説明 \n
151         ACTION_URL                  対象のURL。データの型は、char[MAX_URL_LENGTH] です。 \n
152         ACTION_HTTP_HEADER          URLのオプションリクエストヘッダ構造体。データの型は、struct httpRequestHeader[MAX_HTTP_HEADER] です。 \n
153         ACTION_CLIENT_CERT          https通信用の内蔵クライアント証明書。データの型は、nn::http::InternalClientCertId[MAX_CLIENT_CERT] です。 \n
154         ACTION_CLIENT_CERT_NUM      内蔵クライアント証明書の設定数。データの型は、u32 です。 \n
155         ACTION_ROOT_CA              https通信用の内蔵ルート証明書。データの型は、nn::http::InternalCaCertId です。 \n
156         ACTION_ROOT_CA_NUM          内蔵ルート証明書を指定の設定数。データの型は、u32 です。 \n
157         ACTION_PRIVATE_CLIENT_CERT  プライベートクライアント証明書の有効フラグ。データの型は、u8 です。 \n
158         ACTION_PRIVATE_ROOT_CA      プライベートルート証明書の有効フラグ。データの型は、u8 です。 \n
159         ACTION_AP_INFO              HTTPクエリーへAP情報付与のためのアクセスポイント情報種別。データの型は、ApInfoType です。 \n
160         ACTION_LAST_MODIFIED_TIME   HTTPリクエストヘッダに設定する最終更新日時。データの型は、char[MAX_LASTMODIFIED_LENGTH] です。 \n
161 
162   @param[in]    type    プロパティの識別子を指定します。
163   @param[in]    pValue  値を指定します。
164   @param[in]    size    値のサイズを指定します。
165   @return       関数の実行結果を返します。以下に挙げる Result を返します。
166   @retval       ResultSuccess               設定に成功しました。
167   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
168   @retval       ResultInvalidPropertyType   プロパティタイプがサポート外です。
169   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
170 */
171     nn::Result SetHttpProperty(PropertyType type, const void* pValue, size_t size) ;
172 
173 /*!
174   @brief        クラス内のプロパティの値を取得します。
175 
176         下記のプロパティを使用できます。 説明部のデータ型の領域を確保した後、呼び出してください。\n
177         識別子                      説明 \n
178         ACTION_URL                  対象のURL。データの型は、char[MAX_URL_LENGTH] です。 \n
179         ACTION_HTTP_HEADER          URLのオプションリクエストヘッダ構造体。データの型は、struct httpRequestHeader[MAX_HTTP_HEADER] です。 \n
180         ACTION_CLIENT_CERT          https通信用の内蔵クライアント証明書。データの型は、nn::http::InternalClientCertId[MAX_CLIENT_CERT] です。 \n
181         ACTION_CLIENT_CERT_NUM      内蔵クライアント証明書の設定数。データの型は、u32 です。 \n
182         ACTION_ROOT_CA              https通信用の内蔵ルート証明書。データの型は、nn::http::InternalCaCertId です。 \n
183         ACTION_ROOT_CA_NUM          内蔵ルート証明書を指定の設定数。データの型は、u32 です。 \n
184         ACTION_PRIVATE_CLIENT_CERT  プライベートクライアント証明書の有効フラグ。データの型は、u8 です。 \n
185         ACTION_PRIVATE_ROOT_CA      プライベートルート証明書の有効フラグ。データの型は、u8 です。 \n
186         ACTION_AP_INFO              HTTPクエリーへAP情報付与のためのアクセスポイント情報種別。データの型は、ApInfoType です。 \n
187 
188   @param[in]    type    プロパティの識別子を指定します。
189   @param[out]   pValue  値を指定します。
190   @param[in]    size    値のサイズを指定します。
191   @return       関数の実行結果を返します。以下に挙げる Result を返します。
192   @retval       ResultSuccess               取得に成功しました。
193   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
194   @retval       ResultInvalidPropertyType   プロパティタイプがサポート外です。
195   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
196 */
197     nn::Result GetHttpProperty(PropertyType type, void* pValue, size_t size) ;
198 
199 /*!
200   @brief        クラス内のプロパティの値を取得します。
201 
202         下記のプロパティを使用できます。 説明部のデータ型の領域を確保した後、呼び出してください。\n
203         識別子                      説明 \n
204         ACTION_OFFSET               URLで指定したデータの先頭位置オフセット。データの型は、u32 です。 \n
205         ACTION_FILEPATH             ダウンロード先のファイルパス。データの型は、char[MAX_FILEPATH_LENGTH] です。 \n
206         ACTION_FILEPATH_W           ダウンロード先のファイルパス。データの型は、wchar_t[MAX_FILEPATH_LENGTH] です。 \n
207         ACTION_FILE_HANDLE          ダウンロード先のファイルハンドル。データの型は、nn::Handle です。 \n
208 
209   @param[in]    type    プロパティの識別子を指定します。
210   @param[out]   pValue  値を指定します。
211   @param[in]    size    値のサイズを指定します。
212   @return       関数の実行結果を返します。以下に挙げる Result を返します。
213   @retval       ResultSuccess               設定に成功しました。
214   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
215   @retval       ResultInvalidPropertyType   プロパティタイプがサポート外です。
216   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
217 */
218     nn::Result SetFileProperty(PropertyType type, const void* pValue, size_t size) ;
219 
220 /*!
221   @brief        クラス内のプロパティの値を取得します。
222 
223         下記のプロパティを使用できます。 説明部のデータ型の領域を確保した後、呼び出してください。\n
224         識別子                      説明 \n
225         ACTION_OFFSET               URLで指定したデータの先頭位置オフセット。データの型は、u32 です。 \n
226         ACTION_FILEPATH             ダウンロード先のファイルパス。データの型は、char[MAX_FILEPATH_LENGTH] です。 \n
227         ACTION_FILEPATH_W           ダウンロード先のファイルパス。データの型は、wchar_t[MAX_FILEPATH_LENGTH] です。 \n
228         ACTION_FILE_HANDLE          ダウンロード先のファイルハンドル。データの型は、nn::Handle です。 \n
229 
230   @param[in]    type    プロパティの識別子を指定します。
231   @param[out]   pValue  値を指定します。
232   @param[in]    size    値のサイズを指定します。
233   @return       関数の実行結果を返します。以下に挙げる Result を返します。
234   @retval       ResultSuccess               取得に成功しました。
235   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
236   @retval       ResultInvalidPropertyType   プロパティタイプがサポート外です。
237   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
238 */
239     nn::Result GetFileProperty(PropertyType type, void* pValue, size_t size) ;
240 
241 
242     friend class AccessConfig;
243     TaskActionConfig    m_Action;
244 };
245 
246 
247 /*!
248   @brief        タスクアクションを表すクラスです。NADLタスクなど、具体的なタスクアクションクラスの基底クラスとなります。
249                 また特定タスクのタスクアクション情報を取得する際には、直接インスタンス化して利用します。
250 */
251 class TaskAction : public TaskActionBase
252 {
253 public:
254 /*!
255   @brief        コンストラクタです。
256 */
257     explicit TaskAction(void);
258 
259 /*!
260   @brief        デストラクタです。
261 */
262     virtual ~TaskAction(void);
263 
264 /*!
265   @brief        クラス内のプロパティの値を取得します。
266 
267         下記のプロパティを使用できます。 説明部のデータ型の領域を確保した後、呼び出してください。\n
268         識別子              型 \n
269         ACTION_URL          char url[MAX_URL_LENGTH]  \n
270         ACTION_OFFSET       u32 \n
271         ACTION_FILEPATH     char    filepath [MAX_FILEPATH_LENGTH]  \n
272         ACTION_FILEPATH_W   wchar_t filePathW[MAX_FILEPATH_LENGTH]  \n
273         ACTION_FILE_HANDLE  nn::Handle  \n
274         ACTION_HTTP_HEADER  struct httpRequestHeader[MAX_HTTP_HEADER] \n
275         ACTION_CLIENT_CERT  u8 \n
276         ACTION_ROOT_CA      u8 \n
277         ACTION_AP_INFO      ApInfoType \n
278         SIGNAL_TASK_EVENT   nn::os::Event* \n
279 
280   @param[in]    type    プロパティの識別子を指定します。
281   @param[in]    pValue  値を指定します。
282   @param[in]    size    値のサイズを指定します。
283   @return       関数の実行結果を返します。以下に挙げる Result を返します。
284   @retval       ResultSuccess               取得に成功しました。
285   @retval       ResultInvalidPropertyValue  プロパティ値のポインタがNULLです。
286   @retval       ResultInvalidPropertyType   プロパティタイプがサポート外です。
287   @retval       上記以外                    想定外のエラー(エラー内容については、@ref boss_Result.h を参照)。
288 */
289     nn::Result virtual GetProperty(PropertyType type, void* pValue, size_t size);
290 
291 };
292 
293 
294 } // end of namespace boss
295 } // end of namespace nn
296 
297 #endif // __cplusplus
298 
299 #endif /* NN_BOSS_BOSS_TASK_ACTION_H_ */
300 
301