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: 26265 $
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       処理の結果が返ります。<BR>
54 */
55     nn::Result SetPrivateRootCa(void);
56 
57 /*!
58   @brief        機器に内蔵されているルート証明書の使用を設定します。
59                 独自ルート証明書と併用できます。
60   @param[in]    certStoreName   証明書ストア名を指定します。
61   @return       処理の結果が返ります。<BR>
62   @retval       Description== @ref ER_INVALID_MAX_ROOT_CA  「ルートCAの最大設定数を超えました。」を表すエラー
63 */
64     nn::Result SetRootCa(const nn::http::InternalCaCertId inCaCertName);
65 
66 /*!
67   @brief        登録した独自クライアント証明書の使用を設定します。
68                 独自ルート証明書のみが使用されます。
69   @return       処理の結果が返ります。<BR>
70 */
71     nn::Result SetPrivateClientCert(void);
72 
73 
74 
75 /*!
76   @brief        機器に内蔵されているクライアント証明書の使用を設定します。
77                 指定された機器内蔵クライアント証明書1枚のみが使用されます。
78   @param[in]    certStoreName   証明書ストア名を指定します。
79   @return       処理の結果が返ります。<BR>
80   @retval       Description== @ref ER_INVALID_MAX_CLIENT_CERT  「ClientCertの最大設定数を超えました。」を表すエラー
81 */
82     nn::Result SetClientCert(const nn::http::InternalClientCertId inClientCertName);
83 
84 
85 /*!
86   @brief        アクセスポイント情報を付加します。
87   @param[in]    info        アクセスポイント情報を指定します。
88   @return       処理の結果が返ります。<BR>
89 */
90     nn::Result SetApInfo(ApInfoType info);
91 
92 
93 /*!
94   @brief        httpヘッダ部にヘッダ追加を設定します。
95   @param[in]    pLabel      ヘッダ名を指定します。
96   @param[in]    pValue      ヘッダ値を指定します。
97   @return       処理の結果が返ります。<BR>
98   @retval       Description== @ref ER_HTTP_REQUEST_HEADER_POINTER_NULL  「HTTPリクエストヘッダのポインタがNULLです。」を表すエラー
99   @retval       Description== @ref ER_INVALID_MAX_HTTP_REQUEST_HEADER  「HTTPリクエストヘッダの登録数が最大数を超えました。」を表すエラー
100 */
101     nn::Result AddHeaderField(const char* pLabel, const char* pValue);
102 
103 /*!
104   @brief        LastModifiedTimeの初期値を設定します。
105   @param[in]    pLastModifiedTime      設定するLastModifiedTime文字列(この文字列が、そのままHTTPリクエストのIf-Modified-Sinceヘッダフィールドに設定されます。)
106   @return       処理の結果が返ります。<BR>
107   @retval       Description== @ref ER_INVALID_PROPERTYVALUE  「プロパティ値のポインタがNULLです。」を表すエラー
108 */
109     nn::Result SetLastModifiedTime(const char* pLastModifiedTime);
110 
111 protected:
112 /*!
113   @brief        クラス内のプロパティの値を設定します。
114                 下記のプロパティを使用できます。\n
115         識別子              型 \n
116         ACTION_HTTP_HEADER  struct httpRequestHeader[MAX_HTTP_HEADER]                   \n
117         ACTION_CLIENT_CERT  nn::http::InternalClientCertId clientCert[MAX_CLIENT_CERT]  \n
118         ACTION_ROOT_CA      nn::http::InternalCaCertId rootCA[MAX_ROOT_CA]              \n
119         ACTION_AP_INFO      ApInfoType                                                  \n
120         ACTION_PRIVATE_ROOT_CA u8                                                       \n
121         ACTION_PRIVATE_CLIENT_CERT u8                                                   \n
122         ACTION_LAST_MODIFIED_TIME lastModified[MAX_LASTMODIFIED_LENGTH]                 \n
123 
124   @param[in]    type    プロパティの識別子を指定します。
125   @param[in]    pValue  値を指定します。
126   @param[in]    size    値のサイズを指定します。
127   @return       処理の結果が返ります。<BR>
128 */
129     nn::Result SetHttpProperty(PropertyType type, void* pValue, size_t size) ;
130 
131 /*!
132   @brief        クラス内のプロパティの値を取得します。
133                 下記のプロパティを使用できます。\n
134         識別子              型 \n
135         ACTION_HTTP_HEADER  struct httpRequestHeader[MAX_HTTP_HEADER]                   \n
136         ACTION_CLIENT_CERT  nn::http::InternalClientCertId clientCert[MAX_CLIENT_CERT]  \n
137         ACTION_ROOT_CA      nn::http::InternalCaCertId rootCA[MAX_ROOT_CA]              \n
138         ACTION_AP_INFO      ApInfoType                                                  \n
139         ACTION_PRIVATE_ROOT_CA u8                                                       \n
140         ACTION_PRIVATE_CLIENT_CERT u8                                                   \n
141   @param[in]    type    プロパティの識別子を指定します。
142   @param[out]   pValue  値を指定します。
143   @param[in]    size    値のサイズを指定します。
144   @return       処理の結果が返ります。<BR>
145 */
146     nn::Result GetHttpProperty(PropertyType type, void* pValue, size_t size) ;
147 
148     nn::Result SetFileProperty(PropertyType type, void* pValue, size_t size) ;
149 
150     nn::Result GetFileProperty(PropertyType type, void* pValue, size_t size) ;
151 
152 
153     friend class AccessConfig;
154     TaskActionConfig    m_Action;
155 };
156 
157 
158 /*!
159   @brief        タスクアクションを表すクラスです。NADLタスクなど、具体的なタスクアクションクラスの基底クラスとなります。また特定タスクのタスクアクション情報を取得する際には、直接インスタンス化して利用します。
160 */
161 class TaskAction : public TaskActionBase
162 {
163 public:
164 /*!
165   @brief        コンストラクタです。
166 */
167     explicit TaskAction(void);
168 
169 /*!
170   @brief        デストラクタです。
171 */
172     virtual ~TaskAction(void);
173 
174 /*!
175   @brief        クラス内のプロパティの値を取得します。
176                 下記のプロパティを使用できます。\n
177         識別子              型 \n
178         ACTION_URL          char url[MAX_URL_LENGTH]                            \n
179         ACTION_OFFSET       u32                                                 \n
180         ACTION_FILEPATH     char    filepath [MAX_FILEPATH_LENGTH]              \n
181         ACTION_FILEPATH_W   wchar_t filePathW[MAX_FILEPATH_LENGTH]              \n
182         ACTION_FILE_HANDLE  nn::Handle                                          \n
183         ACTION_HTTP_HEADER  struct httpRequestHeader[MAX_HTTP_HEADER]           \n
184         ACTION_CLIENT_CERT  u8                                                  \n
185         ACTION_ROOT_CA      u8                                                  \n
186         ACTION_AP_INFO      ApInfoType                                          \n
187         SIGNAL_TASK_EVENT   nn::os::Event* \n
188   @param[in]    PropertyType    type    プロパティの識別子を指定します。
189   @param[in]    void*           pValue  値を指定します。
190   @param[in]    size_t          size    値のサイズを指定します。
191   @return       処理の結果が返ります。<BR>
192   @retval       Description== @ref ER_INVALID_PROPERTYVALUE 「プロパティ値のポインタがNULLです。」を表すエラー
193   @retval       Description== @ref ER_INVALID_PROPERTYTYPE  「プロパティタイプがサポート外です。」を表すエラー
194 */
195     nn::Result virtual GetProperty(PropertyType type, void* pValue, size_t size);
196 
197 };
198 
199 
200 } // end of namespace boss
201 } // end of namespace nn
202 
203 #endif // __cplusplus
204 
205 #endif /* NN_BOSS_BOSS_TASK_ACTION_H_ */
206 
207