xref: /aosp_15_r20/system/incremental_delivery/libdataloader/include/dataloader_ndk.h (revision 9190c2a8bd3622b7aa9bd7bfe4b3aec77820f478)
1*9190c2a8SAndroid Build Coastguard Worker /*
2*9190c2a8SAndroid Build Coastguard Worker  * Copyright (C) 2019 The Android Open Source Project
3*9190c2a8SAndroid Build Coastguard Worker  *
4*9190c2a8SAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*9190c2a8SAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*9190c2a8SAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*9190c2a8SAndroid Build Coastguard Worker  *
8*9190c2a8SAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*9190c2a8SAndroid Build Coastguard Worker  *
10*9190c2a8SAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*9190c2a8SAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*9190c2a8SAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*9190c2a8SAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*9190c2a8SAndroid Build Coastguard Worker  * limitations under the License.
15*9190c2a8SAndroid Build Coastguard Worker  */
16*9190c2a8SAndroid Build Coastguard Worker 
17*9190c2a8SAndroid Build Coastguard Worker #ifndef ANDROID_INCREMENTAL_FILE_SYSTEM_DATA_LOADER_NDK_H
18*9190c2a8SAndroid Build Coastguard Worker #define ANDROID_INCREMENTAL_FILE_SYSTEM_DATA_LOADER_NDK_H
19*9190c2a8SAndroid Build Coastguard Worker 
20*9190c2a8SAndroid Build Coastguard Worker #include <incfs_ndk.h>
21*9190c2a8SAndroid Build Coastguard Worker #include <jni.h>
22*9190c2a8SAndroid Build Coastguard Worker 
23*9190c2a8SAndroid Build Coastguard Worker __BEGIN_DECLS
24*9190c2a8SAndroid Build Coastguard Worker 
25*9190c2a8SAndroid Build Coastguard Worker #define DATALOADER_LIBRARY_NAME "libdataloader.so"
26*9190c2a8SAndroid Build Coastguard Worker 
27*9190c2a8SAndroid Build Coastguard Worker typedef enum {
28*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_UNAVAILABLE = 7,
29*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_UNRECOVERABLE = 8,
30*9190c2a8SAndroid Build Coastguard Worker } DataLoaderStatus;
31*9190c2a8SAndroid Build Coastguard Worker 
32*9190c2a8SAndroid Build Coastguard Worker typedef enum {
33*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_TYPE_NONE = 0,
34*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_TYPE_STREAMING = 1,
35*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_TYPE_INCREMENTAL = 2,
36*9190c2a8SAndroid Build Coastguard Worker } DataLoaderType;
37*9190c2a8SAndroid Build Coastguard Worker 
38*9190c2a8SAndroid Build Coastguard Worker typedef enum {
39*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_LOCATION_DATA_APP = 0,
40*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_LOCATION_MEDIA_OBB = 1,
41*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_LOCATION_MEDIA_DATA = 2,
42*9190c2a8SAndroid Build Coastguard Worker } DataLoaderLocation;
43*9190c2a8SAndroid Build Coastguard Worker 
44*9190c2a8SAndroid Build Coastguard Worker typedef enum {
45*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_FEATURE_NONE = 0,
46*9190c2a8SAndroid Build Coastguard Worker     DATA_LOADER_FEATURE_UID = 1 << 0,
47*9190c2a8SAndroid Build Coastguard Worker } DataLoaderFeatures;
48*9190c2a8SAndroid Build Coastguard Worker 
49*9190c2a8SAndroid Build Coastguard Worker struct DataLoaderParams {
50*9190c2a8SAndroid Build Coastguard Worker     int type;
51*9190c2a8SAndroid Build Coastguard Worker     const char* packageName;
52*9190c2a8SAndroid Build Coastguard Worker     const char* className;
53*9190c2a8SAndroid Build Coastguard Worker     const char* arguments;
54*9190c2a8SAndroid Build Coastguard Worker };
55*9190c2a8SAndroid Build Coastguard Worker 
56*9190c2a8SAndroid Build Coastguard Worker typedef struct {
57*9190c2a8SAndroid Build Coastguard Worker     int location;
58*9190c2a8SAndroid Build Coastguard Worker     const char* name;
59*9190c2a8SAndroid Build Coastguard Worker     IncFsSize size;
60*9190c2a8SAndroid Build Coastguard Worker     IncFsSpan metadata;
61*9190c2a8SAndroid Build Coastguard Worker } DataLoaderInstallationFile;
62*9190c2a8SAndroid Build Coastguard Worker 
63*9190c2a8SAndroid Build Coastguard Worker typedef struct {
64*9190c2a8SAndroid Build Coastguard Worker     bool readLogsEnabled;
65*9190c2a8SAndroid Build Coastguard Worker } DataLoaderFilesystemParams;
66*9190c2a8SAndroid Build Coastguard Worker 
67*9190c2a8SAndroid Build Coastguard Worker #ifdef __cplusplus
68*9190c2a8SAndroid Build Coastguard Worker 
69*9190c2a8SAndroid Build Coastguard Worker typedef class DataLoaderFilesystemConnector {
70*9190c2a8SAndroid Build Coastguard Worker } * DataLoaderFilesystemConnectorPtr;
71*9190c2a8SAndroid Build Coastguard Worker typedef class DataLoaderStatusListener {
72*9190c2a8SAndroid Build Coastguard Worker } * DataLoaderStatusListenerPtr;
73*9190c2a8SAndroid Build Coastguard Worker 
74*9190c2a8SAndroid Build Coastguard Worker #else /* not __cplusplus */
75*9190c2a8SAndroid Build Coastguard Worker 
76*9190c2a8SAndroid Build Coastguard Worker typedef void* DataLoaderFilesystemConnectorPtr;
77*9190c2a8SAndroid Build Coastguard Worker typedef void* DataLoaderStatusListenerPtr;
78*9190c2a8SAndroid Build Coastguard Worker 
79*9190c2a8SAndroid Build Coastguard Worker #endif /* not __cplusplus */
80*9190c2a8SAndroid Build Coastguard Worker 
81*9190c2a8SAndroid Build Coastguard Worker typedef JavaVM* DataLoaderServiceVmPtr;
82*9190c2a8SAndroid Build Coastguard Worker typedef jobject DataLoaderServiceConnectorPtr;
83*9190c2a8SAndroid Build Coastguard Worker typedef jobject DataLoaderServiceParamsPtr;
84*9190c2a8SAndroid Build Coastguard Worker 
85*9190c2a8SAndroid Build Coastguard Worker struct DataLoader {
86*9190c2a8SAndroid Build Coastguard Worker     // DataLoader v1.
87*9190c2a8SAndroid Build Coastguard Worker     bool (*onStart)(struct DataLoader* self);
88*9190c2a8SAndroid Build Coastguard Worker     void (*onStop)(struct DataLoader* self);
89*9190c2a8SAndroid Build Coastguard Worker     void (*onDestroy)(struct DataLoader* self);
90*9190c2a8SAndroid Build Coastguard Worker 
91*9190c2a8SAndroid Build Coastguard Worker     bool (*onPrepareImage)(struct DataLoader* self, const DataLoaderInstallationFile addedFiles[],
92*9190c2a8SAndroid Build Coastguard Worker                            int addedFilesCount);
93*9190c2a8SAndroid Build Coastguard Worker 
94*9190c2a8SAndroid Build Coastguard Worker     void (*onPendingReads)(struct DataLoader* self, const IncFsReadInfo pendingReads[],
95*9190c2a8SAndroid Build Coastguard Worker                            int pendingReadsCount);
96*9190c2a8SAndroid Build Coastguard Worker     void (*onPageReads)(struct DataLoader* self, const IncFsReadInfo pageReads[],
97*9190c2a8SAndroid Build Coastguard Worker                         int pageReadsCount);
98*9190c2a8SAndroid Build Coastguard Worker 
99*9190c2a8SAndroid Build Coastguard Worker     // DataLoader v2, with features.
100*9190c2a8SAndroid Build Coastguard Worker     // Use DataLoader_Initialize_WithFeatures to set a factory for v2 DataLoader.
101*9190c2a8SAndroid Build Coastguard Worker     DataLoaderFeatures (*getFeatures)(struct DataLoader* self);
102*9190c2a8SAndroid Build Coastguard Worker 
103*9190c2a8SAndroid Build Coastguard Worker     void (*onPendingReadsWithUid)(struct DataLoader* self,
104*9190c2a8SAndroid Build Coastguard Worker                                   const IncFsReadInfoWithUid pendingReads[], int pendingReadsCount);
105*9190c2a8SAndroid Build Coastguard Worker     void (*onPageReadsWithUid)(struct DataLoader* self, const IncFsReadInfoWithUid pageReads[],
106*9190c2a8SAndroid Build Coastguard Worker                                int pageReadsCount);
107*9190c2a8SAndroid Build Coastguard Worker };
108*9190c2a8SAndroid Build Coastguard Worker 
109*9190c2a8SAndroid Build Coastguard Worker struct DataLoaderFactory {
110*9190c2a8SAndroid Build Coastguard Worker     struct DataLoader* (*onCreate)(struct DataLoaderFactory* self, const struct DataLoaderParams*,
111*9190c2a8SAndroid Build Coastguard Worker                                    DataLoaderFilesystemConnectorPtr, DataLoaderStatusListenerPtr,
112*9190c2a8SAndroid Build Coastguard Worker                                    DataLoaderServiceVmPtr, DataLoaderServiceConnectorPtr,
113*9190c2a8SAndroid Build Coastguard Worker                                    DataLoaderServiceParamsPtr);
114*9190c2a8SAndroid Build Coastguard Worker };
115*9190c2a8SAndroid Build Coastguard Worker void DataLoader_Initialize(struct DataLoaderFactory*);
116*9190c2a8SAndroid Build Coastguard Worker void DataLoader_Initialize_WithFeatures(struct DataLoaderFactory*);
117*9190c2a8SAndroid Build Coastguard Worker 
118*9190c2a8SAndroid Build Coastguard Worker void DataLoader_FilesystemConnector_writeData(DataLoaderFilesystemConnectorPtr, jstring name,
119*9190c2a8SAndroid Build Coastguard Worker                                               jlong offsetBytes, jlong lengthBytes,
120*9190c2a8SAndroid Build Coastguard Worker                                               jobject incomingFd);
121*9190c2a8SAndroid Build Coastguard Worker 
122*9190c2a8SAndroid Build Coastguard Worker // Returns a newly opened file descriptor and gives the ownership to the caller.
123*9190c2a8SAndroid Build Coastguard Worker int DataLoader_FilesystemConnector_openForSpecialOps(DataLoaderFilesystemConnectorPtr,
124*9190c2a8SAndroid Build Coastguard Worker                                                      IncFsFileId fid);
125*9190c2a8SAndroid Build Coastguard Worker 
126*9190c2a8SAndroid Build Coastguard Worker int DataLoader_FilesystemConnector_writeBlocks(DataLoaderFilesystemConnectorPtr,
127*9190c2a8SAndroid Build Coastguard Worker                                                const IncFsDataBlock blocks[], int blocksCount);
128*9190c2a8SAndroid Build Coastguard Worker // INCFS_MAX_FILE_ATTR_SIZE
129*9190c2a8SAndroid Build Coastguard Worker int DataLoader_FilesystemConnector_getRawMetadata(DataLoaderFilesystemConnectorPtr, IncFsFileId fid,
130*9190c2a8SAndroid Build Coastguard Worker                                                   char buffer[], size_t* bufferSize);
131*9190c2a8SAndroid Build Coastguard Worker 
132*9190c2a8SAndroid Build Coastguard Worker bool DataLoader_FilesystemConnector_setParams(DataLoaderFilesystemConnectorPtr,
133*9190c2a8SAndroid Build Coastguard Worker                                               DataLoaderFilesystemParams params);
134*9190c2a8SAndroid Build Coastguard Worker 
135*9190c2a8SAndroid Build Coastguard Worker int DataLoader_StatusListener_reportStatus(DataLoaderStatusListenerPtr listener,
136*9190c2a8SAndroid Build Coastguard Worker                                            DataLoaderStatus status);
137*9190c2a8SAndroid Build Coastguard Worker 
138*9190c2a8SAndroid Build Coastguard Worker // DataLoaderService JNI
139*9190c2a8SAndroid Build Coastguard Worker bool DataLoaderService_OnCreate(JNIEnv* env, jobject service, jint storageId, jobject control,
140*9190c2a8SAndroid Build Coastguard Worker                                 jobject params, jobject listener);
141*9190c2a8SAndroid Build Coastguard Worker bool DataLoaderService_OnStart(JNIEnv* env, jint storageId);
142*9190c2a8SAndroid Build Coastguard Worker bool DataLoaderService_OnStop(JNIEnv* env, jint storageId);
143*9190c2a8SAndroid Build Coastguard Worker bool DataLoaderService_OnDestroy(JNIEnv* env, jint storageId);
144*9190c2a8SAndroid Build Coastguard Worker 
145*9190c2a8SAndroid Build Coastguard Worker bool DataLoaderService_OnPrepareImage(JNIEnv* env, jint storageId, jobjectArray addedFiles,
146*9190c2a8SAndroid Build Coastguard Worker                                       jobjectArray removedFiles);
147*9190c2a8SAndroid Build Coastguard Worker 
148*9190c2a8SAndroid Build Coastguard Worker __END_DECLS
149*9190c2a8SAndroid Build Coastguard Worker 
150*9190c2a8SAndroid Build Coastguard Worker #endif // ANDROID_INCREMENTAL_FILE_SYSTEM_DATA_LOADER_NDK_H
151