diff options
Diffstat (limited to '')
-rw-r--r-- | adbbu/twadbstream.h | 112 |
1 files changed, 112 insertions, 0 deletions
diff --git a/adbbu/twadbstream.h b/adbbu/twadbstream.h new file mode 100644 index 000000000..bef463cf8 --- /dev/null +++ b/adbbu/twadbstream.h @@ -0,0 +1,112 @@ +/* + TWRP is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + TWRP is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with TWRP. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef __TWADBSTREAM_H +#define __TWADBSTREAM_H + +#define TWRPARG "--twrp" +#define TWRP_BACKUP_ARG "backup" +#define TWRP_RESTORE_ARG "restore" +#define TWRP_STREAM_ARG "stream" +#define TW_ADB_BACKUP "/tmp/twadbbackup" //FIFO for adb backup +#define TW_ADB_RESTORE "/tmp/twadbrestore" //FIFO for adb restore +#define TW_ADB_BU_CONTROL "/tmp/twadbbucontrol" //FIFO for sending control from TWRP to ADB Backup +#define TW_ADB_TWRP_CONTROL "/tmp/twadbtwrpcontrol" //FIFO for sending control from ADB Backup to TWRP +#define TWRP "TWRP" //Magic Value +#define ADB_BU_MAX_ERROR 20 //Max amount of errors for while loops +#define ADB_BACKUP_OP "adbbackup" +#define ADB_RESTORE_OP "adbrestore" + +//ADB Backup Control Commands +#define TWSTREAMHDR "twstreamheader" //TWRP Parititon Count Control +#define TWFN "twfilename" //TWRP Filename Control +#define TWIMG "twimage" //TWRP Image name Control +#define TWEOF "tweof" //End of File for Image/File +#define MD5TRAILER "md5trailer" //Image/File MD5 Trailer +#define TWDATA "twdatablock" // twrp adb backup data block header +#define TWMD5 "twverifymd5" //This command is compared to the md5trailer by ORS to verify transfer +#define TWENDADB "twendadb" //End Protocol +#define TWERROR "twerror" //Send error +#define ADB_BACKUP_VERSION 3 //Backup Version +#define DATA_MAX_CHUNK_SIZE 1048576 //Maximum size between each data header +#define MAX_ADB_READ 512 //align with default tar size for amount to read fom adb stream + +/* +structs for adb backup need to align to 512 bytes for reading 512 +bytes at a time +Each struct contains a crc field so that when we are checking for commands +and the crc doesn't match we still assume it's data matching the command +struct but not really a command +*/ + +/* stream format: + | TW ADB Backup Header | + | TW File Stream Header | + | File Data | + | File/Image MD5 Trailer | + | TW File Stream Header | + | File Data | + | File/Image MD5 Trailer | + | etc... | +*/ + +//determine whether struct is 512 bytes, if not fail compilation +#define ADBSTRUCT_STATIC_ASSERT(structure) typedef char adb_assertion[( !!(structure) )*2-1 ] + +//generic cmd structure to align fields for sending commands to and from adb backup +struct AdbBackupControlType { + char start_of_header[8]; //stores the magic value #define TWRP + char type[16]; //stores the type of command, TWENDADB, TWCNT, TWEOF, TWMD5, TWDATA and TWERROR + uint32_t crc; //stores the zlib 32 bit crc of the AdbBackupControlType struct to allow for making sure we are processing metadata + char space[484]; //stores space to align the struct to 512 bytes + + //return a C++ string while not reading outside the type char array + std::string get_type() { + return std::string(type, strnlen(type, sizeof(type)-1)); + } +}; + +//general info for file metadata stored in adb backup header +struct twfilehdr { + char start_of_header[8]; //stores the magic value #define TWRP + char type[16]; //stores the type of file header, TWFN or TWIMG + uint64_t size; //stores the size of the file contained after this header in the backup file + uint64_t compressed; //stores whether the file is compressed or not. 1 == compressed and 0 == uncompressed + uint32_t crc; //stores the zlib 32 bit crc of the twfilehdr struct to allow for making sure we are processing metadata + char name[468]; //stores the filename of the file +}; + +//md5 for files stored as a trailer to files in the adb backup file to check +//that they are restored correctly +struct AdbBackupFileTrailer { + char start_of_trailer[8]; //stores the magic value #define TWRP + char type[16]; //stores the AdbBackupFileTrailer type MD5TRAILER + uint32_t crc; //stores the zlib 32 bit crc of the AdbBackupFileTrailer struct to allow for making sure we are processing metadata + uint32_t ident; //stores crc to determine if header is encapsulated in stream as data + char md5[40]; //stores the md5 computation of the file + char space[440]; //stores space to align the struct to 512 bytes +}; + +//info for version and number of partitions backed up +struct AdbBackupStreamHeader { + char start_of_header[8]; //stores the magic value #define TWRP + char type[16]; //stores the AdbBackupStreamHeader value TWCNT + uint64_t partition_count; //stores the number of partitions to restore in the stream + uint64_t version; //stores the version of adb backup. increment ADB_BACKUP_VERSION each time the metadata is updated + uint32_t crc; //stores the zlib 32 bit crc of the AdbBackupStreamHeader struct to allow for making sure we are processing metadata + char space[468]; //stores space to align the struct to 512 bytes +}; + +#endif //__TWADBSTREAM_H |