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