1 /*---------------------------------------------------------------------------*
2   Project:  Wii Connect 24
3   File:     NWC24Dl.h
4 
5   Copyright (C)2006 Nintendo  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   $Log: NWC24Dl.h,v $
14   Revision 1.29  2007/10/01 08:15:47  hirose_kazuki
15   Added definition of NWC24_DL_INTERVAL_MIN_2ND.
16 
17   Revision 1.28  2007/09/20 00:44:22  adachi_hiroaki
18   Copied SSL-RootCA definitions from ssl.h.
19 
20   Revision 1.27  2007/09/03 06:54:13  adachi_hiroaki
21   Changed definitions for priority.
22 
23   Revision 1.26  2007/08/31 09:07:57  adachi_hiroaki
24   Changed NWC24_DL_INTERVAL_MIN.
25 
26   Revision 1.25  2007/08/29 04:56:34  adachi_hiroaki
27   Added functions for handling multiple tasks by one application.
28 
29   Revision 1.24  2007/07/13 12:20:52  adachi_hiroaki
30   Removed flags.
31 
32   Revision 1.23  2007/07/13 11:57:01  adachi_hiroaki
33   Reorganized headers.
34 
35   Revision 1.22  2007/07/13 02:11:08  adachi_hiroaki
36   Added NWC24GetNumRegDlTasks() and NWC24DeleteDlTasksForOptOut().
37 
38   Revision 1.21  2007/07/02 08:23:31  adachi_hiroaki
39   Changed NWC24_DL_RETRYMARGIN_MIN to 30.
40 
41   Revision 1.20  2007/06/20 10:36:31  adachi_hiroaki
42   Added NWC24SetDlRootCA()/NWC24GetDlRootCA().
43 
44   Revision 1.19  2007/06/09 07:06:12  adachi_hiroaki
45   Added NWC24ClearDlKeys().
46 
47   Revision 1.18  2007/06/08 05:46:47  adachi_hiroaki
48   Moved NWC24_DL_TASKNUM_MAX.
49 
50   Revision 1.17  2007/06/05 01:39:16  adachi_hiroaki
51   Added NWC24GetNumDlTasks().
52 
53   Revision 1.16  2007/06/04 06:34:58  adachi_hiroaki
54   Supported opt-in/out flags.
55 
56   Revision 1.15  2007/05/29 06:03:21  adachi_hiroaki
57   Changed NWC24_DLTYPE_MAX.
58 
59   Revision 1.14  2007/05/28 05:43:37  adachi_hiroaki
60   Changed default task types.
61 
62   Revision 1.13  2007/04/10 04:46:47  adachi_hiroaki
63   Added some flags.
64 
65   Revision 1.12  2007/03/13 05:32:06  adachi_hiroaki
66   Added NWC24GetDlError() and NWC24ClearDlError().
67 
68   Revision 1.11  2006/12/29 01:33:21  adachi_hiroaki
69   Added NWC24GetDlAppId().
70 
71   Revision 1.10  2006/12/14 09:43:25  adachi_hiroaki
72   Added NWC24_DL_FLAG_STANDBYMODE_ONLY.
73   Changed definition of NWC24DlType for the future.
74 
75   Revision 1.9  2006/12/13 04:27:54  adachi_hiroaki
76   Added definition for data encryption.
77 
78   Revision 1.8  2006/11/14 06:57:19  adachi_hiroaki
79   Increased NWC24_DL_RETRYMARGIN_MAX again.
80 
81   Revision 1.7  2006/11/11 19:00:29  adachi_hiroaki
82   Increased NWC24_DL_RETRYMARGIN_MAX.
83 
84   Revision 1.6  2006/10/24 01:38:36  adachi_hiroaki
85   Added NWC24*DlServerInterval().
86 
87   Revision 1.5  2006/10/17 02:46:18  adachi_hiroaki
88   Added NWC24_DL_FLAG_RAW_CONTENT.
89 
90   Revision 1.4  2006/10/07 05:35:00  adachi_hiroaki
91   Added NWC24SetDlPublicKey(), NWC24*DlFlags().
92 
93   Revision 1.3  2006/10/04 02:44:05  adachi_hiroaki
94   Added filename management functions.
95 
96   Revision 1.2  2006/09/28 11:37:58  adachi_hiroaki
97   Full spec candidate.
98 
99   Revision 1.1  2006/09/20 08:19:46  adachi_hiroaki
100   Initial check in.
101 
102 
103  *---------------------------------------------------------------------------*/
104 
105 /*---------------------------------------------------------------------------*
106     NWC24 Message API
107  *---------------------------------------------------------------------------*/
108 #ifndef NWC24DL_H__
109 #define NWC24DL_H__
110 
111 #include <revolution/nwc24/NWC24Types.h>
112 #include <revolution/nwc24/NWC24Err.h>
113 
114 /*---------------------------------------------------------------------------*
115     Macros
116  *---------------------------------------------------------------------------*/
117 #define NWC24_DL_PRIORITY_LOWEST                255
118 #define NWC24_DL_PRIORITY_DEFAULT               192
119 #define NWC24_DL_PRIORITY_LIMIT                 128
120 #define NWC24_DL_PRIORITY_HIGHEST               0
121 
122 #define NWC24_DL_INTERVAL_MAX                   (60*24*7)
123 #define NWC24_DL_INTERVAL_MIN                   (60*6)
124 #define NWC24_DL_INTERVAL_MIN_2ND               (60*24)
125 #define NWC24_DL_INTERVAL_DEFAULT               (60*24*2)
126 
127 #define NWC24_DL_RETRYMARGIN_MIN                (30)
128 #define NWC24_DL_RETRYMARGIN_MAX                (60*24*14)
129 #define NWC24_DL_RETRYMARGIN_DEFAULT            (60*24)
130 #define NWC24_DL_RETRYMARGIN_INFINITY           (65535)
131 
132 #define NWC24_DL_COUNT_MIN                      (1)
133 #define NWC24_DL_COUNT_MAX                      (100)
134 #define NWC24_DL_COUNT_DEFAULT                  (1)
135 
136 #define NWC24_DL_ITOR_ASCENDING                 0x00000000UL
137 #define NWC24_DL_ITOR_DESCENDING                0x80000000UL
138 
139 #define NWC24_DL_IT_OPERATION_MASK              0x0000ffffUL
140 #define NWC24_DL_IT_ORDER_MASK                  0x80000000UL
141 
142 #define NWC24_DL_TASKNUM_MAX                    120         // changed from 32
143 #define NWC24_DL_TASK_SIZE                      512
144 #define NWC24_DL_VF_SIZE_MIN                    (10*1024)
145 
146 #define NWC24_DL_FLAG_SEND_USERINFO             (1UL <<  0UL)
147 #define NWC24_DL_FLAG_USE_MYPUBLICKEY           (1UL <<  1UL)
148 #define NWC24_DL_FLAG_RAW_CONTENT               (1UL <<  2UL)
149 #define NWC24_DL_FLAG_USE_MYSECRETKEY           (1UL <<  3UL)
150 #define NWC24_DL_FLAG_GROUP_WRITABLE            (1UL <<  6UL)
151 
152 #define NWC24_DL_FLAG_RESERVED_30               (1UL << 30UL)
153 #define NWC24_DL_FLAG_RESERVED_31               (1UL << 31UL)
154 
155 #define NWC24_DL_STFLAG_TRAILING_FILENAME       (1UL <<  0UL)
156 #define NWC24_DL_STFLAG_TRAILING_URL            (1UL <<  1UL)
157 
158 #define NWC24_DL_STFLAG_INTELLIGENT_UPDATE      (1UL <<  8UL)
159 #define NWC24_DL_STFLAG_RETICENT_UPDATE         (1UL <<  9UL)
160 #define NWC24_DL_STFLAG_ALWAYS_INCREMENT        (1UL << 10UL)
161 
162 
163 #define NWC24_DL_STID_INVALID                   255
164 
165 #define NWC24_DL_OPTFLAG_NONE                   (0x00)
166 #define NWC24_DL_OPTFLAG_OPT_OUT                (0x01)
167 #define NWC24_DL_OPTFLAG_OPT_IN                 (0x02)
168 #define NWC24_DL_OPTMASK_OPT_INOUT              \
169                           (NWC24_DL_OPTFLAG_OPT_OUT | NWC24_DL_OPTFLAG_OPT_IN)
170 
171 /* copied from ssl.h */
172 #define NWC24_DL_ROOTCA_ID_NINTENDO_0           (0)
173 #define NWC24_DL_ROOTCA_ID_NINTENDO_1           (1)
174 #define NWC24_DL_ROOTCA_ID_RSA_1024             (2)
175 #define NWC24_DL_ROOTCA_ID_RSA_2048             (3)
176 #define NWC24_DL_ROOTCA_ID_MAX                  (4)
177 
178 #define NWC24_DL_PUBLICKEY_LENGTH               (2048 / 8)
179 #define NWC24_DL_SECRETKEY_LENGTH               (128 / 8)
180 
181 /*---------------------------------------------------------------------------*
182     Type definitions
183  *---------------------------------------------------------------------------*/
184 
185 typedef enum
186 {
187     NWC24_DLTYPE_MULTIPART_V1   = 0,
188     NWC24_DLTYPE_OCTETSTREAM_V1 = 1,
189     NWC24_DLTYPE_MULTIPART_V2   = 2,
190     NWC24_DLTYPE_OCTETSTREAM_V2 = 3,
191     NWC24_DLTYPE_MAX,
192     NWC24_DLTYPE_MULTIPART      = NWC24_DLTYPE_MULTIPART_V2,
193     NWC24_DLTYPE_OCTETSTREAM    = NWC24_DLTYPE_OCTETSTREAM_V2
194 } NWC24DlType;
195 #define NWC24_DLTYPE_EMPTY                      255
196 
197 typedef struct NWC24DlTask
198 {
199     // 512 bytes
200     u8      data[ NWC24_DL_TASK_SIZE ];
201 
202 } NWC24DlTask;
203 
204 typedef s32(*NWC24DlIterationPredicator) (u16 id);
205 
206 typedef enum
207 {
208     NWC24_DL_ITOP_LASTACCESS            = 0,
209     NWC24_DL_ITOP_LASTACCESS_ASCENDING  = NWC24_DL_ITOP_LASTACCESS | NWC24_DL_ITOR_ASCENDING,
210     NWC24_DL_ITOP_LASTACCESS_DESCENDING = NWC24_DL_ITOP_LASTACCESS | NWC24_DL_ITOR_DESCENDING,
211     NWC24_DL_ITOP_NEXTTIME              = 1,
212     NWC24_DL_ITOP_NEXTTIME_ASCENDING    = NWC24_DL_ITOP_NEXTTIME | NWC24_DL_ITOR_ASCENDING,
213     NWC24_DL_ITOP_NEXTTIME_DESCENDING   = NWC24_DL_ITOP_NEXTTIME | NWC24_DL_ITOR_DESCENDING,
214     NWC24_DL_ITOP_PRIORITY              = 2,
215     NWC24_DL_ITOP_PRIORITY_ASCENDING    = NWC24_DL_ITOP_PRIORITY | NWC24_DL_ITOR_ASCENDING,
216     NWC24_DL_ITOP_PRIORITY_DESCENDING   = NWC24_DL_ITOP_PRIORITY | NWC24_DL_ITOR_DESCENDING
217 } NWC24DlIterateOperation;
218 
219 
220 typedef enum
221 {
222     NWC24_DL_STTYPE_NONE,
223     NWC24_DL_STTYPE_INCREMENT,
224     NWC24_DL_STTYPE_TIME_HOUR,
225     NWC24_DL_STTYPE_TIME_DAYOFWEEK,
226     NWC24_DL_STTYPE_TIME_DAY,
227     NWC24_DL_STTYPE_MAX
228 } NWC24DlSubTaskType;
229 
230 typedef struct NWC24DlIterateContext
231 {
232     s32     operation;
233     s32     lastValue;
234     s32     filterValue;
235     s32     lastId;
236     BOOL    isFirst;
237     BOOL    isValid;
238 } NWC24DlIterateContext;
239 
240 /*---------------------------------------------------------------------------*
241     API Prototypes
242  *---------------------------------------------------------------------------*/
243 #ifdef __cplusplus
244 extern "C" {
245 #endif
246 
247 /*---------------------------------------------------------------------------*
248     Task management APIs
249  *---------------------------------------------------------------------------*/
250 NWC24Err NWC24CheckDlTask( const NWC24DlTask* taskPublic, BOOL wantWrite );
251 NWC24Err NWC24InitDlTask( NWC24DlTask* taskPublic, NWC24DlType type );
252 NWC24Err NWC24AddDlTask( NWC24DlTask* taskPublic );
253 NWC24Err NWC24UpdateDlTask( NWC24DlTask* taskPublic );
254 NWC24Err NWC24GetDlTask( NWC24DlTask* taskPublic, u16 id );
255 NWC24Err NWC24DeleteDlTask( NWC24DlTask* taskPublic );
256 NWC24Err NWC24DumpDlTask( const NWC24DlTask* taskPublic );
257 NWC24Err NWC24CreateDlVf( const NWC24DlTask* taskPublic, u32 size );
258 NWC24Err NWC24MountDlVf( NWC24DlTask* taskPublic, const char* drive );
259 NWC24Err NWC24GetDlTaskMineEx( NWC24DlTask* taskPublic, u32 param );
260 NWC24Err NWC24GetDlTaskMine( NWC24DlTask* taskPublic );
261 NWC24Err NWC24GetDlTaskIdByAppId( u16* id, u32 appId );
262 NWC24Err NWC24GetDlTaskIdByAppIdEx( u16* id, u32 appId, u32 param );
263 NWC24Err NWC24GetDlTaskByAppId( NWC24DlTask* taskPublic, u32 appId );
264 NWC24Err NWC24GetDlTaskByAppIdEx( NWC24DlTask* taskPublic, u32 appId, u32 param );
265 void     NWC24EnableDlLaxParameterChecking( BOOL enable );
266 NWC24Err NWC24GetDlHomeDir( const NWC24DlTask* taskPublic, char* buf, u32 len );
267 NWC24Err NWC24SetDlKeys( const u8 publicKey[NWC24_DL_PUBLICKEY_LENGTH],
268                          const u8 secretKey[NWC24_DL_SECRETKEY_LENGTH] );
269 NWC24Err NWC24ClearDlKeys( void );
270 
271 NWC24Err NWC24GetNumDlTasks( u32* numTasks );
272 NWC24Err NWC24GetNumRegDlTasks( u32* numTasks );
273 NWC24Err NWC24DeleteDlTasksForOptOut( u32 appId, BOOL all );
274 
275 NWC24Err NWC24GetDlVfPath( char* buf, u32 len );
276 NWC24Err NWC24GetDlVfPathByTask( const NWC24DlTask* taskPublic, char* buf, u32 len );
277 // obsoleted
278 NWC24Err NWC24SetDlPublicKey( const NWC24DlTask* taskPublic,
279                               const u8 publicKey[NWC24_DL_PUBLICKEY_LENGTH] );
280 NWC24Err NWC24SetDlSecretKey( const NWC24DlTask* taskPublic,
281                                const u8 secretKey[NWC24_DL_SECRETKEY_LENGTH] );
282 NWC24Err NWC24GetDlVfName( const NWC24DlTask* taskPublic, char* buf, u32 len );
283 
284 
285 /*---------------------------------------------------------------------------*
286     Task accessor APIs
287  *---------------------------------------------------------------------------*/
288 NWC24Err NWC24GetDlId( const NWC24DlTask* taskPublic, u16 *id );
289 NWC24Err NWC24GetDlType( const NWC24DlTask* taskPublic, NWC24DlType *type );
290 NWC24Err NWC24SetDlPriority( NWC24DlTask* taskPublic, u8 priority );
291 NWC24Err NWC24GetDlPriority( const NWC24DlTask* taskPublic, u8* priority );
292 NWC24Err NWC24SetDlInterval( NWC24DlTask* taskPublic, u16 min );
293 NWC24Err NWC24GetDlInterval( const NWC24DlTask* taskPublic, u16* min );
294 NWC24Err NWC24SetDlServerInterval( const NWC24DlTask* taskPublic, u32 min );
295 NWC24Err NWC24GetDlServerInterval( const NWC24DlTask* taskPublic, u32* min );
296 NWC24Err NWC24SetDlRetryMargin( NWC24DlTask* taskPublic, u16 min );
297 NWC24Err NWC24GetDlRetryMargin( const NWC24DlTask* taskPublic, u16* min );
298 NWC24Err NWC24SetDlUrl( NWC24DlTask* taskPublic, const char* url );
299 NWC24Err NWC24GetDlUrl( const NWC24DlTask* taskPublic, char* url, s32 len );
300 NWC24Err NWC24SetDlCount( NWC24DlTask* taskPublic, s16 count );
301 NWC24Err NWC24GetDlCount( const NWC24DlTask* taskPublic, s16* count );
302 NWC24Err NWC24GetDlNextTime( NWC24DlTask* taskPublic, s64* sec );
303 NWC24Err NWC24GetDlLastUpdate( const NWC24DlTask* taskPublic, s64* sec );
304 NWC24Err NWC24SetDlFilename( NWC24DlTask* taskPublic, const char* filename );
305 NWC24Err NWC24GetDlFilename( const NWC24DlTask* taskPublic, char* filename, s32 len );
306 NWC24Err NWC24SetDlFlags( NWC24DlTask* taskPublic, u32 flags );
307 NWC24Err NWC24GetDlFlags( const NWC24DlTask* taskPublic, u32* flags );
308 NWC24Err NWC24GetDlAppId( const NWC24DlTask* taskPublic, u32* appId );
309 NWC24Err NWC24ClearDlError( NWC24DlTask* taskPublic );
310 NWC24Err NWC24GetDlError( const NWC24DlTask* taskPublic, s32* code, s32* count );
311 
312 NWC24Err NWC24SetDlOptOutFlags( NWC24DlTask* taskPublic, u8 optFlags );
313 NWC24Err NWC24GetDlOptOutFlags( NWC24DlTask* taskPublic, u8* optFlags );
314 
315 NWC24Err NWC24SetDlRootCA( NWC24DlTask* taskPublic, u8 rootCaId );
316 NWC24Err NWC24GetDlRootCA( NWC24DlTask* taskPublic, u8* rootCaId );
317 
318 NWC24Err NWC24SetDlUserParameter( NWC24DlTask* taskPublic, u32 param );
319 NWC24Err NWC24GetDlUserParameter( const NWC24DlTask* taskPublic, u32* param );
320 
321 
322 /*---------------------------------------------------------------------------*
323     Task iteration APIs
324  *---------------------------------------------------------------------------*/
325 NWC24Err NWC24IterateDlTask( u16* id, BOOL isBegin );
326 NWC24Err NWC24InitDlIterateContext( NWC24DlIterateContext* context,
327                                     NWC24DlIterateOperation operation );
328 NWC24Err NWC24IterateDlTaskEx( NWC24DlIterateContext* context,
329                                u16* id );
330 
331 /*---------------------------------------------------------------------------*/
332 #ifdef __cplusplus
333 }
334 #endif
335 
336 #endif  // NWC24DL_H__
337 
338