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