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