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