├── LICENSE ├── README.md ├── chunk_server.proto ├── chunk_server_pb2.py ├── cloud_kit.proto ├── cloud_kit_pb2.py ├── iOS9_iCloud_POC.py ├── icloud.proto ├── icloud_pb2.py ├── pbuf.py └── requirements.txt /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 devzero0 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | 23 | ============================================================================= 24 | chunk_server.proto, cloud_kit.proto, icloud.proto 25 | 26 | The MIT License (MIT) 27 | 28 | Copyright (c) 2015 Ahseya 29 | 30 | Permission is hereby granted, free of charge, to any person obtaining a copy 31 | of this software and associated documentation files (the "Software"), to deal 32 | in the Software without restriction, including without limitation the rights 33 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 34 | copies of the Software, and to permit persons to whom the Software is 35 | furnished to do so, subject to the following conditions: 36 | 37 | The above copyright notice and this permission notice shall be included in all 38 | copies or substantial portions of the Software. 39 | 40 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 41 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 42 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 43 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 44 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 45 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 46 | SOFTWARE. 47 | 48 | ============================================================================= 49 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # IOS 9 iCloud Proof of Concept 2 | 3 | This is a (probably poor) reimplementation of some of the functionality of [InflatableDonkey](https://github.com/horrorho/InflatableDonkey) in Python 2.7 for folks that want to play with trying to recover iOS 9 iCloud backups in Python. For more information on what this is all about see the [InflatableDonkey](https://github.com/horrorho/InflatableDonkey) project and [this iLoot issue](https://github.com/hackappcom/iloot/issues/62). 4 | 5 | The code is far from "production quality" and is just a Proof of Concept for hacking on. 6 | 7 | ## Build 8 | First, create a virtualenv, as one is wont to do. E.g.: 9 | 10 | mkvirtualenv ios9_icloud_poc --no-site-packages 11 | 12 | Then install the requirements: 13 | 14 | pip install -r requirements.txt 15 | 16 | ## Usage 17 | 18 | iOS9_iCloud_POC.py [-d -s -m ] ( | ) 19 | iOS9_iCloud_POC.py --token 20 | iOS9_iCloud_POC.py (-h | --help) 21 | iOS9_iCloud_POC.py --version 22 | 23 | Options: 24 | -d,--device Device, default: 0 = first device 25 | -s,--snapshot Snapshot, default: 0 = first snapshot 26 | -m,--manifest Manifest, default: 0 = first manifest 27 | --token Display dsPrsID:mmeAuthToken token and exit 28 | -h --help Show this screen 29 | --version Show version 30 | 31 | 32 | ## Credits 33 | [horrorho](https://github.com/horrorho) for inflatableDonkey, and everyone that is credited there 34 | 35 | [hackappcom](https://github.com/hackappcom) for iLoot 36 | -------------------------------------------------------------------------------- /chunk_server.proto: -------------------------------------------------------------------------------- 1 | // source https://code.google.com/p/mobileme 2 | // MMCS protobuf definitions v 2011-11-01 3 | // MobileMe Content Stream aka iCloud 4 | // 5 | // reversed by Lokkju 6 | // modified Ahseya 7 | 8 | message ChunkInfo { 9 | required bytes chunk_checksum = 1; 10 | optional bytes chunk_encryption_key = 2; 11 | required uint32 chunk_length = 3; 12 | } 13 | message NameValuePair { 14 | required string name = 1; 15 | required string value = 2; 16 | } 17 | message HostInfo { 18 | required string hostname = 1; 19 | required uint32 port = 2; 20 | required string method = 3; 21 | required string uri = 4; 22 | required string transport_protocol = 5; 23 | required string transport_protocol_version = 6; 24 | required string scheme = 7; 25 | repeated NameValuePair headers = 8; 26 | optional string datacenter = 9; 27 | optional uint64 expiry = 11; 28 | } 29 | message ErrorResponse { 30 | required string domain = 1; 31 | required int32 error_code = 2; 32 | optional string error_description = 3; 33 | repeated ErrorResponse underlying_errors = 4; 34 | repeated NameValuePair name_value_pair = 5; 35 | } 36 | message FileError { 37 | required bytes file_checksum = 1; 38 | required ErrorResponse error_response = 2; 39 | } 40 | message ChunkError { 41 | required bytes chunk_checksum = 1; 42 | required ErrorResponse error_response = 2; 43 | } 44 | message ChunkErrorIndex { 45 | required bytes chunk_checksum = 1; 46 | required ErrorResponse error_response = 2; 47 | required uint32 chunk_index = 3; 48 | } 49 | message FileChunkError { 50 | required bytes file_checksum = 1; 51 | repeated ChunkErrorIndex chunk_error = 2; 52 | } 53 | message StorageContainerError { 54 | required string storage_container_key = 1; 55 | required ErrorResponse error_response = 2; 56 | } 57 | message MethodCompletionInfo { 58 | required string url = 1; 59 | required uint32 response_status_code = 2; 60 | optional string response_status_line = 3; 61 | repeated NameValuePair vendor_response_headers = 4; 62 | optional bytes response_body = 5; 63 | optional ErrorResponse error = 6; 64 | optional bytes client_computed_md5 = 7; 65 | repeated NameValuePair vendor_nv_pairs = 8; 66 | repeated NameValuePair client_nv_pairs = 9; 67 | required string storage_container_authorization_token = 10; 68 | } 69 | message MethodCompletionInfoList { 70 | repeated MethodCompletionInfo method_completion_info = 1; 71 | } 72 | message FileChunkList { 73 | required bytes file_checksum = 1; 74 | required string authorization = 2; 75 | repeated ChunkInfo chunk_info = 3; 76 | } 77 | message FileChunkLists { 78 | repeated FileChunkList file_chunk_list = 1; 79 | } 80 | message StorageContainerChunkList { 81 | required bytes storage_container_key = 1; 82 | required HostInfo host_info = 2; 83 | repeated bytes chunk_checksum = 3; 84 | required string storage_container_authorization_token = 4; 85 | } 86 | message StorageContainerChunkLists { 87 | repeated StorageContainerChunkList storage_container_chunk_list = 1; 88 | repeated FileError file_error = 2; 89 | optional uint32 verbosity_level = 3; 90 | } 91 | message StorageContainerErrorList { 92 | repeated StorageContainerError storage_container_error = 1; 93 | } 94 | message FileChecksumAuthorization { 95 | required bytes file_checksum = 1; 96 | required string authorization = 2; 97 | repeated bytes chunk_checksums = 3; 98 | } 99 | message FileChecksumAuthorizationList { 100 | repeated FileChecksumAuthorization file_checksum_authorization = 1; 101 | } 102 | message ChunkReference { 103 | required uint64 container_index = 1; 104 | required uint64 chunk_index = 2; 105 | } 106 | message FileChecksumChunkReferences { 107 | required bytes file_checksum = 1; 108 | repeated ChunkReference chunk_references = 2; 109 | } 110 | message FileChecksumStorageHostChunkLists { 111 | repeated StorageHostChunkList storage_host_chunk_list = 1; 112 | repeated FileChecksumChunkReferences file_checksum_chunk_references = 2; 113 | } 114 | message FileGroups { 115 | repeated FileChecksumStorageHostChunkLists file_groups = 1; 116 | repeated FileError file_error = 2; 117 | repeated FileChunkError file_chunk_error = 3; 118 | optional uint32 verbosity_level = 4; 119 | } 120 | message ChunkChecksumList { 121 | repeated bytes chunk_checksum = 1; 122 | } 123 | message StorageHostChunkList { 124 | required HostInfo host_info = 1; 125 | repeated ChunkInfo chunk_info = 2; 126 | required string storage_container_key = 3; 127 | required string storage_container_authorization_token = 4; 128 | } 129 | message StorageHostChunkLists { 130 | repeated StorageHostChunkList storage_host_chunk_list = 1; 131 | repeated ChunkError chunk_error = 2; 132 | } 133 | 134 | -------------------------------------------------------------------------------- /chunk_server_pb2.py: -------------------------------------------------------------------------------- 1 | # Generated by the protocol buffer compiler. DO NOT EDIT! 2 | # source: chunk_server.proto 3 | 4 | import sys 5 | _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | from google.protobuf import descriptor_pb2 11 | # @@protoc_insertion_point(imports) 12 | 13 | _sym_db = _symbol_database.Default() 14 | 15 | 16 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='chunk_server.proto', 20 | package='', 21 | serialized_pb=_b('\n\x12\x63hunk_server.proto\"W\n\tChunkInfo\x12\x16\n\x0e\x63hunk_checksum\x18\x01 \x02(\x0c\x12\x1c\n\x14\x63hunk_encryption_key\x18\x02 \x01(\x0c\x12\x14\n\x0c\x63hunk_length\x18\x03 \x02(\r\",\n\rNameValuePair\x12\x0c\n\x04name\x18\x01 \x02(\t\x12\r\n\x05value\x18\x02 \x02(\t\"\xdc\x01\n\x08HostInfo\x12\x10\n\x08hostname\x18\x01 \x02(\t\x12\x0c\n\x04port\x18\x02 \x02(\r\x12\x0e\n\x06method\x18\x03 \x02(\t\x12\x0b\n\x03uri\x18\x04 \x02(\t\x12\x1a\n\x12transport_protocol\x18\x05 \x02(\t\x12\"\n\x1atransport_protocol_version\x18\x06 \x02(\t\x12\x0e\n\x06scheme\x18\x07 \x02(\t\x12\x1f\n\x07headers\x18\x08 \x03(\x0b\x32\x0e.NameValuePair\x12\x12\n\ndatacenter\x18\t \x01(\t\x12\x0e\n\x06\x65xpiry\x18\x0b \x01(\x04\"\xa2\x01\n\rErrorResponse\x12\x0e\n\x06\x64omain\x18\x01 \x02(\t\x12\x12\n\nerror_code\x18\x02 \x02(\x05\x12\x19\n\x11\x65rror_description\x18\x03 \x01(\t\x12)\n\x11underlying_errors\x18\x04 \x03(\x0b\x32\x0e.ErrorResponse\x12\'\n\x0fname_value_pair\x18\x05 \x03(\x0b\x32\x0e.NameValuePair\"J\n\tFileError\x12\x15\n\rfile_checksum\x18\x01 \x02(\x0c\x12&\n\x0e\x65rror_response\x18\x02 \x02(\x0b\x32\x0e.ErrorResponse\"L\n\nChunkError\x12\x16\n\x0e\x63hunk_checksum\x18\x01 \x02(\x0c\x12&\n\x0e\x65rror_response\x18\x02 \x02(\x0b\x32\x0e.ErrorResponse\"f\n\x0f\x43hunkErrorIndex\x12\x16\n\x0e\x63hunk_checksum\x18\x01 \x02(\x0c\x12&\n\x0e\x65rror_response\x18\x02 \x02(\x0b\x32\x0e.ErrorResponse\x12\x13\n\x0b\x63hunk_index\x18\x03 \x02(\r\"N\n\x0e\x46ileChunkError\x12\x15\n\rfile_checksum\x18\x01 \x02(\x0c\x12%\n\x0b\x63hunk_error\x18\x02 \x03(\x0b\x32\x10.ChunkErrorIndex\"^\n\x15StorageContainerError\x12\x1d\n\x15storage_container_key\x18\x01 \x02(\t\x12&\n\x0e\x65rror_response\x18\x02 \x02(\x0b\x32\x0e.ErrorResponse\"\xe4\x02\n\x14MethodCompletionInfo\x12\x0b\n\x03url\x18\x01 \x02(\t\x12\x1c\n\x14response_status_code\x18\x02 \x02(\r\x12\x1c\n\x14response_status_line\x18\x03 \x01(\t\x12/\n\x17vendor_response_headers\x18\x04 \x03(\x0b\x32\x0e.NameValuePair\x12\x15\n\rresponse_body\x18\x05 \x01(\x0c\x12\x1d\n\x05\x65rror\x18\x06 \x01(\x0b\x32\x0e.ErrorResponse\x12\x1b\n\x13\x63lient_computed_md5\x18\x07 \x01(\x0c\x12\'\n\x0fvendor_nv_pairs\x18\x08 \x03(\x0b\x32\x0e.NameValuePair\x12\'\n\x0f\x63lient_nv_pairs\x18\t \x03(\x0b\x32\x0e.NameValuePair\x12-\n%storage_container_authorization_token\x18\n \x02(\t\"Q\n\x18MethodCompletionInfoList\x12\x35\n\x16method_completion_info\x18\x01 \x03(\x0b\x32\x15.MethodCompletionInfo\"]\n\rFileChunkList\x12\x15\n\rfile_checksum\x18\x01 \x02(\x0c\x12\x15\n\rauthorization\x18\x02 \x02(\t\x12\x1e\n\nchunk_info\x18\x03 \x03(\x0b\x32\n.ChunkInfo\"9\n\x0e\x46ileChunkLists\x12\'\n\x0f\x66ile_chunk_list\x18\x01 \x03(\x0b\x32\x0e.FileChunkList\"\x9f\x01\n\x19StorageContainerChunkList\x12\x1d\n\x15storage_container_key\x18\x01 \x02(\x0c\x12\x1c\n\thost_info\x18\x02 \x02(\x0b\x32\t.HostInfo\x12\x16\n\x0e\x63hunk_checksum\x18\x03 \x03(\x0c\x12-\n%storage_container_authorization_token\x18\x04 \x02(\t\"\x97\x01\n\x1aStorageContainerChunkLists\x12@\n\x1cstorage_container_chunk_list\x18\x01 \x03(\x0b\x32\x1a.StorageContainerChunkList\x12\x1e\n\nfile_error\x18\x02 \x03(\x0b\x32\n.FileError\x12\x17\n\x0fverbosity_level\x18\x03 \x01(\r\"T\n\x19StorageContainerErrorList\x12\x37\n\x17storage_container_error\x18\x01 \x03(\x0b\x32\x16.StorageContainerError\"b\n\x19\x46ileChecksumAuthorization\x12\x15\n\rfile_checksum\x18\x01 \x02(\x0c\x12\x15\n\rauthorization\x18\x02 \x02(\t\x12\x17\n\x0f\x63hunk_checksums\x18\x03 \x03(\x0c\"`\n\x1d\x46ileChecksumAuthorizationList\x12?\n\x1b\x66ile_checksum_authorization\x18\x01 \x03(\x0b\x32\x1a.FileChecksumAuthorization\">\n\x0e\x43hunkReference\x12\x17\n\x0f\x63ontainer_index\x18\x01 \x02(\x04\x12\x13\n\x0b\x63hunk_index\x18\x02 \x02(\x04\"_\n\x1b\x46ileChecksumChunkReferences\x12\x15\n\rfile_checksum\x18\x01 \x02(\x0c\x12)\n\x10\x63hunk_references\x18\x02 \x03(\x0b\x32\x0f.ChunkReference\"\xa1\x01\n!FileChecksumStorageHostChunkLists\x12\x36\n\x17storage_host_chunk_list\x18\x01 \x03(\x0b\x32\x15.StorageHostChunkList\x12\x44\n\x1e\x66ile_checksum_chunk_references\x18\x02 \x03(\x0b\x32\x1c.FileChecksumChunkReferences\"\xa9\x01\n\nFileGroups\x12\x37\n\x0b\x66ile_groups\x18\x01 \x03(\x0b\x32\".FileChecksumStorageHostChunkLists\x12\x1e\n\nfile_error\x18\x02 \x03(\x0b\x32\n.FileError\x12)\n\x10\x66ile_chunk_error\x18\x03 \x03(\x0b\x32\x0f.FileChunkError\x12\x17\n\x0fverbosity_level\x18\x04 \x01(\r\"+\n\x11\x43hunkChecksumList\x12\x16\n\x0e\x63hunk_checksum\x18\x01 \x03(\x0c\"\xa2\x01\n\x14StorageHostChunkList\x12\x1c\n\thost_info\x18\x01 \x02(\x0b\x32\t.HostInfo\x12\x1e\n\nchunk_info\x18\x02 \x03(\x0b\x32\n.ChunkInfo\x12\x1d\n\x15storage_container_key\x18\x03 \x02(\t\x12-\n%storage_container_authorization_token\x18\x04 \x02(\t\"q\n\x15StorageHostChunkLists\x12\x36\n\x17storage_host_chunk_list\x18\x01 \x03(\x0b\x32\x15.StorageHostChunkList\x12 \n\x0b\x63hunk_error\x18\x02 \x03(\x0b\x32\x0b.ChunkError') 22 | ) 23 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 24 | 25 | 26 | 27 | 28 | _CHUNKINFO = _descriptor.Descriptor( 29 | name='ChunkInfo', 30 | full_name='ChunkInfo', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | fields=[ 35 | _descriptor.FieldDescriptor( 36 | name='chunk_checksum', full_name='ChunkInfo.chunk_checksum', index=0, 37 | number=1, type=12, cpp_type=9, label=2, 38 | has_default_value=False, default_value=_b(""), 39 | message_type=None, enum_type=None, containing_type=None, 40 | is_extension=False, extension_scope=None, 41 | options=None), 42 | _descriptor.FieldDescriptor( 43 | name='chunk_encryption_key', full_name='ChunkInfo.chunk_encryption_key', index=1, 44 | number=2, type=12, cpp_type=9, label=1, 45 | has_default_value=False, default_value=_b(""), 46 | message_type=None, enum_type=None, containing_type=None, 47 | is_extension=False, extension_scope=None, 48 | options=None), 49 | _descriptor.FieldDescriptor( 50 | name='chunk_length', full_name='ChunkInfo.chunk_length', index=2, 51 | number=3, type=13, cpp_type=3, label=2, 52 | has_default_value=False, default_value=0, 53 | message_type=None, enum_type=None, containing_type=None, 54 | is_extension=False, extension_scope=None, 55 | options=None), 56 | ], 57 | extensions=[ 58 | ], 59 | nested_types=[], 60 | enum_types=[ 61 | ], 62 | options=None, 63 | is_extendable=False, 64 | extension_ranges=[], 65 | oneofs=[ 66 | ], 67 | serialized_start=22, 68 | serialized_end=109, 69 | ) 70 | 71 | 72 | _NAMEVALUEPAIR = _descriptor.Descriptor( 73 | name='NameValuePair', 74 | full_name='NameValuePair', 75 | filename=None, 76 | file=DESCRIPTOR, 77 | containing_type=None, 78 | fields=[ 79 | _descriptor.FieldDescriptor( 80 | name='name', full_name='NameValuePair.name', index=0, 81 | number=1, type=9, cpp_type=9, label=2, 82 | has_default_value=False, default_value=_b("").decode('utf-8'), 83 | message_type=None, enum_type=None, containing_type=None, 84 | is_extension=False, extension_scope=None, 85 | options=None), 86 | _descriptor.FieldDescriptor( 87 | name='value', full_name='NameValuePair.value', index=1, 88 | number=2, type=9, cpp_type=9, label=2, 89 | has_default_value=False, default_value=_b("").decode('utf-8'), 90 | message_type=None, enum_type=None, containing_type=None, 91 | is_extension=False, extension_scope=None, 92 | options=None), 93 | ], 94 | extensions=[ 95 | ], 96 | nested_types=[], 97 | enum_types=[ 98 | ], 99 | options=None, 100 | is_extendable=False, 101 | extension_ranges=[], 102 | oneofs=[ 103 | ], 104 | serialized_start=111, 105 | serialized_end=155, 106 | ) 107 | 108 | 109 | _HOSTINFO = _descriptor.Descriptor( 110 | name='HostInfo', 111 | full_name='HostInfo', 112 | filename=None, 113 | file=DESCRIPTOR, 114 | containing_type=None, 115 | fields=[ 116 | _descriptor.FieldDescriptor( 117 | name='hostname', full_name='HostInfo.hostname', index=0, 118 | number=1, type=9, cpp_type=9, label=2, 119 | has_default_value=False, default_value=_b("").decode('utf-8'), 120 | message_type=None, enum_type=None, containing_type=None, 121 | is_extension=False, extension_scope=None, 122 | options=None), 123 | _descriptor.FieldDescriptor( 124 | name='port', full_name='HostInfo.port', index=1, 125 | number=2, type=13, cpp_type=3, label=2, 126 | has_default_value=False, default_value=0, 127 | message_type=None, enum_type=None, containing_type=None, 128 | is_extension=False, extension_scope=None, 129 | options=None), 130 | _descriptor.FieldDescriptor( 131 | name='method', full_name='HostInfo.method', index=2, 132 | number=3, type=9, cpp_type=9, label=2, 133 | has_default_value=False, default_value=_b("").decode('utf-8'), 134 | message_type=None, enum_type=None, containing_type=None, 135 | is_extension=False, extension_scope=None, 136 | options=None), 137 | _descriptor.FieldDescriptor( 138 | name='uri', full_name='HostInfo.uri', index=3, 139 | number=4, type=9, cpp_type=9, label=2, 140 | has_default_value=False, default_value=_b("").decode('utf-8'), 141 | message_type=None, enum_type=None, containing_type=None, 142 | is_extension=False, extension_scope=None, 143 | options=None), 144 | _descriptor.FieldDescriptor( 145 | name='transport_protocol', full_name='HostInfo.transport_protocol', index=4, 146 | number=5, type=9, cpp_type=9, label=2, 147 | has_default_value=False, default_value=_b("").decode('utf-8'), 148 | message_type=None, enum_type=None, containing_type=None, 149 | is_extension=False, extension_scope=None, 150 | options=None), 151 | _descriptor.FieldDescriptor( 152 | name='transport_protocol_version', full_name='HostInfo.transport_protocol_version', index=5, 153 | number=6, type=9, cpp_type=9, label=2, 154 | has_default_value=False, default_value=_b("").decode('utf-8'), 155 | message_type=None, enum_type=None, containing_type=None, 156 | is_extension=False, extension_scope=None, 157 | options=None), 158 | _descriptor.FieldDescriptor( 159 | name='scheme', full_name='HostInfo.scheme', index=6, 160 | number=7, type=9, cpp_type=9, label=2, 161 | has_default_value=False, default_value=_b("").decode('utf-8'), 162 | message_type=None, enum_type=None, containing_type=None, 163 | is_extension=False, extension_scope=None, 164 | options=None), 165 | _descriptor.FieldDescriptor( 166 | name='headers', full_name='HostInfo.headers', index=7, 167 | number=8, type=11, cpp_type=10, label=3, 168 | has_default_value=False, default_value=[], 169 | message_type=None, enum_type=None, containing_type=None, 170 | is_extension=False, extension_scope=None, 171 | options=None), 172 | _descriptor.FieldDescriptor( 173 | name='datacenter', full_name='HostInfo.datacenter', index=8, 174 | number=9, type=9, cpp_type=9, label=1, 175 | has_default_value=False, default_value=_b("").decode('utf-8'), 176 | message_type=None, enum_type=None, containing_type=None, 177 | is_extension=False, extension_scope=None, 178 | options=None), 179 | _descriptor.FieldDescriptor( 180 | name='expiry', full_name='HostInfo.expiry', index=9, 181 | number=11, type=4, cpp_type=4, label=1, 182 | has_default_value=False, default_value=0, 183 | message_type=None, enum_type=None, containing_type=None, 184 | is_extension=False, extension_scope=None, 185 | options=None), 186 | ], 187 | extensions=[ 188 | ], 189 | nested_types=[], 190 | enum_types=[ 191 | ], 192 | options=None, 193 | is_extendable=False, 194 | extension_ranges=[], 195 | oneofs=[ 196 | ], 197 | serialized_start=158, 198 | serialized_end=378, 199 | ) 200 | 201 | 202 | _ERRORRESPONSE = _descriptor.Descriptor( 203 | name='ErrorResponse', 204 | full_name='ErrorResponse', 205 | filename=None, 206 | file=DESCRIPTOR, 207 | containing_type=None, 208 | fields=[ 209 | _descriptor.FieldDescriptor( 210 | name='domain', full_name='ErrorResponse.domain', index=0, 211 | number=1, type=9, cpp_type=9, label=2, 212 | has_default_value=False, default_value=_b("").decode('utf-8'), 213 | message_type=None, enum_type=None, containing_type=None, 214 | is_extension=False, extension_scope=None, 215 | options=None), 216 | _descriptor.FieldDescriptor( 217 | name='error_code', full_name='ErrorResponse.error_code', index=1, 218 | number=2, type=5, cpp_type=1, label=2, 219 | has_default_value=False, default_value=0, 220 | message_type=None, enum_type=None, containing_type=None, 221 | is_extension=False, extension_scope=None, 222 | options=None), 223 | _descriptor.FieldDescriptor( 224 | name='error_description', full_name='ErrorResponse.error_description', index=2, 225 | number=3, type=9, cpp_type=9, label=1, 226 | has_default_value=False, default_value=_b("").decode('utf-8'), 227 | message_type=None, enum_type=None, containing_type=None, 228 | is_extension=False, extension_scope=None, 229 | options=None), 230 | _descriptor.FieldDescriptor( 231 | name='underlying_errors', full_name='ErrorResponse.underlying_errors', index=3, 232 | number=4, type=11, cpp_type=10, label=3, 233 | has_default_value=False, default_value=[], 234 | message_type=None, enum_type=None, containing_type=None, 235 | is_extension=False, extension_scope=None, 236 | options=None), 237 | _descriptor.FieldDescriptor( 238 | name='name_value_pair', full_name='ErrorResponse.name_value_pair', index=4, 239 | number=5, type=11, cpp_type=10, label=3, 240 | has_default_value=False, default_value=[], 241 | message_type=None, enum_type=None, containing_type=None, 242 | is_extension=False, extension_scope=None, 243 | options=None), 244 | ], 245 | extensions=[ 246 | ], 247 | nested_types=[], 248 | enum_types=[ 249 | ], 250 | options=None, 251 | is_extendable=False, 252 | extension_ranges=[], 253 | oneofs=[ 254 | ], 255 | serialized_start=381, 256 | serialized_end=543, 257 | ) 258 | 259 | 260 | _FILEERROR = _descriptor.Descriptor( 261 | name='FileError', 262 | full_name='FileError', 263 | filename=None, 264 | file=DESCRIPTOR, 265 | containing_type=None, 266 | fields=[ 267 | _descriptor.FieldDescriptor( 268 | name='file_checksum', full_name='FileError.file_checksum', index=0, 269 | number=1, type=12, cpp_type=9, label=2, 270 | has_default_value=False, default_value=_b(""), 271 | message_type=None, enum_type=None, containing_type=None, 272 | is_extension=False, extension_scope=None, 273 | options=None), 274 | _descriptor.FieldDescriptor( 275 | name='error_response', full_name='FileError.error_response', index=1, 276 | number=2, type=11, cpp_type=10, label=2, 277 | has_default_value=False, default_value=None, 278 | message_type=None, enum_type=None, containing_type=None, 279 | is_extension=False, extension_scope=None, 280 | options=None), 281 | ], 282 | extensions=[ 283 | ], 284 | nested_types=[], 285 | enum_types=[ 286 | ], 287 | options=None, 288 | is_extendable=False, 289 | extension_ranges=[], 290 | oneofs=[ 291 | ], 292 | serialized_start=545, 293 | serialized_end=619, 294 | ) 295 | 296 | 297 | _CHUNKERROR = _descriptor.Descriptor( 298 | name='ChunkError', 299 | full_name='ChunkError', 300 | filename=None, 301 | file=DESCRIPTOR, 302 | containing_type=None, 303 | fields=[ 304 | _descriptor.FieldDescriptor( 305 | name='chunk_checksum', full_name='ChunkError.chunk_checksum', index=0, 306 | number=1, type=12, cpp_type=9, label=2, 307 | has_default_value=False, default_value=_b(""), 308 | message_type=None, enum_type=None, containing_type=None, 309 | is_extension=False, extension_scope=None, 310 | options=None), 311 | _descriptor.FieldDescriptor( 312 | name='error_response', full_name='ChunkError.error_response', index=1, 313 | number=2, type=11, cpp_type=10, label=2, 314 | has_default_value=False, default_value=None, 315 | message_type=None, enum_type=None, containing_type=None, 316 | is_extension=False, extension_scope=None, 317 | options=None), 318 | ], 319 | extensions=[ 320 | ], 321 | nested_types=[], 322 | enum_types=[ 323 | ], 324 | options=None, 325 | is_extendable=False, 326 | extension_ranges=[], 327 | oneofs=[ 328 | ], 329 | serialized_start=621, 330 | serialized_end=697, 331 | ) 332 | 333 | 334 | _CHUNKERRORINDEX = _descriptor.Descriptor( 335 | name='ChunkErrorIndex', 336 | full_name='ChunkErrorIndex', 337 | filename=None, 338 | file=DESCRIPTOR, 339 | containing_type=None, 340 | fields=[ 341 | _descriptor.FieldDescriptor( 342 | name='chunk_checksum', full_name='ChunkErrorIndex.chunk_checksum', index=0, 343 | number=1, type=12, cpp_type=9, label=2, 344 | has_default_value=False, default_value=_b(""), 345 | message_type=None, enum_type=None, containing_type=None, 346 | is_extension=False, extension_scope=None, 347 | options=None), 348 | _descriptor.FieldDescriptor( 349 | name='error_response', full_name='ChunkErrorIndex.error_response', index=1, 350 | number=2, type=11, cpp_type=10, label=2, 351 | has_default_value=False, default_value=None, 352 | message_type=None, enum_type=None, containing_type=None, 353 | is_extension=False, extension_scope=None, 354 | options=None), 355 | _descriptor.FieldDescriptor( 356 | name='chunk_index', full_name='ChunkErrorIndex.chunk_index', index=2, 357 | number=3, type=13, cpp_type=3, label=2, 358 | has_default_value=False, default_value=0, 359 | message_type=None, enum_type=None, containing_type=None, 360 | is_extension=False, extension_scope=None, 361 | options=None), 362 | ], 363 | extensions=[ 364 | ], 365 | nested_types=[], 366 | enum_types=[ 367 | ], 368 | options=None, 369 | is_extendable=False, 370 | extension_ranges=[], 371 | oneofs=[ 372 | ], 373 | serialized_start=699, 374 | serialized_end=801, 375 | ) 376 | 377 | 378 | _FILECHUNKERROR = _descriptor.Descriptor( 379 | name='FileChunkError', 380 | full_name='FileChunkError', 381 | filename=None, 382 | file=DESCRIPTOR, 383 | containing_type=None, 384 | fields=[ 385 | _descriptor.FieldDescriptor( 386 | name='file_checksum', full_name='FileChunkError.file_checksum', index=0, 387 | number=1, type=12, cpp_type=9, label=2, 388 | has_default_value=False, default_value=_b(""), 389 | message_type=None, enum_type=None, containing_type=None, 390 | is_extension=False, extension_scope=None, 391 | options=None), 392 | _descriptor.FieldDescriptor( 393 | name='chunk_error', full_name='FileChunkError.chunk_error', index=1, 394 | number=2, type=11, cpp_type=10, label=3, 395 | has_default_value=False, default_value=[], 396 | message_type=None, enum_type=None, containing_type=None, 397 | is_extension=False, extension_scope=None, 398 | options=None), 399 | ], 400 | extensions=[ 401 | ], 402 | nested_types=[], 403 | enum_types=[ 404 | ], 405 | options=None, 406 | is_extendable=False, 407 | extension_ranges=[], 408 | oneofs=[ 409 | ], 410 | serialized_start=803, 411 | serialized_end=881, 412 | ) 413 | 414 | 415 | _STORAGECONTAINERERROR = _descriptor.Descriptor( 416 | name='StorageContainerError', 417 | full_name='StorageContainerError', 418 | filename=None, 419 | file=DESCRIPTOR, 420 | containing_type=None, 421 | fields=[ 422 | _descriptor.FieldDescriptor( 423 | name='storage_container_key', full_name='StorageContainerError.storage_container_key', index=0, 424 | number=1, type=9, cpp_type=9, label=2, 425 | has_default_value=False, default_value=_b("").decode('utf-8'), 426 | message_type=None, enum_type=None, containing_type=None, 427 | is_extension=False, extension_scope=None, 428 | options=None), 429 | _descriptor.FieldDescriptor( 430 | name='error_response', full_name='StorageContainerError.error_response', index=1, 431 | number=2, type=11, cpp_type=10, label=2, 432 | has_default_value=False, default_value=None, 433 | message_type=None, enum_type=None, containing_type=None, 434 | is_extension=False, extension_scope=None, 435 | options=None), 436 | ], 437 | extensions=[ 438 | ], 439 | nested_types=[], 440 | enum_types=[ 441 | ], 442 | options=None, 443 | is_extendable=False, 444 | extension_ranges=[], 445 | oneofs=[ 446 | ], 447 | serialized_start=883, 448 | serialized_end=977, 449 | ) 450 | 451 | 452 | _METHODCOMPLETIONINFO = _descriptor.Descriptor( 453 | name='MethodCompletionInfo', 454 | full_name='MethodCompletionInfo', 455 | filename=None, 456 | file=DESCRIPTOR, 457 | containing_type=None, 458 | fields=[ 459 | _descriptor.FieldDescriptor( 460 | name='url', full_name='MethodCompletionInfo.url', index=0, 461 | number=1, type=9, cpp_type=9, label=2, 462 | has_default_value=False, default_value=_b("").decode('utf-8'), 463 | message_type=None, enum_type=None, containing_type=None, 464 | is_extension=False, extension_scope=None, 465 | options=None), 466 | _descriptor.FieldDescriptor( 467 | name='response_status_code', full_name='MethodCompletionInfo.response_status_code', index=1, 468 | number=2, type=13, cpp_type=3, label=2, 469 | has_default_value=False, default_value=0, 470 | message_type=None, enum_type=None, containing_type=None, 471 | is_extension=False, extension_scope=None, 472 | options=None), 473 | _descriptor.FieldDescriptor( 474 | name='response_status_line', full_name='MethodCompletionInfo.response_status_line', index=2, 475 | number=3, type=9, cpp_type=9, label=1, 476 | has_default_value=False, default_value=_b("").decode('utf-8'), 477 | message_type=None, enum_type=None, containing_type=None, 478 | is_extension=False, extension_scope=None, 479 | options=None), 480 | _descriptor.FieldDescriptor( 481 | name='vendor_response_headers', full_name='MethodCompletionInfo.vendor_response_headers', index=3, 482 | number=4, type=11, cpp_type=10, label=3, 483 | has_default_value=False, default_value=[], 484 | message_type=None, enum_type=None, containing_type=None, 485 | is_extension=False, extension_scope=None, 486 | options=None), 487 | _descriptor.FieldDescriptor( 488 | name='response_body', full_name='MethodCompletionInfo.response_body', index=4, 489 | number=5, type=12, cpp_type=9, label=1, 490 | has_default_value=False, default_value=_b(""), 491 | message_type=None, enum_type=None, containing_type=None, 492 | is_extension=False, extension_scope=None, 493 | options=None), 494 | _descriptor.FieldDescriptor( 495 | name='error', full_name='MethodCompletionInfo.error', index=5, 496 | number=6, type=11, cpp_type=10, label=1, 497 | has_default_value=False, default_value=None, 498 | message_type=None, enum_type=None, containing_type=None, 499 | is_extension=False, extension_scope=None, 500 | options=None), 501 | _descriptor.FieldDescriptor( 502 | name='client_computed_md5', full_name='MethodCompletionInfo.client_computed_md5', index=6, 503 | number=7, type=12, cpp_type=9, label=1, 504 | has_default_value=False, default_value=_b(""), 505 | message_type=None, enum_type=None, containing_type=None, 506 | is_extension=False, extension_scope=None, 507 | options=None), 508 | _descriptor.FieldDescriptor( 509 | name='vendor_nv_pairs', full_name='MethodCompletionInfo.vendor_nv_pairs', index=7, 510 | number=8, type=11, cpp_type=10, label=3, 511 | has_default_value=False, default_value=[], 512 | message_type=None, enum_type=None, containing_type=None, 513 | is_extension=False, extension_scope=None, 514 | options=None), 515 | _descriptor.FieldDescriptor( 516 | name='client_nv_pairs', full_name='MethodCompletionInfo.client_nv_pairs', index=8, 517 | number=9, type=11, cpp_type=10, label=3, 518 | has_default_value=False, default_value=[], 519 | message_type=None, enum_type=None, containing_type=None, 520 | is_extension=False, extension_scope=None, 521 | options=None), 522 | _descriptor.FieldDescriptor( 523 | name='storage_container_authorization_token', full_name='MethodCompletionInfo.storage_container_authorization_token', index=9, 524 | number=10, type=9, cpp_type=9, label=2, 525 | has_default_value=False, default_value=_b("").decode('utf-8'), 526 | message_type=None, enum_type=None, containing_type=None, 527 | is_extension=False, extension_scope=None, 528 | options=None), 529 | ], 530 | extensions=[ 531 | ], 532 | nested_types=[], 533 | enum_types=[ 534 | ], 535 | options=None, 536 | is_extendable=False, 537 | extension_ranges=[], 538 | oneofs=[ 539 | ], 540 | serialized_start=980, 541 | serialized_end=1336, 542 | ) 543 | 544 | 545 | _METHODCOMPLETIONINFOLIST = _descriptor.Descriptor( 546 | name='MethodCompletionInfoList', 547 | full_name='MethodCompletionInfoList', 548 | filename=None, 549 | file=DESCRIPTOR, 550 | containing_type=None, 551 | fields=[ 552 | _descriptor.FieldDescriptor( 553 | name='method_completion_info', full_name='MethodCompletionInfoList.method_completion_info', index=0, 554 | number=1, type=11, cpp_type=10, label=3, 555 | has_default_value=False, default_value=[], 556 | message_type=None, enum_type=None, containing_type=None, 557 | is_extension=False, extension_scope=None, 558 | options=None), 559 | ], 560 | extensions=[ 561 | ], 562 | nested_types=[], 563 | enum_types=[ 564 | ], 565 | options=None, 566 | is_extendable=False, 567 | extension_ranges=[], 568 | oneofs=[ 569 | ], 570 | serialized_start=1338, 571 | serialized_end=1419, 572 | ) 573 | 574 | 575 | _FILECHUNKLIST = _descriptor.Descriptor( 576 | name='FileChunkList', 577 | full_name='FileChunkList', 578 | filename=None, 579 | file=DESCRIPTOR, 580 | containing_type=None, 581 | fields=[ 582 | _descriptor.FieldDescriptor( 583 | name='file_checksum', full_name='FileChunkList.file_checksum', index=0, 584 | number=1, type=12, cpp_type=9, label=2, 585 | has_default_value=False, default_value=_b(""), 586 | message_type=None, enum_type=None, containing_type=None, 587 | is_extension=False, extension_scope=None, 588 | options=None), 589 | _descriptor.FieldDescriptor( 590 | name='authorization', full_name='FileChunkList.authorization', index=1, 591 | number=2, type=9, cpp_type=9, label=2, 592 | has_default_value=False, default_value=_b("").decode('utf-8'), 593 | message_type=None, enum_type=None, containing_type=None, 594 | is_extension=False, extension_scope=None, 595 | options=None), 596 | _descriptor.FieldDescriptor( 597 | name='chunk_info', full_name='FileChunkList.chunk_info', index=2, 598 | number=3, type=11, cpp_type=10, label=3, 599 | has_default_value=False, default_value=[], 600 | message_type=None, enum_type=None, containing_type=None, 601 | is_extension=False, extension_scope=None, 602 | options=None), 603 | ], 604 | extensions=[ 605 | ], 606 | nested_types=[], 607 | enum_types=[ 608 | ], 609 | options=None, 610 | is_extendable=False, 611 | extension_ranges=[], 612 | oneofs=[ 613 | ], 614 | serialized_start=1421, 615 | serialized_end=1514, 616 | ) 617 | 618 | 619 | _FILECHUNKLISTS = _descriptor.Descriptor( 620 | name='FileChunkLists', 621 | full_name='FileChunkLists', 622 | filename=None, 623 | file=DESCRIPTOR, 624 | containing_type=None, 625 | fields=[ 626 | _descriptor.FieldDescriptor( 627 | name='file_chunk_list', full_name='FileChunkLists.file_chunk_list', index=0, 628 | number=1, type=11, cpp_type=10, label=3, 629 | has_default_value=False, default_value=[], 630 | message_type=None, enum_type=None, containing_type=None, 631 | is_extension=False, extension_scope=None, 632 | options=None), 633 | ], 634 | extensions=[ 635 | ], 636 | nested_types=[], 637 | enum_types=[ 638 | ], 639 | options=None, 640 | is_extendable=False, 641 | extension_ranges=[], 642 | oneofs=[ 643 | ], 644 | serialized_start=1516, 645 | serialized_end=1573, 646 | ) 647 | 648 | 649 | _STORAGECONTAINERCHUNKLIST = _descriptor.Descriptor( 650 | name='StorageContainerChunkList', 651 | full_name='StorageContainerChunkList', 652 | filename=None, 653 | file=DESCRIPTOR, 654 | containing_type=None, 655 | fields=[ 656 | _descriptor.FieldDescriptor( 657 | name='storage_container_key', full_name='StorageContainerChunkList.storage_container_key', index=0, 658 | number=1, type=12, cpp_type=9, label=2, 659 | has_default_value=False, default_value=_b(""), 660 | message_type=None, enum_type=None, containing_type=None, 661 | is_extension=False, extension_scope=None, 662 | options=None), 663 | _descriptor.FieldDescriptor( 664 | name='host_info', full_name='StorageContainerChunkList.host_info', index=1, 665 | number=2, type=11, cpp_type=10, label=2, 666 | has_default_value=False, default_value=None, 667 | message_type=None, enum_type=None, containing_type=None, 668 | is_extension=False, extension_scope=None, 669 | options=None), 670 | _descriptor.FieldDescriptor( 671 | name='chunk_checksum', full_name='StorageContainerChunkList.chunk_checksum', index=2, 672 | number=3, type=12, cpp_type=9, label=3, 673 | has_default_value=False, default_value=[], 674 | message_type=None, enum_type=None, containing_type=None, 675 | is_extension=False, extension_scope=None, 676 | options=None), 677 | _descriptor.FieldDescriptor( 678 | name='storage_container_authorization_token', full_name='StorageContainerChunkList.storage_container_authorization_token', index=3, 679 | number=4, type=9, cpp_type=9, label=2, 680 | has_default_value=False, default_value=_b("").decode('utf-8'), 681 | message_type=None, enum_type=None, containing_type=None, 682 | is_extension=False, extension_scope=None, 683 | options=None), 684 | ], 685 | extensions=[ 686 | ], 687 | nested_types=[], 688 | enum_types=[ 689 | ], 690 | options=None, 691 | is_extendable=False, 692 | extension_ranges=[], 693 | oneofs=[ 694 | ], 695 | serialized_start=1576, 696 | serialized_end=1735, 697 | ) 698 | 699 | 700 | _STORAGECONTAINERCHUNKLISTS = _descriptor.Descriptor( 701 | name='StorageContainerChunkLists', 702 | full_name='StorageContainerChunkLists', 703 | filename=None, 704 | file=DESCRIPTOR, 705 | containing_type=None, 706 | fields=[ 707 | _descriptor.FieldDescriptor( 708 | name='storage_container_chunk_list', full_name='StorageContainerChunkLists.storage_container_chunk_list', index=0, 709 | number=1, type=11, cpp_type=10, label=3, 710 | has_default_value=False, default_value=[], 711 | message_type=None, enum_type=None, containing_type=None, 712 | is_extension=False, extension_scope=None, 713 | options=None), 714 | _descriptor.FieldDescriptor( 715 | name='file_error', full_name='StorageContainerChunkLists.file_error', index=1, 716 | number=2, type=11, cpp_type=10, label=3, 717 | has_default_value=False, default_value=[], 718 | message_type=None, enum_type=None, containing_type=None, 719 | is_extension=False, extension_scope=None, 720 | options=None), 721 | _descriptor.FieldDescriptor( 722 | name='verbosity_level', full_name='StorageContainerChunkLists.verbosity_level', index=2, 723 | number=3, type=13, cpp_type=3, label=1, 724 | has_default_value=False, default_value=0, 725 | message_type=None, enum_type=None, containing_type=None, 726 | is_extension=False, extension_scope=None, 727 | options=None), 728 | ], 729 | extensions=[ 730 | ], 731 | nested_types=[], 732 | enum_types=[ 733 | ], 734 | options=None, 735 | is_extendable=False, 736 | extension_ranges=[], 737 | oneofs=[ 738 | ], 739 | serialized_start=1738, 740 | serialized_end=1889, 741 | ) 742 | 743 | 744 | _STORAGECONTAINERERRORLIST = _descriptor.Descriptor( 745 | name='StorageContainerErrorList', 746 | full_name='StorageContainerErrorList', 747 | filename=None, 748 | file=DESCRIPTOR, 749 | containing_type=None, 750 | fields=[ 751 | _descriptor.FieldDescriptor( 752 | name='storage_container_error', full_name='StorageContainerErrorList.storage_container_error', index=0, 753 | number=1, type=11, cpp_type=10, label=3, 754 | has_default_value=False, default_value=[], 755 | message_type=None, enum_type=None, containing_type=None, 756 | is_extension=False, extension_scope=None, 757 | options=None), 758 | ], 759 | extensions=[ 760 | ], 761 | nested_types=[], 762 | enum_types=[ 763 | ], 764 | options=None, 765 | is_extendable=False, 766 | extension_ranges=[], 767 | oneofs=[ 768 | ], 769 | serialized_start=1891, 770 | serialized_end=1975, 771 | ) 772 | 773 | 774 | _FILECHECKSUMAUTHORIZATION = _descriptor.Descriptor( 775 | name='FileChecksumAuthorization', 776 | full_name='FileChecksumAuthorization', 777 | filename=None, 778 | file=DESCRIPTOR, 779 | containing_type=None, 780 | fields=[ 781 | _descriptor.FieldDescriptor( 782 | name='file_checksum', full_name='FileChecksumAuthorization.file_checksum', index=0, 783 | number=1, type=12, cpp_type=9, label=2, 784 | has_default_value=False, default_value=_b(""), 785 | message_type=None, enum_type=None, containing_type=None, 786 | is_extension=False, extension_scope=None, 787 | options=None), 788 | _descriptor.FieldDescriptor( 789 | name='authorization', full_name='FileChecksumAuthorization.authorization', index=1, 790 | number=2, type=9, cpp_type=9, label=2, 791 | has_default_value=False, default_value=_b("").decode('utf-8'), 792 | message_type=None, enum_type=None, containing_type=None, 793 | is_extension=False, extension_scope=None, 794 | options=None), 795 | _descriptor.FieldDescriptor( 796 | name='chunk_checksums', full_name='FileChecksumAuthorization.chunk_checksums', index=2, 797 | number=3, type=12, cpp_type=9, label=3, 798 | has_default_value=False, default_value=[], 799 | message_type=None, enum_type=None, containing_type=None, 800 | is_extension=False, extension_scope=None, 801 | options=None), 802 | ], 803 | extensions=[ 804 | ], 805 | nested_types=[], 806 | enum_types=[ 807 | ], 808 | options=None, 809 | is_extendable=False, 810 | extension_ranges=[], 811 | oneofs=[ 812 | ], 813 | serialized_start=1977, 814 | serialized_end=2075, 815 | ) 816 | 817 | 818 | _FILECHECKSUMAUTHORIZATIONLIST = _descriptor.Descriptor( 819 | name='FileChecksumAuthorizationList', 820 | full_name='FileChecksumAuthorizationList', 821 | filename=None, 822 | file=DESCRIPTOR, 823 | containing_type=None, 824 | fields=[ 825 | _descriptor.FieldDescriptor( 826 | name='file_checksum_authorization', full_name='FileChecksumAuthorizationList.file_checksum_authorization', index=0, 827 | number=1, type=11, cpp_type=10, label=3, 828 | has_default_value=False, default_value=[], 829 | message_type=None, enum_type=None, containing_type=None, 830 | is_extension=False, extension_scope=None, 831 | options=None), 832 | ], 833 | extensions=[ 834 | ], 835 | nested_types=[], 836 | enum_types=[ 837 | ], 838 | options=None, 839 | is_extendable=False, 840 | extension_ranges=[], 841 | oneofs=[ 842 | ], 843 | serialized_start=2077, 844 | serialized_end=2173, 845 | ) 846 | 847 | 848 | _CHUNKREFERENCE = _descriptor.Descriptor( 849 | name='ChunkReference', 850 | full_name='ChunkReference', 851 | filename=None, 852 | file=DESCRIPTOR, 853 | containing_type=None, 854 | fields=[ 855 | _descriptor.FieldDescriptor( 856 | name='container_index', full_name='ChunkReference.container_index', index=0, 857 | number=1, type=4, cpp_type=4, label=2, 858 | has_default_value=False, default_value=0, 859 | message_type=None, enum_type=None, containing_type=None, 860 | is_extension=False, extension_scope=None, 861 | options=None), 862 | _descriptor.FieldDescriptor( 863 | name='chunk_index', full_name='ChunkReference.chunk_index', index=1, 864 | number=2, type=4, cpp_type=4, label=2, 865 | has_default_value=False, default_value=0, 866 | message_type=None, enum_type=None, containing_type=None, 867 | is_extension=False, extension_scope=None, 868 | options=None), 869 | ], 870 | extensions=[ 871 | ], 872 | nested_types=[], 873 | enum_types=[ 874 | ], 875 | options=None, 876 | is_extendable=False, 877 | extension_ranges=[], 878 | oneofs=[ 879 | ], 880 | serialized_start=2175, 881 | serialized_end=2237, 882 | ) 883 | 884 | 885 | _FILECHECKSUMCHUNKREFERENCES = _descriptor.Descriptor( 886 | name='FileChecksumChunkReferences', 887 | full_name='FileChecksumChunkReferences', 888 | filename=None, 889 | file=DESCRIPTOR, 890 | containing_type=None, 891 | fields=[ 892 | _descriptor.FieldDescriptor( 893 | name='file_checksum', full_name='FileChecksumChunkReferences.file_checksum', index=0, 894 | number=1, type=12, cpp_type=9, label=2, 895 | has_default_value=False, default_value=_b(""), 896 | message_type=None, enum_type=None, containing_type=None, 897 | is_extension=False, extension_scope=None, 898 | options=None), 899 | _descriptor.FieldDescriptor( 900 | name='chunk_references', full_name='FileChecksumChunkReferences.chunk_references', index=1, 901 | number=2, type=11, cpp_type=10, label=3, 902 | has_default_value=False, default_value=[], 903 | message_type=None, enum_type=None, containing_type=None, 904 | is_extension=False, extension_scope=None, 905 | options=None), 906 | ], 907 | extensions=[ 908 | ], 909 | nested_types=[], 910 | enum_types=[ 911 | ], 912 | options=None, 913 | is_extendable=False, 914 | extension_ranges=[], 915 | oneofs=[ 916 | ], 917 | serialized_start=2239, 918 | serialized_end=2334, 919 | ) 920 | 921 | 922 | _FILECHECKSUMSTORAGEHOSTCHUNKLISTS = _descriptor.Descriptor( 923 | name='FileChecksumStorageHostChunkLists', 924 | full_name='FileChecksumStorageHostChunkLists', 925 | filename=None, 926 | file=DESCRIPTOR, 927 | containing_type=None, 928 | fields=[ 929 | _descriptor.FieldDescriptor( 930 | name='storage_host_chunk_list', full_name='FileChecksumStorageHostChunkLists.storage_host_chunk_list', index=0, 931 | number=1, type=11, cpp_type=10, label=3, 932 | has_default_value=False, default_value=[], 933 | message_type=None, enum_type=None, containing_type=None, 934 | is_extension=False, extension_scope=None, 935 | options=None), 936 | _descriptor.FieldDescriptor( 937 | name='file_checksum_chunk_references', full_name='FileChecksumStorageHostChunkLists.file_checksum_chunk_references', index=1, 938 | number=2, type=11, cpp_type=10, label=3, 939 | has_default_value=False, default_value=[], 940 | message_type=None, enum_type=None, containing_type=None, 941 | is_extension=False, extension_scope=None, 942 | options=None), 943 | ], 944 | extensions=[ 945 | ], 946 | nested_types=[], 947 | enum_types=[ 948 | ], 949 | options=None, 950 | is_extendable=False, 951 | extension_ranges=[], 952 | oneofs=[ 953 | ], 954 | serialized_start=2337, 955 | serialized_end=2498, 956 | ) 957 | 958 | 959 | _FILEGROUPS = _descriptor.Descriptor( 960 | name='FileGroups', 961 | full_name='FileGroups', 962 | filename=None, 963 | file=DESCRIPTOR, 964 | containing_type=None, 965 | fields=[ 966 | _descriptor.FieldDescriptor( 967 | name='file_groups', full_name='FileGroups.file_groups', index=0, 968 | number=1, type=11, cpp_type=10, label=3, 969 | has_default_value=False, default_value=[], 970 | message_type=None, enum_type=None, containing_type=None, 971 | is_extension=False, extension_scope=None, 972 | options=None), 973 | _descriptor.FieldDescriptor( 974 | name='file_error', full_name='FileGroups.file_error', index=1, 975 | number=2, type=11, cpp_type=10, label=3, 976 | has_default_value=False, default_value=[], 977 | message_type=None, enum_type=None, containing_type=None, 978 | is_extension=False, extension_scope=None, 979 | options=None), 980 | _descriptor.FieldDescriptor( 981 | name='file_chunk_error', full_name='FileGroups.file_chunk_error', index=2, 982 | number=3, type=11, cpp_type=10, label=3, 983 | has_default_value=False, default_value=[], 984 | message_type=None, enum_type=None, containing_type=None, 985 | is_extension=False, extension_scope=None, 986 | options=None), 987 | _descriptor.FieldDescriptor( 988 | name='verbosity_level', full_name='FileGroups.verbosity_level', index=3, 989 | number=4, type=13, cpp_type=3, label=1, 990 | has_default_value=False, default_value=0, 991 | message_type=None, enum_type=None, containing_type=None, 992 | is_extension=False, extension_scope=None, 993 | options=None), 994 | ], 995 | extensions=[ 996 | ], 997 | nested_types=[], 998 | enum_types=[ 999 | ], 1000 | options=None, 1001 | is_extendable=False, 1002 | extension_ranges=[], 1003 | oneofs=[ 1004 | ], 1005 | serialized_start=2501, 1006 | serialized_end=2670, 1007 | ) 1008 | 1009 | 1010 | _CHUNKCHECKSUMLIST = _descriptor.Descriptor( 1011 | name='ChunkChecksumList', 1012 | full_name='ChunkChecksumList', 1013 | filename=None, 1014 | file=DESCRIPTOR, 1015 | containing_type=None, 1016 | fields=[ 1017 | _descriptor.FieldDescriptor( 1018 | name='chunk_checksum', full_name='ChunkChecksumList.chunk_checksum', index=0, 1019 | number=1, type=12, cpp_type=9, label=3, 1020 | has_default_value=False, default_value=[], 1021 | message_type=None, enum_type=None, containing_type=None, 1022 | is_extension=False, extension_scope=None, 1023 | options=None), 1024 | ], 1025 | extensions=[ 1026 | ], 1027 | nested_types=[], 1028 | enum_types=[ 1029 | ], 1030 | options=None, 1031 | is_extendable=False, 1032 | extension_ranges=[], 1033 | oneofs=[ 1034 | ], 1035 | serialized_start=2672, 1036 | serialized_end=2715, 1037 | ) 1038 | 1039 | 1040 | _STORAGEHOSTCHUNKLIST = _descriptor.Descriptor( 1041 | name='StorageHostChunkList', 1042 | full_name='StorageHostChunkList', 1043 | filename=None, 1044 | file=DESCRIPTOR, 1045 | containing_type=None, 1046 | fields=[ 1047 | _descriptor.FieldDescriptor( 1048 | name='host_info', full_name='StorageHostChunkList.host_info', index=0, 1049 | number=1, type=11, cpp_type=10, label=2, 1050 | has_default_value=False, default_value=None, 1051 | message_type=None, enum_type=None, containing_type=None, 1052 | is_extension=False, extension_scope=None, 1053 | options=None), 1054 | _descriptor.FieldDescriptor( 1055 | name='chunk_info', full_name='StorageHostChunkList.chunk_info', index=1, 1056 | number=2, type=11, cpp_type=10, label=3, 1057 | has_default_value=False, default_value=[], 1058 | message_type=None, enum_type=None, containing_type=None, 1059 | is_extension=False, extension_scope=None, 1060 | options=None), 1061 | _descriptor.FieldDescriptor( 1062 | name='storage_container_key', full_name='StorageHostChunkList.storage_container_key', index=2, 1063 | number=3, type=9, cpp_type=9, label=2, 1064 | has_default_value=False, default_value=_b("").decode('utf-8'), 1065 | message_type=None, enum_type=None, containing_type=None, 1066 | is_extension=False, extension_scope=None, 1067 | options=None), 1068 | _descriptor.FieldDescriptor( 1069 | name='storage_container_authorization_token', full_name='StorageHostChunkList.storage_container_authorization_token', index=3, 1070 | number=4, type=9, cpp_type=9, label=2, 1071 | has_default_value=False, default_value=_b("").decode('utf-8'), 1072 | message_type=None, enum_type=None, containing_type=None, 1073 | is_extension=False, extension_scope=None, 1074 | options=None), 1075 | ], 1076 | extensions=[ 1077 | ], 1078 | nested_types=[], 1079 | enum_types=[ 1080 | ], 1081 | options=None, 1082 | is_extendable=False, 1083 | extension_ranges=[], 1084 | oneofs=[ 1085 | ], 1086 | serialized_start=2718, 1087 | serialized_end=2880, 1088 | ) 1089 | 1090 | 1091 | _STORAGEHOSTCHUNKLISTS = _descriptor.Descriptor( 1092 | name='StorageHostChunkLists', 1093 | full_name='StorageHostChunkLists', 1094 | filename=None, 1095 | file=DESCRIPTOR, 1096 | containing_type=None, 1097 | fields=[ 1098 | _descriptor.FieldDescriptor( 1099 | name='storage_host_chunk_list', full_name='StorageHostChunkLists.storage_host_chunk_list', index=0, 1100 | number=1, type=11, cpp_type=10, label=3, 1101 | has_default_value=False, default_value=[], 1102 | message_type=None, enum_type=None, containing_type=None, 1103 | is_extension=False, extension_scope=None, 1104 | options=None), 1105 | _descriptor.FieldDescriptor( 1106 | name='chunk_error', full_name='StorageHostChunkLists.chunk_error', index=1, 1107 | number=2, type=11, cpp_type=10, label=3, 1108 | has_default_value=False, default_value=[], 1109 | message_type=None, enum_type=None, containing_type=None, 1110 | is_extension=False, extension_scope=None, 1111 | options=None), 1112 | ], 1113 | extensions=[ 1114 | ], 1115 | nested_types=[], 1116 | enum_types=[ 1117 | ], 1118 | options=None, 1119 | is_extendable=False, 1120 | extension_ranges=[], 1121 | oneofs=[ 1122 | ], 1123 | serialized_start=2882, 1124 | serialized_end=2995, 1125 | ) 1126 | 1127 | _HOSTINFO.fields_by_name['headers'].message_type = _NAMEVALUEPAIR 1128 | _ERRORRESPONSE.fields_by_name['underlying_errors'].message_type = _ERRORRESPONSE 1129 | _ERRORRESPONSE.fields_by_name['name_value_pair'].message_type = _NAMEVALUEPAIR 1130 | _FILEERROR.fields_by_name['error_response'].message_type = _ERRORRESPONSE 1131 | _CHUNKERROR.fields_by_name['error_response'].message_type = _ERRORRESPONSE 1132 | _CHUNKERRORINDEX.fields_by_name['error_response'].message_type = _ERRORRESPONSE 1133 | _FILECHUNKERROR.fields_by_name['chunk_error'].message_type = _CHUNKERRORINDEX 1134 | _STORAGECONTAINERERROR.fields_by_name['error_response'].message_type = _ERRORRESPONSE 1135 | _METHODCOMPLETIONINFO.fields_by_name['vendor_response_headers'].message_type = _NAMEVALUEPAIR 1136 | _METHODCOMPLETIONINFO.fields_by_name['error'].message_type = _ERRORRESPONSE 1137 | _METHODCOMPLETIONINFO.fields_by_name['vendor_nv_pairs'].message_type = _NAMEVALUEPAIR 1138 | _METHODCOMPLETIONINFO.fields_by_name['client_nv_pairs'].message_type = _NAMEVALUEPAIR 1139 | _METHODCOMPLETIONINFOLIST.fields_by_name['method_completion_info'].message_type = _METHODCOMPLETIONINFO 1140 | _FILECHUNKLIST.fields_by_name['chunk_info'].message_type = _CHUNKINFO 1141 | _FILECHUNKLISTS.fields_by_name['file_chunk_list'].message_type = _FILECHUNKLIST 1142 | _STORAGECONTAINERCHUNKLIST.fields_by_name['host_info'].message_type = _HOSTINFO 1143 | _STORAGECONTAINERCHUNKLISTS.fields_by_name['storage_container_chunk_list'].message_type = _STORAGECONTAINERCHUNKLIST 1144 | _STORAGECONTAINERCHUNKLISTS.fields_by_name['file_error'].message_type = _FILEERROR 1145 | _STORAGECONTAINERERRORLIST.fields_by_name['storage_container_error'].message_type = _STORAGECONTAINERERROR 1146 | _FILECHECKSUMAUTHORIZATIONLIST.fields_by_name['file_checksum_authorization'].message_type = _FILECHECKSUMAUTHORIZATION 1147 | _FILECHECKSUMCHUNKREFERENCES.fields_by_name['chunk_references'].message_type = _CHUNKREFERENCE 1148 | _FILECHECKSUMSTORAGEHOSTCHUNKLISTS.fields_by_name['storage_host_chunk_list'].message_type = _STORAGEHOSTCHUNKLIST 1149 | _FILECHECKSUMSTORAGEHOSTCHUNKLISTS.fields_by_name['file_checksum_chunk_references'].message_type = _FILECHECKSUMCHUNKREFERENCES 1150 | _FILEGROUPS.fields_by_name['file_groups'].message_type = _FILECHECKSUMSTORAGEHOSTCHUNKLISTS 1151 | _FILEGROUPS.fields_by_name['file_error'].message_type = _FILEERROR 1152 | _FILEGROUPS.fields_by_name['file_chunk_error'].message_type = _FILECHUNKERROR 1153 | _STORAGEHOSTCHUNKLIST.fields_by_name['host_info'].message_type = _HOSTINFO 1154 | _STORAGEHOSTCHUNKLIST.fields_by_name['chunk_info'].message_type = _CHUNKINFO 1155 | _STORAGEHOSTCHUNKLISTS.fields_by_name['storage_host_chunk_list'].message_type = _STORAGEHOSTCHUNKLIST 1156 | _STORAGEHOSTCHUNKLISTS.fields_by_name['chunk_error'].message_type = _CHUNKERROR 1157 | DESCRIPTOR.message_types_by_name['ChunkInfo'] = _CHUNKINFO 1158 | DESCRIPTOR.message_types_by_name['NameValuePair'] = _NAMEVALUEPAIR 1159 | DESCRIPTOR.message_types_by_name['HostInfo'] = _HOSTINFO 1160 | DESCRIPTOR.message_types_by_name['ErrorResponse'] = _ERRORRESPONSE 1161 | DESCRIPTOR.message_types_by_name['FileError'] = _FILEERROR 1162 | DESCRIPTOR.message_types_by_name['ChunkError'] = _CHUNKERROR 1163 | DESCRIPTOR.message_types_by_name['ChunkErrorIndex'] = _CHUNKERRORINDEX 1164 | DESCRIPTOR.message_types_by_name['FileChunkError'] = _FILECHUNKERROR 1165 | DESCRIPTOR.message_types_by_name['StorageContainerError'] = _STORAGECONTAINERERROR 1166 | DESCRIPTOR.message_types_by_name['MethodCompletionInfo'] = _METHODCOMPLETIONINFO 1167 | DESCRIPTOR.message_types_by_name['MethodCompletionInfoList'] = _METHODCOMPLETIONINFOLIST 1168 | DESCRIPTOR.message_types_by_name['FileChunkList'] = _FILECHUNKLIST 1169 | DESCRIPTOR.message_types_by_name['FileChunkLists'] = _FILECHUNKLISTS 1170 | DESCRIPTOR.message_types_by_name['StorageContainerChunkList'] = _STORAGECONTAINERCHUNKLIST 1171 | DESCRIPTOR.message_types_by_name['StorageContainerChunkLists'] = _STORAGECONTAINERCHUNKLISTS 1172 | DESCRIPTOR.message_types_by_name['StorageContainerErrorList'] = _STORAGECONTAINERERRORLIST 1173 | DESCRIPTOR.message_types_by_name['FileChecksumAuthorization'] = _FILECHECKSUMAUTHORIZATION 1174 | DESCRIPTOR.message_types_by_name['FileChecksumAuthorizationList'] = _FILECHECKSUMAUTHORIZATIONLIST 1175 | DESCRIPTOR.message_types_by_name['ChunkReference'] = _CHUNKREFERENCE 1176 | DESCRIPTOR.message_types_by_name['FileChecksumChunkReferences'] = _FILECHECKSUMCHUNKREFERENCES 1177 | DESCRIPTOR.message_types_by_name['FileChecksumStorageHostChunkLists'] = _FILECHECKSUMSTORAGEHOSTCHUNKLISTS 1178 | DESCRIPTOR.message_types_by_name['FileGroups'] = _FILEGROUPS 1179 | DESCRIPTOR.message_types_by_name['ChunkChecksumList'] = _CHUNKCHECKSUMLIST 1180 | DESCRIPTOR.message_types_by_name['StorageHostChunkList'] = _STORAGEHOSTCHUNKLIST 1181 | DESCRIPTOR.message_types_by_name['StorageHostChunkLists'] = _STORAGEHOSTCHUNKLISTS 1182 | 1183 | ChunkInfo = _reflection.GeneratedProtocolMessageType('ChunkInfo', (_message.Message,), dict( 1184 | DESCRIPTOR = _CHUNKINFO, 1185 | __module__ = 'chunk_server_pb2' 1186 | # @@protoc_insertion_point(class_scope:ChunkInfo) 1187 | )) 1188 | _sym_db.RegisterMessage(ChunkInfo) 1189 | 1190 | NameValuePair = _reflection.GeneratedProtocolMessageType('NameValuePair', (_message.Message,), dict( 1191 | DESCRIPTOR = _NAMEVALUEPAIR, 1192 | __module__ = 'chunk_server_pb2' 1193 | # @@protoc_insertion_point(class_scope:NameValuePair) 1194 | )) 1195 | _sym_db.RegisterMessage(NameValuePair) 1196 | 1197 | HostInfo = _reflection.GeneratedProtocolMessageType('HostInfo', (_message.Message,), dict( 1198 | DESCRIPTOR = _HOSTINFO, 1199 | __module__ = 'chunk_server_pb2' 1200 | # @@protoc_insertion_point(class_scope:HostInfo) 1201 | )) 1202 | _sym_db.RegisterMessage(HostInfo) 1203 | 1204 | ErrorResponse = _reflection.GeneratedProtocolMessageType('ErrorResponse', (_message.Message,), dict( 1205 | DESCRIPTOR = _ERRORRESPONSE, 1206 | __module__ = 'chunk_server_pb2' 1207 | # @@protoc_insertion_point(class_scope:ErrorResponse) 1208 | )) 1209 | _sym_db.RegisterMessage(ErrorResponse) 1210 | 1211 | FileError = _reflection.GeneratedProtocolMessageType('FileError', (_message.Message,), dict( 1212 | DESCRIPTOR = _FILEERROR, 1213 | __module__ = 'chunk_server_pb2' 1214 | # @@protoc_insertion_point(class_scope:FileError) 1215 | )) 1216 | _sym_db.RegisterMessage(FileError) 1217 | 1218 | ChunkError = _reflection.GeneratedProtocolMessageType('ChunkError', (_message.Message,), dict( 1219 | DESCRIPTOR = _CHUNKERROR, 1220 | __module__ = 'chunk_server_pb2' 1221 | # @@protoc_insertion_point(class_scope:ChunkError) 1222 | )) 1223 | _sym_db.RegisterMessage(ChunkError) 1224 | 1225 | ChunkErrorIndex = _reflection.GeneratedProtocolMessageType('ChunkErrorIndex', (_message.Message,), dict( 1226 | DESCRIPTOR = _CHUNKERRORINDEX, 1227 | __module__ = 'chunk_server_pb2' 1228 | # @@protoc_insertion_point(class_scope:ChunkErrorIndex) 1229 | )) 1230 | _sym_db.RegisterMessage(ChunkErrorIndex) 1231 | 1232 | FileChunkError = _reflection.GeneratedProtocolMessageType('FileChunkError', (_message.Message,), dict( 1233 | DESCRIPTOR = _FILECHUNKERROR, 1234 | __module__ = 'chunk_server_pb2' 1235 | # @@protoc_insertion_point(class_scope:FileChunkError) 1236 | )) 1237 | _sym_db.RegisterMessage(FileChunkError) 1238 | 1239 | StorageContainerError = _reflection.GeneratedProtocolMessageType('StorageContainerError', (_message.Message,), dict( 1240 | DESCRIPTOR = _STORAGECONTAINERERROR, 1241 | __module__ = 'chunk_server_pb2' 1242 | # @@protoc_insertion_point(class_scope:StorageContainerError) 1243 | )) 1244 | _sym_db.RegisterMessage(StorageContainerError) 1245 | 1246 | MethodCompletionInfo = _reflection.GeneratedProtocolMessageType('MethodCompletionInfo', (_message.Message,), dict( 1247 | DESCRIPTOR = _METHODCOMPLETIONINFO, 1248 | __module__ = 'chunk_server_pb2' 1249 | # @@protoc_insertion_point(class_scope:MethodCompletionInfo) 1250 | )) 1251 | _sym_db.RegisterMessage(MethodCompletionInfo) 1252 | 1253 | MethodCompletionInfoList = _reflection.GeneratedProtocolMessageType('MethodCompletionInfoList', (_message.Message,), dict( 1254 | DESCRIPTOR = _METHODCOMPLETIONINFOLIST, 1255 | __module__ = 'chunk_server_pb2' 1256 | # @@protoc_insertion_point(class_scope:MethodCompletionInfoList) 1257 | )) 1258 | _sym_db.RegisterMessage(MethodCompletionInfoList) 1259 | 1260 | FileChunkList = _reflection.GeneratedProtocolMessageType('FileChunkList', (_message.Message,), dict( 1261 | DESCRIPTOR = _FILECHUNKLIST, 1262 | __module__ = 'chunk_server_pb2' 1263 | # @@protoc_insertion_point(class_scope:FileChunkList) 1264 | )) 1265 | _sym_db.RegisterMessage(FileChunkList) 1266 | 1267 | FileChunkLists = _reflection.GeneratedProtocolMessageType('FileChunkLists', (_message.Message,), dict( 1268 | DESCRIPTOR = _FILECHUNKLISTS, 1269 | __module__ = 'chunk_server_pb2' 1270 | # @@protoc_insertion_point(class_scope:FileChunkLists) 1271 | )) 1272 | _sym_db.RegisterMessage(FileChunkLists) 1273 | 1274 | StorageContainerChunkList = _reflection.GeneratedProtocolMessageType('StorageContainerChunkList', (_message.Message,), dict( 1275 | DESCRIPTOR = _STORAGECONTAINERCHUNKLIST, 1276 | __module__ = 'chunk_server_pb2' 1277 | # @@protoc_insertion_point(class_scope:StorageContainerChunkList) 1278 | )) 1279 | _sym_db.RegisterMessage(StorageContainerChunkList) 1280 | 1281 | StorageContainerChunkLists = _reflection.GeneratedProtocolMessageType('StorageContainerChunkLists', (_message.Message,), dict( 1282 | DESCRIPTOR = _STORAGECONTAINERCHUNKLISTS, 1283 | __module__ = 'chunk_server_pb2' 1284 | # @@protoc_insertion_point(class_scope:StorageContainerChunkLists) 1285 | )) 1286 | _sym_db.RegisterMessage(StorageContainerChunkLists) 1287 | 1288 | StorageContainerErrorList = _reflection.GeneratedProtocolMessageType('StorageContainerErrorList', (_message.Message,), dict( 1289 | DESCRIPTOR = _STORAGECONTAINERERRORLIST, 1290 | __module__ = 'chunk_server_pb2' 1291 | # @@protoc_insertion_point(class_scope:StorageContainerErrorList) 1292 | )) 1293 | _sym_db.RegisterMessage(StorageContainerErrorList) 1294 | 1295 | FileChecksumAuthorization = _reflection.GeneratedProtocolMessageType('FileChecksumAuthorization', (_message.Message,), dict( 1296 | DESCRIPTOR = _FILECHECKSUMAUTHORIZATION, 1297 | __module__ = 'chunk_server_pb2' 1298 | # @@protoc_insertion_point(class_scope:FileChecksumAuthorization) 1299 | )) 1300 | _sym_db.RegisterMessage(FileChecksumAuthorization) 1301 | 1302 | FileChecksumAuthorizationList = _reflection.GeneratedProtocolMessageType('FileChecksumAuthorizationList', (_message.Message,), dict( 1303 | DESCRIPTOR = _FILECHECKSUMAUTHORIZATIONLIST, 1304 | __module__ = 'chunk_server_pb2' 1305 | # @@protoc_insertion_point(class_scope:FileChecksumAuthorizationList) 1306 | )) 1307 | _sym_db.RegisterMessage(FileChecksumAuthorizationList) 1308 | 1309 | ChunkReference = _reflection.GeneratedProtocolMessageType('ChunkReference', (_message.Message,), dict( 1310 | DESCRIPTOR = _CHUNKREFERENCE, 1311 | __module__ = 'chunk_server_pb2' 1312 | # @@protoc_insertion_point(class_scope:ChunkReference) 1313 | )) 1314 | _sym_db.RegisterMessage(ChunkReference) 1315 | 1316 | FileChecksumChunkReferences = _reflection.GeneratedProtocolMessageType('FileChecksumChunkReferences', (_message.Message,), dict( 1317 | DESCRIPTOR = _FILECHECKSUMCHUNKREFERENCES, 1318 | __module__ = 'chunk_server_pb2' 1319 | # @@protoc_insertion_point(class_scope:FileChecksumChunkReferences) 1320 | )) 1321 | _sym_db.RegisterMessage(FileChecksumChunkReferences) 1322 | 1323 | FileChecksumStorageHostChunkLists = _reflection.GeneratedProtocolMessageType('FileChecksumStorageHostChunkLists', (_message.Message,), dict( 1324 | DESCRIPTOR = _FILECHECKSUMSTORAGEHOSTCHUNKLISTS, 1325 | __module__ = 'chunk_server_pb2' 1326 | # @@protoc_insertion_point(class_scope:FileChecksumStorageHostChunkLists) 1327 | )) 1328 | _sym_db.RegisterMessage(FileChecksumStorageHostChunkLists) 1329 | 1330 | FileGroups = _reflection.GeneratedProtocolMessageType('FileGroups', (_message.Message,), dict( 1331 | DESCRIPTOR = _FILEGROUPS, 1332 | __module__ = 'chunk_server_pb2' 1333 | # @@protoc_insertion_point(class_scope:FileGroups) 1334 | )) 1335 | _sym_db.RegisterMessage(FileGroups) 1336 | 1337 | ChunkChecksumList = _reflection.GeneratedProtocolMessageType('ChunkChecksumList', (_message.Message,), dict( 1338 | DESCRIPTOR = _CHUNKCHECKSUMLIST, 1339 | __module__ = 'chunk_server_pb2' 1340 | # @@protoc_insertion_point(class_scope:ChunkChecksumList) 1341 | )) 1342 | _sym_db.RegisterMessage(ChunkChecksumList) 1343 | 1344 | StorageHostChunkList = _reflection.GeneratedProtocolMessageType('StorageHostChunkList', (_message.Message,), dict( 1345 | DESCRIPTOR = _STORAGEHOSTCHUNKLIST, 1346 | __module__ = 'chunk_server_pb2' 1347 | # @@protoc_insertion_point(class_scope:StorageHostChunkList) 1348 | )) 1349 | _sym_db.RegisterMessage(StorageHostChunkList) 1350 | 1351 | StorageHostChunkLists = _reflection.GeneratedProtocolMessageType('StorageHostChunkLists', (_message.Message,), dict( 1352 | DESCRIPTOR = _STORAGEHOSTCHUNKLISTS, 1353 | __module__ = 'chunk_server_pb2' 1354 | # @@protoc_insertion_point(class_scope:StorageHostChunkLists) 1355 | )) 1356 | _sym_db.RegisterMessage(StorageHostChunkLists) 1357 | 1358 | 1359 | # @@protoc_insertion_point(module_scope) 1360 | -------------------------------------------------------------------------------- /cloud_kit.proto: -------------------------------------------------------------------------------- 1 | // Partial CloudKit protobuf definitions. 2 | // Reversed by: 3 | // Ahseya https://github.com/horrorho 4 | // ItsASmallWorld https://github.com/ItsASmallWorld 5 | 6 | 7 | option java_package = "com.github.horrorho.inflatabledonkey.protocol"; 8 | option java_outer_classname = "CloudKit"; 9 | 10 | message RequestOperation { // CKDPRequestOperation 11 | optional RequestOperationHeader requestOperationHeader = 1; 12 | optional Operation request = 2; 13 | optional ZoneRetrieveRequest zoneRetrieveRequest = 201; 14 | optional RecordRetrieveRequest recordRetrieveRequest = 211; 15 | optional QueryRetrieveRequest queryRetrieveRequest = 220; 16 | // CKDPRequestOperation 17 | // ? CKDPAssetUploadTokenRetrieveRequest * _assetUploadTokenRetrieveRequest; 18 | // ? CKDPDeleteCommentRequest * _deleteCommentRequest; 19 | // ? CKDPDeleteContainerRequest * _deleteContainerRequest; 20 | // ? CKDPGetCommentRequest * _getCommentRequest; 21 | // ? CKDPGetCommentsRequest * _getCommentsRequest; 22 | // ? CKDPGetLikesRequest * _getLikesRequest; 23 | // ? CKDPRequestOperationHeader * _header; 24 | // ? CKDPLikeRequest * _likeRequest; 25 | // ? CKDPMescalCertificateRequest * _mescalCertificateRequest; 26 | // ? CKDPMescalSessionInfoRequest * _mescalSessionInfoRequest; 27 | // ? CKDPMescalSignatureRequest * _mescalSignatureRequest; 28 | // ? CKDPNotificationMarkReadRequest * _notificationMarkReadRequest; 29 | // ? CKDPNotificationSyncRequest * _notificationSyncRequest; 30 | // ? CKDPPkiRegisterRequest * _pkiRegisterRequest; 31 | // ? CKDPPkiRetrieveRequest * _pkiRetrieveRequest; 32 | // ? CKDPPostCommentRequest * _postCommentRequest; 33 | // ? CKDPPromoteContainerSchemaRequest * _promoteContainerSchemaRequest; 34 | // ? CKDPPulseRequest * _pulseRequest; 35 | // 220 CKDPQueryRetrieveRequest * _queryRetrieveRequest; 36 | // ? CKDPRecordDeleteRequest * _recordDeleteRequest; 37 | // ? CKDPRecordRetrieveChangesRequest * _recordRetrieveChangesRequest; 38 | // 211 CKDPRecordRetrieveRequest * _recordRetrieveRequest; 39 | // ? CKDPRecordRetrieveVersionsRequest * _recordRetrieveVersionsRequest; 40 | // ? CKDPRecordSaveRequest * _recordSaveRequest; 41 | // 2 CKDPOperation * _request; 42 | // ? CKDPResetContainerRequest * _resetContainerRequest; 43 | // ? CKDPSetBadgeCountRequest * _setBadgeCountRequest; 44 | // ? CKDPShareAcceptRequest * _shareAcceptRequest; 45 | // ? CKDPShareDeleteRequest * _shareDeleteRequest; 46 | // ? CKDPShareRetrieveRequest * _shareRetrieveRequest; 47 | // ? CKDPShareSaveRequest * _shareSaveRequest; 48 | // ? CKDPShareTokenDeleteRequest * _shareTokenDeleteRequest; 49 | // ? CKDPShareTokenRetrieveRequest * _shareTokenRetrieveRequest; 50 | // ? CKDPShareTokenSaveRequest * _shareTokenSaveRequest; 51 | // ? CKDPSubscriptionCreateRequest * _subscriptionCreateRequest; 52 | // ? CKDPSubscriptionDeleteRequest * _subscriptionDeleteRequest; 53 | // ? CKDPSubscriptionRetrieveRequest * _subscriptionRetrieveRequest; 54 | // ? CKDPTokenRegistrationRequest * _tokenRegistrationRequest; 55 | // ? CKDPTokenUnregistrationRequest * _tokenUnregistrationRequest; 56 | // ? CKDPUnlikeRequest * _unlikeRequest; 57 | // ? CKDPUserAvailableQuotaRequest * _userAvailableQuotaRequest; 58 | // ? CKDPUserPrivacySettingsBatchLookupRequest * _userPrivacySettingsBatchLookupRequest; 59 | // ? CKDPUserPrivacySettingsResetRequest * _userPrivacySettingsResetRequest; 60 | // ? CKDPUserPrivacySettingsRetrieveRequest * _userPrivacySettingsRetrieveRequest; 61 | // ? CKDPUserPrivacySettingsUpdateRequest * _userPrivacySettingsUpdateRequest; 62 | // ? CKDPUserQueryRequest * _userQueryRequest; 63 | // ? CKDPUserRetrieveRequest * _userRetrieveRequest; 64 | // ? CKDPWebAuthTokenRetrieveRequest * _webAuthTokenRetrieveRequest; 65 | // ? CKDPZoneDeleteRequest * _zoneDeleteRequest; 66 | // ? CKDPZoneRetrieveChangesRequest * _zoneRetrieveChangesRequest; 67 | // 201 CKDPZoneRetrieveRequest * _zoneRetrieveRequest; 68 | // ? CKDPZoneSaveRequest * _zoneSaveRequest; 69 | } 70 | 71 | message ResponseOperation { 72 | optional uint32 operationCost = 1; 73 | optional Operation response = 2; 74 | optional ResponseOperationResult result = 3; 75 | optional ZoneRetrieveResponse zoneRetrieveResponse = 201; 76 | optional RecordRetrieveResponse recordRetrieveResponse = 211; 77 | optional QueryRetrieveRequestResponse queryRetrieveRequestResponse = 220; 78 | 79 | // CKDPResponseOperation 80 | // ? CKDPAssetUploadTokenRetrieveResponse * _assetUploadTokenRetrieveResponse; 81 | // ? CKDPDeleteCommentResponse * _deleteCommentResponse; 82 | // ? CKDPDeleteContainerResponse * _deleteContainerResponse; 83 | // ? CKDPGetCommentResponse * _getCommentResponse; 84 | // ? CKDPGetCommentsResponse * _getCommentsResponse; 85 | // ? CKDPGetLikesResponse * _getLikesResponse; 86 | // ? CKDPLikeResponse * _likeResponse; 87 | // ? CKDPMescalCertificateResponse * _mescalCertificateResponse; 88 | // ? CKDPMescalSessionInfoResponse * _mescalSessionInfoResponse; 89 | // ? CKDPMescalSignatureResponse * _mescalSignatureResponse; 90 | // ? CKDPNotificationMarkReadResponse * _notificationMarkReadResponse; 91 | // ? CKDPNotificationSyncResponse * _notificationSyncResponse; 92 | // 1 unsigned int _operationCost; 93 | // ? CKDPPkiRegisterResponse * _pkiRegisterResponse; 94 | // ? CKDPPkiRetrieveResponse * _pkiRetrieveResponse; 95 | // ? CKDPPostCommentResponse * _postCommentResponse; 96 | // ? CKDPPromoteContainerSchemaResponse * _promoteContainerSchemaResponse; 97 | // ? CKDPPulseResponse * _pulseResponse; 98 | // 220 CKDPQueryRetrieveResponse * _queryRetrieveResponse; 99 | // ? CKDPRecordDeleteResponse * _recordDeleteResponse; 100 | // ? CKDPRecordRetrieveChangesResponse * _recordRetrieveChangesResponse; 101 | // 211 CKDPRecordRetrieveResponse * _recordRetrieveResponse; 102 | // ? CKDPRecordRetrieveVersionsResponse * _recordRetrieveVersionsResponse; 103 | // ? CKDPRecordSaveResponse * _recordSaveResponse; 104 | // ? CKDPResetContainerResponse * _resetContainerResponse; 105 | // 2 CKDPOperation * _response; 106 | // 3 CKDPResponseOperationResult * _result; 107 | // ? CKDPSetBadgeCountResponse * _setBadgeCountResponse; 108 | // ? CKDPShareAcceptResponse * _shareAcceptResponse; 109 | // ? CKDPShareDeleteResponse * _shareDeleteResponse; 110 | // ? CKDPShareRetrieveResponse * _shareRetrieveResponse; 111 | // ? CKDPShareSaveResponse * _shareSaveResponse; 112 | // ? CKDPShareTokenDeleteResponse * _shareTokenDeleteResponse; 113 | // ? CKDPShareTokenRetrieveResponse * _shareTokenRetrieveResponse; 114 | // ? CKDPShareTokenSaveResponse * _shareTokenSaveResponse; 115 | // ? CKDPSubscriptionCreateResponse * _subscriptionCreateResponse; 116 | // ? CKDPSubscriptionDeleteResponse * _subscriptionDeleteResponse; 117 | // ? CKDPSubscriptionRetrieveResponse * _subscriptionRetrieveResponse; 118 | // ? CKDPTokenRegistrationResponse * _tokenRegistrationResponse; 119 | // ? CKDPTokenUnregistrationResponse * _tokenUnregistrationResponse; 120 | // ? CKDPUnlikeResponse * _unlikeResponse; 121 | // ? CKDPUserAvailableQuotaResponse * _userAvailableQuotaResponse; 122 | // ? CKDPUserPrivacySettingsBatchLookupResponse * _userPrivacySettingsBatchLookupResponse; 123 | // ? CKDPUserPrivacySettingsResetResponse * _userPrivacySettingsResetResponse; 124 | // ? CKDPUserPrivacySettingsRetrieveResponse * _userPrivacySettingsRetrieveResponse; 125 | // ? CKDPUserPrivacySettingsUpdateResponse * _userPrivacySettingsUpdateResponse; 126 | // ? CKDPUserQueryResponse * _userQueryResponse; 127 | // ? CKDPUserRetrieveResponse * _userRetrieveResponse; 128 | // ? CKDPWebAuthTokenRetrieveResponse * _webAuthTokenRetrieveResponse; 129 | // ? CKDPZoneDeleteResponse * _zoneDeleteResponse; 130 | // ? CKDPZoneRetrieveChangesResponse * _zoneRetrieveChangesResponse; 131 | // 201 CKDPZoneRetrieveResponse * _zoneRetrieveResponse; 132 | // ? CKDPZoneSaveResponse * _zoneSaveResponse; 133 | } 134 | 135 | message RequestOperationHeader { 136 | optional string applicationContainer = 2; 137 | optional string applicationBundle = 3; 138 | optional Identifier deviceIdentifier = 7; 139 | optional string deviceSoftwareVersion = 8; 140 | optional string f9 = 9; // product type, TODO to String64 141 | optional string deviceLibraryName = 10; // Probably. 142 | optional string deviceLibraryVersion = 11; // Probably. 143 | optional string operation =12; 144 | optional uint64 deviceFlowControlBudget = 13; // Guesstimate. 145 | optional uint64 deviceFlowControlBudgetCap = 14; // Guesstimate. 146 | optional string deviceFlowControlKey = 15; // Guesstimate. 147 | optional Locale locale = 17; 148 | optional string version = 18; // Guesstimate. 149 | optional uint32 f19 = 19; 150 | optional string deviceAssignedName = 21; 151 | optional string deviceHardwareID = 22; 152 | optional uint32 f23 = 23; 153 | optional uint32 f25 = 25; 154 | 155 | // CKDPRequestOperationHeader 156 | // 3 NSString * _applicationBundle; 157 | // unsigned long long _applicationConfigVersion; 158 | // 2 NSString * _applicationContainer; 159 | // ? int _applicationContainerEnvironment; 160 | // ? NSString * _applicationVersion; 161 | // ? NSData * _clientChangeToken; 162 | // 21 NSString * _deviceAssignedName; 163 | // 13? unsigned long long _deviceFlowControlBudget; 164 | // 14? unsigned long long _deviceFlowControlBudgetCap; 165 | // 15?? NSString * _deviceFlowControlKey; 166 | // ? float _deviceFlowControlRegeneration; 167 | // ? NSString * _deviceHardwareID; 168 | // ? NSString * _deviceHardwareVersion; 169 | // 7 CKDPIdentifier * _deviceIdentifier; 170 | // 10? NSString * _deviceLibraryName; 171 | // 11? NSString * _deviceLibraryVersion; 172 | // ? unsigned long long _deviceProtocolVersion; 173 | // ? NSString * _deviceSoftwareVersion; 174 | // ? unsigned long long _globalConfigVersion; 175 | // _isolationLevel; 176 | // 17 CKDPLocale * _locale; 177 | // ? NSString * _mmcsProtocolVersion; 178 | // ? int _targetDatabase; 179 | // ? NSString * _userIDContainerID; 180 | // ? NSString * _userToken; 181 | } 182 | 183 | message Operation { 184 | optional string uuid = 1; 185 | optional uint32 type = 2; 186 | optional uint32 f4 = 4; 187 | 188 | // CKDPOperation 189 | // BOOL _last; 190 | // NSString * _operationUUID; 191 | // BOOL _synchronousMode; 192 | // int _type; 193 | } 194 | 195 | message QueryRetrieveRequest { 196 | optional Query query = 1; 197 | optional RecordZoneIdentifier zoneIdentifier = 4; 198 | optional RequestedFields requestedFields = 5; 199 | optional UInt32 f6 = 6; 200 | 201 | // CKDPQueryRetrieveRequest - M220 202 | // ?6 NSData * _continuationMarker; 203 | // ? unsigned int _limit; 204 | // 1 CKDPQuery * _query; 205 | // 5 CKDPRequestedFields * _requestedFields; 206 | // 4 CKDPRecordZoneIdentifier * _zoneIdentifier; 207 | } 208 | 209 | message QueryRetrieveRequestResponse { 210 | optional QueryRetrieveRequestResponseQueryResult results = 1; 211 | 212 | // CKDPQueryRetrieveResponse - M220 213 | // ? NSData * _continuationMarker; 214 | // 1 NSMutableArray * _queryResults; 215 | } 216 | 217 | message QueryRetrieveRequestResponseQueryResult { 218 | optional RecordIdentifier identifier = 1; 219 | optional uint32 type = 3; 220 | optional Record record = 4; 221 | 222 | // CKDPQueryRetrieveRequestResponseQueryResult 223 | // ? NSString * _etag; 224 | // 1 CKDPRecordIdentifier * _identifier; 225 | // 4 CKDPRecord * _record; 226 | // 3? int _type; 227 | } 228 | 229 | message RecordRetrieveRequest { 230 | optional RecordIdentifier recordID = 1; 231 | optional UInt32 f6 = 6; 232 | 233 | // CKDPRecordRetrieveRequest - M211 234 | // ? NSString * _clientVersionETag; 235 | // ? CKDPRecordRetrieveRequestRetrieveAssetURL * _getAssetURL; 236 | // 1 CKDPRecordIdentifier * _recordIdentifier; 237 | // ? CKDPRequestedFields * _requestedFields; 238 | // ? NSString * _versionETag; 239 | } 240 | 241 | message RecordRetrieveResponse { 242 | optional Record record = 1; 243 | optional bool clientVersionETagMatch = 2; 244 | 245 | // CKDPRecordRetrieveResponse - M211 246 | // 2 BOOL _clientVersionETagMatch; 247 | // 1 CKDPRecord * _record; 248 | } 249 | 250 | message RequestedFields { 251 | repeated string field = 1; 252 | 253 | // CKDPRequestedFields 254 | // 1 NSMutableArray * _fields; 255 | } 256 | 257 | message ResponseOperationResult { // CKDPResponseOperationResult 258 | optional uint32 code = 1; 259 | optional Error error = 2; // TODO CKDPResponseOperationResultError 260 | } 261 | 262 | message Error { // TODO expand to CKDPResponseOperationResultError 263 | optional UInt32 code = 1; 264 | optional string message = 4; 265 | optional string id = 5; 266 | } 267 | 268 | message DateStatistics { 269 | optional Date creation = 1; 270 | optional Date modification = 2; 271 | 272 | // CKDPDateStatistics 273 | // 1 CKDPDate * _creation; 274 | // 2 CKDPDate * _modification; 275 | } 276 | 277 | message Date { 278 | optional double time = 1; 279 | 280 | // CKDPDate 281 | // 1 double _time; 282 | } 283 | 284 | message Identifier { 285 | optional string name = 1; 286 | optional uint32 type = 2; 287 | 288 | // CKDPIdentifier 289 | // 1 NSString * _name; 290 | // 2 int _type; 291 | } 292 | 293 | message Locale { 294 | optional string languageCode = 1; 295 | optional string regionCode = 2; 296 | repeated string enabledKeyboard = 3; 297 | optional string activeKeyboard = 4; 298 | 299 | // CKDPLocale 300 | // 1 NSString * _activeKeyboard; 301 | // 2 NSMutableArray * _enabledKeyboards; 302 | // 3 NSString * _languageCode; 303 | // 4 NSString * _regionCode; 304 | } 305 | 306 | message ProtectionInfo { 307 | optional bytes protectionInfo = 1; 308 | optional string protectionInfoTag = 2; 309 | 310 | // CKDPProtectionInfo 311 | // 1 NSData * _protectionInfo; 312 | // 2 NSString * _protectionInfoTag; 313 | } 314 | 315 | message Query { 316 | repeated RecordType type = 1; 317 | repeated QueryFilter filter = 2; 318 | optional uint32 queryOperator = 4; // Or possibly bool distinct 319 | 320 | // CKDPQuery 321 | // ?4 BOOL _distinct; 322 | // 2 NSMutableArray * _filters; 323 | // 4? int _queryOperator; 324 | // ? NSMutableArray * _sorts; 325 | // 1 NSMutableArray * _types; 326 | } 327 | 328 | message QueryFilter { 329 | optional RecordFieldIdentifier fieldName = 1; 330 | optional RecordFieldValue fieldValue = 2; 331 | optional uint32 type = 4; 332 | 333 | // CKDPQueryFilter 334 | // ? CKDPLocationBound * _bounds; 335 | // 1 CKDPRecordFieldIdentifier * _fieldName; 336 | // 2 CKDPRecordFieldValue * _fieldValue; 337 | // 4 int _type; 338 | } 339 | 340 | message Record { 341 | optional string etag= 1; // Probably 342 | optional RecordIdentifier RecordIdentifier = 2; 343 | optional RecordType type = 3; 344 | optional Identifier createdBy = 4; // Possibly 9 345 | optional DateStatistics timeStatistics = 5; 346 | repeated RecordField recordField = 7; 347 | optional Identifier modifiedBy = 9; // Possibly 4 348 | optional string modifiedByDevice = 11; 349 | optional ProtectionInfo protectionInfo = 13; 350 | optional uint32 permission = 15; // Probably. 351 | 352 | // CKDPRecord 353 | // ? NSMutableArray * _conflictLoserEtags; 354 | // 4/9 CKDPIdentifier * _createdBy; 355 | // 2 NSString * _etag; 356 | // 7 NSMutableArray * _fields; 357 | // 9/4 CKDPIdentifier * _modifiedBy; 358 | // 11 NSString * _modifiedByDevice; 359 | // 15? int _permission; 360 | // ? NSMutableArray * _pluginFields; 361 | // 13 CKDPProtectionInfo * _protectionInfo; 362 | // 2 CKDPRecordIdentifier * _recordIdentifier; 363 | // ? CKDPShareIdentifier * _shareId; 364 | // 5 CKDPDateStatistics * _timeStatistics; 365 | // 3 CKDPRecordType * _type; 366 | } 367 | 368 | message RecordField { 369 | optional RecordFieldIdentifier identifier = 1; 370 | optional RecordFieldValue value = 2; 371 | 372 | // CKDPRecordField. 373 | // 1 CKDPRecordFieldIdentifier * _identifier; 374 | // 2 CKDPRecordFieldValue * _value; 375 | } 376 | 377 | message RecordReference { 378 | optional uint32 type = 1; 379 | optional RecordIdentifier recordIdentifier = 2; 380 | 381 | // CKDPRecordReference.h 382 | // 2 CKDPRecordIdentifier * _recordIdentifier; 383 | // 1 int _type; 384 | } 385 | 386 | message RecordFieldValue { 387 | optional uint32 type = 1; 388 | optional bytes bytesValue = 2; 389 | optional uint32 uint32 = 4; 390 | optional Date dateValue = 6; // Possibly 391 | optional string stringValue = 7; 392 | optional RecordReference referenceValue = 9; 393 | optional Asset assetValue = 10; 394 | repeated RecordFieldValue recordFieldValue = 11; 395 | 396 | // CKDPRecordFieldValue 397 | // 10 CKDPAsset * _assetValue; 398 | // 2 NSData * _bytesValue; 399 | // 6 CKDPDate * _dateValue; 400 | // ? CKDPLocationCoordinate * _locationValue; 401 | // ? CKDPPackage * _packageValue; 402 | // 9 CKDPRecordReference * _referenceValue; 403 | // ? long long _signedValue; 404 | // 7 NSString * _stringValue; 405 | // 1 int _type; 406 | } 407 | 408 | message RecordType { 409 | optional string name = 1; 410 | 411 | // CKDPRecordType 412 | // 1 NSString * _name; 413 | } 414 | 415 | message RecordIdentifier { 416 | optional Identifier value = 1; 417 | optional RecordZoneIdentifier zoneIdentifier = 2; 418 | 419 | // CKDPRecordIdentifier. 420 | // 1 CKDPIdentifier * _value; 421 | // 2 CKDPRecordZoneIdentifier * _zoneIdentifier; 422 | } 423 | 424 | message RecordFieldIdentifier { 425 | optional string name = 1; 426 | 427 | // CKDPRecordFieldIdentifier. 428 | // 1 NSString * _name; 429 | } 430 | 431 | message RecordZoneIdentifier { 432 | optional Identifier value = 1; 433 | optional Identifier ownerIdentifier = 2; 434 | 435 | // CKDPRecordZoneIdentifier. 436 | // 2 CKDPIdentifier * _ownerIdentifier; 437 | // 1 CKDPIdentifier * _value; 438 | } 439 | 440 | message FileTokens { 441 | repeated FileToken fileTokens = 1; 442 | } 443 | 444 | message FileToken { 445 | optional bytes fileChecksum = 1; 446 | optional string token = 2; 447 | optional uint64 size = 3; // possibly file length 448 | optional bytes fileSignature = 4; // 90% certain of this 449 | 450 | // f1 f2 candidates 451 | // file checksum, file signature, sha256 452 | 453 | } 454 | 455 | message Asset { 456 | optional string dsPrsID = 1; 457 | optional bytes fileChecksum = 2; // fileChecksum 458 | optional uint64 size = 4; 459 | optional string downloadToken = 5; 460 | optional string contentBaseURL = 8; 461 | optional string dsid = 9; 462 | optional RecordIdentifier recordId = 10; 463 | repeated bytes f15 = 15; // 192 bit something or other 464 | optional bytes fileSignature = 17; // 90% certain of this 465 | optional uint64 downloadTokenExpiration = 18; 466 | 467 | // CKDPAsset 468 | // 8?9 NSString * _contentBaseURL; 469 | // ? NSData * _data; 470 | // ? NSString * _derivedContentType; 471 | // ? NSString * _downloadBaseURL; 472 | // ? NSData * _downloadRequest; 473 | // 5 NSString * _downloadToken; 474 | // 18? long long _downloadTokenExpiration; 475 | // ? long long _downloadURLExpiration; 476 | // ? NSData * _header; 477 | // ?1 9 NSString * _owner; 478 | // ? CKDPProtectionInfo * _protectionInfo; 479 | // 10 CKDPRecordIdentifier * _recordId; 480 | // ?2 1 NSData * _referenceSignature; 481 | // ?9 1 NSString * _requestor; 482 | // ?1 2 NSData * _signature; 483 | // 4 long long _size; 484 | // ? NSString * _uploadReceipt; 485 | } 486 | 487 | message UInt32 { 488 | optional uint32 value = 1; 489 | } 490 | 491 | 492 | message ZoneRetrieveRequest { 493 | optional RecordZoneIdentifier zoneIdentifier = 1; 494 | 495 | // CKDPZoneRetrieveRequest - M201 496 | // 1 CKDPRecordZoneIdentifier * _zoneIdentifier; 497 | } 498 | 499 | message ZoneRetrieveResponse { 500 | repeated ZoneRetrieveResponseZoneSummary zoneSummarys = 1; 501 | 502 | // CKDPZoneRetrieveResponse 503 | // 1 NSMutableArray * _zoneSummarys; 504 | } 505 | 506 | message ZoneRetrieveResponseZoneSummary { 507 | optional Zone targetZone = 1; 508 | 509 | // CKDPZoneRetrieveResponseZoneSummary 510 | // ?4 5 6 long long _assetQuotaUsage; 511 | // ?2 NSData * _clientChangeToken; 512 | // ?2 NSData * _currentServerContinuationToken; 513 | // ?4 5 6 int _deviceCount; 514 | // ?4 5 6 long long _metadataQuotaUsage; 515 | // 1 CKDPZone * _targetZone; 516 | } 517 | 518 | message Zone { 519 | optional RecordZoneIdentifier zoneIdentifier = 1; 520 | optional ProtectionInfo protectionInfo = 3; 521 | 522 | // CKDPZone 523 | // ?2 NSString * _etag; 524 | // 3 CKDPProtectionInfo * _protectionInfo; 525 | // 1 CKDPRecordZoneIdentifier * _zoneIdentifier; 526 | } 527 | 528 | // can try passing malformed fields, the server sometimes returns an error giving us the field name 529 | // known message types: 200, 201, 202, 210, 211, 212, 213, 214, 220, 230, 240, 241, 242, 243, 300, 301, 302, 400, 800, 801, 802, 803, 804, 900, 901 530 | -------------------------------------------------------------------------------- /iOS9_iCloud_POC.py: -------------------------------------------------------------------------------- 1 | ''' 2 | iOS9_iCloud_POC 3 | 4 | Usage: 5 | iOS9_iCloud_POC.py [-d -s -m ] ( | ) 6 | iOS9_iCloud_POC.py --token 7 | iOS9_iCloud_POC.py (-h | --help) 8 | iOS9_iCloud_POC.py --version 9 | 10 | Options: 11 | -d,--device Device, default: 0 = first device 12 | -s,--snapshot Snapshot, default: 0 = first snapshot 13 | -m,--manifest Manifest, default: 0 = first manifest 14 | --token Display dsPrsID:mmeAuthToken token and exit 15 | -h --help Show this screen 16 | --version Show version 17 | ''' 18 | 19 | ######################################################################################################################## 20 | # Imports 21 | ######################################################################################################################## 22 | 23 | import sys 24 | import os 25 | import binascii 26 | import base64 27 | import requests 28 | import logging 29 | import httplib 30 | import plistlib 31 | from pprint import pprint 32 | import json 33 | from urlparse import urlparse 34 | from cloud_kit_pb2 import RequestOperation, ResponseOperation, FileTokens 35 | from chunk_server_pb2 import FileGroups 36 | from pbuf import decode_protobuf_array, encode_protobuf_array 37 | from docopt import docopt 38 | 39 | 40 | ######################################################################################################################## 41 | # Constants 42 | ######################################################################################################################## 43 | 44 | Client_Info = ' ' 45 | USER_AGENT_UBD = 'CloudKit/479 (13A404)' 46 | 47 | ######################################################################################################################## 48 | # Setup 49 | ######################################################################################################################## 50 | 51 | # Turn on debugging for requests module 52 | httplib.HTTPConnection.debuglevel = 1 53 | logging.basicConfig() 54 | logging.getLogger().setLevel(logging.DEBUG) 55 | requests_log = logging.getLogger('requests.packages.urllib3') 56 | requests_log.setLevel(logging.DEBUG) 57 | requests_log.propagate = True 58 | 59 | 60 | ######################################################################################################################## 61 | # Common functions 62 | ######################################################################################################################## 63 | 64 | def debug(msg): 65 | print 'DEBUG: %s' % msg 66 | 67 | 68 | def random_bytes(num_bytes): 69 | return binascii.b2a_hex(os.urandom(num_bytes)) 70 | 71 | 72 | def random_guid(): 73 | return '%s-%s-%s-%s-%s' % (random_bytes(4), random_bytes(2), random_bytes(2), random_bytes(2), random_bytes(6)) 74 | 75 | 76 | def request(host, method, url, body, headers): 77 | uri = 'https://%s:%s' % (host, url) 78 | 79 | if method == 'GET': 80 | r = requests.get(uri, data=body, headers=headers) 81 | else: 82 | r = requests.post(uri, data=body, headers=headers) 83 | if r.status_code != 200: 84 | debug('_request: Request %s returned code %d' % (url, r.status_code)) 85 | sys.exit(1) 86 | result_string = r.content 87 | #result_headers = r.headers 88 | return result_string 89 | 90 | 91 | def plist_request(host, method, url, body, headers): 92 | ''' 93 | Make a request and intrepret as a plist 94 | ''' 95 | plist_string = request(host, method, url, body, headers) 96 | d = plistlib.readPlistFromString(plist_string) 97 | return d 98 | 99 | 100 | def json_request(host, method, url, body, headers): 101 | ''' 102 | Make a request and intrepret as json 103 | ''' 104 | json_string = request(host, method, url, body, headers) 105 | d = json.loads(json_string) 106 | return d 107 | 108 | 109 | def new_request_operation(): 110 | ''' 111 | Returns a requestOperation protobuf object with the requestOperationHeader filled out 112 | 113 | ''' 114 | requestOperation = RequestOperation() 115 | roh = requestOperation.requestOperationHeader 116 | roh.applicationContainer = 'com.apple.backup.ios' 117 | roh.applicationBundle = 'com.apple.backupd' 118 | roh.deviceIdentifier.name = device_ID 119 | roh.deviceIdentifier.type = 2 120 | roh.deviceSoftwareVersion = '9.0.1' 121 | roh.deviceLibraryName = 'com.apple.cloudkit.CloudKitDaemon' 122 | roh.deviceLibraryVersion = '479' 123 | roh.operation = 'CKDFetchRecordZonesOperation' 124 | roh.deviceFlowControlBudget = 40000 125 | roh.deviceFlowControlBudgetCap = 40000 126 | roh.version = '4.0' 127 | roh.f19 = 1 128 | roh.deviceAssignedName = device_name 129 | roh.deviceHardwareID = device_ID 130 | roh.f23 = 1 131 | roh.f25 = 1 132 | 133 | return requestOperation 134 | 135 | 136 | def retrieve_request(request_type): 137 | ''' 138 | Returns a new request operation with the type specified 139 | ''' 140 | requestOperation = new_request_operation() 141 | r = requestOperation.request 142 | r.uuid = random_guid() 143 | r.type = request_type 144 | r.f4 = 1 145 | return requestOperation 146 | 147 | 148 | def find_records_with_identifier(protbuf_recordfield_list, identifier): 149 | ''' 150 | Search through a list of recordFields and return the value with identifer.name == identifier 151 | ''' 152 | for record_field in protbuf_recordfield_list: 153 | if record_field.identifier.name == identifier: 154 | return record_field.value 155 | # Not found 156 | return None 157 | 158 | 159 | def main(): 160 | # TODO can we retrieve these? 161 | global device_ID 162 | global device_name 163 | device_ID = random_bytes(32) 164 | device_name = 'My iPhone' 165 | 166 | # Parse arguments 167 | arguments = docopt(__doc__, version='iOS9_iCloud_POC 1.0') 168 | 169 | apple_id = arguments[''] 170 | apple_pw = arguments[''] 171 | if arguments['']: 172 | dsPrsID, mmeAuthToken = arguments[''].split(':') 173 | SKIP_AUTH = True 174 | else: 175 | SKIP_AUTH = False 176 | 177 | device_index = int(arguments['--device'] or 0) 178 | snapshot_index = int(arguments['--snapshot'] or 0) 179 | manifest_index = int(arguments['--manifest'] or 0) 180 | 181 | 182 | #################################################################################################################### 183 | # Step 1: Authenticaton 184 | #################################################################################################################### 185 | if not SKIP_AUTH: 186 | debug('Step 1: Authenticaton') 187 | 188 | auth = 'Basic %s' % base64.b64encode('%s:%s' % (apple_id, apple_pw)) 189 | authenticateResponse = plist_request('setup.icloud.com', 'POST', '/setup/authenticate/$APPLE_ID$', '', 190 | {'Authorization': auth, 191 | 'Connection': 'Keep-Alive'}) 192 | if not authenticateResponse: 193 | debug('Invalid Apple ID/password?') 194 | sys.exit(1) 195 | pprint(authenticateResponse) 196 | 197 | dsPrsID = str(authenticateResponse['appleAccountInfo']['dsPrsID']) 198 | mmeAuthToken = authenticateResponse['tokens']['mmeAuthToken'] 199 | if arguments['--token']: 200 | print '\nToken: %s:%s' % (dsPrsID, mmeAuthToken) 201 | sys.exit(1) 202 | 203 | # Cookies don't seem to be required 204 | #cookie = result_headers['set-cookie'].split(';')[0] 205 | 206 | else: 207 | debug('Skipping Step 1 (Authentication)') 208 | 209 | # noinspection PyUnboundLocalVariable 210 | auth = 'Basic %s' % base64.b64encode('%s:%s' % (dsPrsID, mmeAuthToken)) 211 | 212 | 213 | #################################################################################################################### 214 | # STEP 2. Account settings. 215 | #################################################################################################################### 216 | debug('\nSTEP 2. Account settings.') 217 | if not SKIP_AUTH: 218 | account_settings = plist_request('setup.icloud.com', 'POST', '/setup/get_account_settings', '', 219 | {'Authorization': auth, 220 | 'X-MMe-Client-Info': Client_Info, 221 | 'User-Agent': USER_AGENT_UBD 222 | # 'Cookie': cookie 223 | }) 224 | else: 225 | account_settings = plist_request('setup.icloud.com', 'POST', '/setup/get_account_settings', '', 226 | {'Authorization': auth, 227 | 'X-MMe-Client-Info': Client_Info, 228 | 'User-Agent': USER_AGENT_UBD}) 229 | 230 | pprint(account_settings) 231 | cloud_kit_token = account_settings['tokens']['cloudKitToken'] 232 | # if SKIP_AUTH: 233 | # cookie = result_headers['set-cookie'].split(';')[0] 234 | 235 | 236 | #################################################################################################################### 237 | # STEP 3. CloudKit Application Initialization. 238 | #################################################################################################################### 239 | debug('\nSTEP 3. CloudKit Application Initialization.') 240 | # Note, we aren't passing all the headers that Inflatable does or even that the real iphone does 241 | # But our response seem to be the same 242 | cloudkit_init = json_request('setup.icloud.com', 'POST', '/setup/ck/v1/ckAppInit?container=com.apple.backup.ios', '', 243 | {'Authorization': auth, 244 | 'X-MMe-Client-Info': Client_Info, 245 | 'X-CloudKit-AuthToken': cloud_kit_token, 246 | 'X-CloudKit-ContainerId': 'com.apple.backup.ios', 247 | 'X-CloudKit-BundleId': 'com.apple.backupd', 248 | 'X-CloudKit-Environment': 'production', 249 | 'X-CloudKit-Partition': 'production', 250 | 'User-Agent': USER_AGENT_UBD 251 | # 'Cookie': cookie 252 | }) 253 | 254 | pprint(cloudkit_init) 255 | 256 | ckdatabase_host = urlparse(cloudkit_init['cloudKitDatabaseUrl']).hostname 257 | cloudkit_user_id = cloudkit_init['cloudKitUserId'] 258 | 259 | 260 | #################################################################################################################### 261 | # STEP 4. Record zones. 262 | #Returns record zone data which needs further analysis. 263 | #################################################################################################################### 264 | debug('\nSTEP 4. Record zones.') 265 | 266 | requestOperation = retrieve_request(201) 267 | # zoneRetrieveRequest 268 | zrr = requestOperation.zoneRetrieveRequest 269 | zrr.zoneIdentifier.value.name = 'mbksync' 270 | zrr.zoneIdentifier.value.type = 6 271 | zrr.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 272 | zrr.zoneIdentifier.ownerIdentifier.type = 7 273 | 274 | debug(requestOperation) 275 | body = encode_protobuf_array([requestOperation]) 276 | cloudkit_header = {'X-MMe-Client-Info': Client_Info, 277 | 'X-Apple-Request-UUID': random_guid(), 278 | 'X-CloudKit-UserId': cloudkit_user_id, 279 | 'X-CloudKit-AuthToken': cloud_kit_token, 280 | 'X-CloudKit-ContainerId': 'com.apple.backup.ios', 281 | 'X-CloudKit-BundleId': 'com.apple.backupd', 282 | 'X-CloudKit-ProtocolVersion': 'client=1;comments=1;device=1;presence=1;records=1;sharing=1;subscriptions=1;users=1;mescal=1;', 283 | 'Accept': 'application/x-protobuf', 284 | 'Content-Type': 'application/x-protobuf; desc="https://p33-ckdatabase.icloud.com:443/static/protobuf/CloudDB/CloudDBClient.desc"; messageType=RequestOperation; delimited=true', 285 | 'User-Agent': USER_AGENT_UBD 286 | # 'Cookie': cookie 287 | } 288 | 289 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 290 | zone_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 291 | debug(zone_retrieve_response) 292 | 293 | 294 | #################################################################################################################### 295 | #STEP 5. Backup list 296 | #Returns device data/ backups. 297 | #################################################################################################################### 298 | debug('\nSTEP 5. Backup list.') 299 | 300 | requestOperation = retrieve_request(211) 301 | # recordRetrieveRequest 302 | rrr = requestOperation.recordRetrieveRequest 303 | rrr.recordID.value.name = 'BackupAccount' 304 | rrr.recordID.value.type = 1 305 | rrr.recordID.zoneIdentifier.value.name = 'mbksync' 306 | rrr.recordID.zoneIdentifier.value.type = 6 307 | rrr.recordID.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 308 | rrr.recordID.zoneIdentifier.ownerIdentifier.type = 7 309 | rrr.f6.value = 1 310 | 311 | debug(requestOperation) 312 | body = encode_protobuf_array([requestOperation]) 313 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 314 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 315 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 316 | debug(record_retrieve_response) 317 | 318 | # What is this thing? Is it really an id associated with a particular backup? 319 | devices = find_records_with_identifier( 320 | record_retrieve_response.recordRetrieveResponse.record.recordField, 321 | 'devices' 322 | ) 323 | if device_index >= len(devices.recordFieldValue): 324 | print 'No such device. Available devices: %s' % devices 325 | sys.exit(1) 326 | 327 | backup_id = devices.recordFieldValue[device_index].referenceValue.recordIdentifier.value.name 328 | 329 | 330 | #################################################################################################################### 331 | #STEP 6. Snapshot list (+ Keybag) 332 | # Message type 211 with the required backup uuid, protobuf array encoded. 333 | # Returns device/ snapshots/ keybag information. 334 | # Timestamps are hex encoded double offsets to 01 Jan 2001 00:00:00 GMT (Cocoa/ Webkit reference date). 335 | #################################################################################################################### 336 | debug('\nSTEP 6. Snapshot list (+ Keybag)') 337 | 338 | requestOperation = retrieve_request(211) 339 | # recordRetrieveRequest 340 | rrr = requestOperation.recordRetrieveRequest 341 | rrr.recordID.value.name = backup_id 342 | rrr.recordID.value.type = 1 343 | rrr.recordID.zoneIdentifier.value.name = 'mbksync' 344 | rrr.recordID.zoneIdentifier.value.type = 6 345 | rrr.recordID.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 346 | rrr.recordID.zoneIdentifier.ownerIdentifier.type = 7 347 | rrr.f6.value = 1 348 | 349 | debug(requestOperation) 350 | body = encode_protobuf_array([requestOperation]) 351 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 352 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 353 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 354 | debug(record_retrieve_response) 355 | 356 | snapshots = find_records_with_identifier( 357 | record_retrieve_response.recordRetrieveResponse.record.recordField, 358 | 'snapshots' 359 | ) 360 | 361 | if snapshot_index >= len(snapshots.recordFieldValue): 362 | print 'No such snapshot. Available snapshots: %s' % snapshots 363 | sys.exit(0) 364 | 365 | a_snapshot = snapshots.recordFieldValue[snapshot_index].referenceValue.recordIdentifier.value.name 366 | 367 | current_keybag_UUID = find_records_with_identifier( 368 | record_retrieve_response.recordRetrieveResponse.record.recordField, 369 | 'currentKeybagUUID' 370 | ).stringValue 371 | 372 | 373 | #################################################################################################################### 374 | # STEP 7. Manifest list. 375 | # 376 | # Url/ headers as step 6. 377 | # Message type 211 with the required snapshot uuid, protobuf array encoded. 378 | # Returns system/ backup properties (bytes ? format ?? proto), quota information and manifest details. 379 | #################################################################################################################### 380 | debug('\nSTEP 7. Manifest list') 381 | 382 | requestOperation = retrieve_request(211) 383 | # recordRetrieveRequest 384 | rrr = requestOperation.recordRetrieveRequest 385 | rrr.recordID.value.name = a_snapshot 386 | rrr.recordID.value.type = 1 387 | rrr.recordID.zoneIdentifier.value.name = 'mbksync' 388 | rrr.recordID.zoneIdentifier.value.type = 6 389 | rrr.recordID.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 390 | rrr.recordID.zoneIdentifier.ownerIdentifier.type = 7 391 | rrr.f6.value = 1 392 | 393 | debug(requestOperation) 394 | body = encode_protobuf_array([requestOperation]) 395 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 396 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 397 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 398 | debug(record_retrieve_response) 399 | 400 | manifest_ids = find_records_with_identifier( 401 | record_retrieve_response.recordRetrieveResponse.record.recordField, 402 | 'manifestIDs' 403 | ) 404 | if manifest_index >= len(manifest_ids.recordFieldValue): 405 | print 'No such manifest. Available manifests: %s' % manifest_ids 406 | a_manifest_id = manifest_ids.recordFieldValue[manifest_index].stringValue 407 | 408 | 409 | ######################################################################################################################## 410 | # STEP 8. Retrieve list of files. 411 | # 412 | # Url/ headers as step 7. 413 | # Message type 211 with the required manifest, protobuf array encoded. 414 | # Returns system/ backup properties (bytes ? format ?? proto), quota information and manifest details. 415 | # 416 | # Returns a rather somewhat familiar looking set of results but with encoded bytes. 417 | ######################################################################################################################## 418 | debug('\nSTEP 8. Retrieve list of files.') 419 | 420 | requestOperation = retrieve_request(211) 421 | # recordRetrieveRequest 422 | rrr = requestOperation.recordRetrieveRequest 423 | rrr.recordID.value.name = a_manifest_id + ':0' 424 | rrr.recordID.value.type = 1 425 | rrr.recordID.zoneIdentifier.value.name = '_defaultZone' 426 | rrr.recordID.zoneIdentifier.value.type = 6 427 | rrr.recordID.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 428 | rrr.recordID.zoneIdentifier.ownerIdentifier.type = 7 429 | rrr.f6.value = 1 430 | 431 | debug(requestOperation) 432 | body = encode_protobuf_array([requestOperation]) 433 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 434 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 435 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 436 | debug(record_retrieve_response) 437 | 438 | asset_tokens = find_records_with_identifier( 439 | record_retrieve_response.recordRetrieveResponse.record.recordField, 440 | 'files' 441 | ) 442 | 443 | if asset_tokens is None: 444 | print 'No files found' 445 | sys.exit(0) 446 | 447 | # Right now just grabbing the first file. 448 | # InflatableDonkey looks for the first file that is non 0 length 449 | # an_asset_token = asset_tokens.recordFieldValue[0].referenceValue.recordIdentifier.value.name 450 | length = 0 451 | an_asset_token = None 452 | for record_field_value in asset_tokens.recordFieldValue: 453 | an_asset_token = record_field_value.referenceValue.recordIdentifier.value.name 454 | # F:UUID:token:length:x 455 | _, uuid, token, length, x = an_asset_token.split(':') 456 | if int(length) > 0: break 457 | if int(length) == 0: 458 | print 'All files are 0 length' 459 | sys.exit(0) 460 | 461 | 462 | ######################################################################################################################## 463 | # STEP 9. Retrieve asset tokens. 464 | # 465 | # Url/ headers as step 8. 466 | # Message type 211 with the required file, protobuf array encoded. 467 | ######################################################################################################################## 468 | debug('\nSTEP 9. Retrieve asset tokens.') 469 | 470 | requestOperation = retrieve_request(211) 471 | # recordRetrieveRequest 472 | rrr = requestOperation.recordRetrieveRequest 473 | rrr.recordID.value.name = an_asset_token 474 | rrr.recordID.value.type = 1 475 | rrr.recordID.zoneIdentifier.value.name = '_defaultZone' 476 | rrr.recordID.zoneIdentifier.value.type = 6 477 | rrr.recordID.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 478 | rrr.recordID.zoneIdentifier.ownerIdentifier.type = 7 479 | rrr.f6.value = 1 480 | 481 | debug(requestOperation) 482 | body = encode_protobuf_array([requestOperation]) 483 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 484 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/record/retrieve', body, cloudkit_header) 485 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 486 | debug(record_retrieve_response) 487 | 488 | value = find_records_with_identifier( 489 | record_retrieve_response.recordRetrieveResponse.record.recordField, 490 | 'contents' 491 | ) 492 | # I think these are file attributes 493 | try: 494 | asset_value = value.assetValue 495 | except AttributeError: 496 | print 'No asset token found.' 497 | sys.exit(0) 498 | 499 | 500 | #################################################################################################################### 501 | # STEP 10. AuthorizeGet. 502 | # 503 | # Process somewhat different to iOS8. 504 | # 505 | # New headers/ mmcs auth token. See AuthorizeGetRequestFactory for details. 506 | # Returns a ChunkServer.FileGroup protobuf which is largely identical to iOS8 507 | #################################################################################################################### 508 | debug('\nSTEP 10. AuthorizeGet.') 509 | 510 | mmcsAuthToken = '%s %s %s' % ( 511 | asset_value.fileChecksum.encode('hex'), 512 | asset_value.fileSignature.encode('hex'), 513 | asset_value.downloadToken 514 | ) 515 | 516 | headers = { 517 | 'Accept': 'application/vnd.com.apple.me.ubchunk+protobuf', 518 | 'Content-Type': 'application/vnd.com.apple.me.ubchunk+protobuf', 519 | 'x-apple-mmcs-dataclass': 'com.apple.Dataclass.CloudKit', 520 | 'X-CloudKit-Container': 'com.apple.backup.ios', 521 | 'X-CloudKit-Zone': '_defaultZone', 522 | 'x-apple-mmcs-auth': mmcsAuthToken, 523 | 'x-apple-mme-dsid': dsPrsID, 524 | 'User-Agent': USER_AGENT_UBD, 525 | 'x-apple-mmcs-proto-version': '4.0', 526 | 'X-Mme-Client-Info': ' ' 527 | } 528 | 529 | # The body is a protobuf object FileTokens 530 | file_tokens = FileTokens() 531 | file_token = file_tokens.fileTokens.add() 532 | file_token.fileChecksum = asset_value.fileChecksum 533 | file_token.token = asset_value.downloadToken 534 | file_token.fileSignature = asset_value.fileSignature 535 | 536 | body = file_tokens.SerializeToString() 537 | host = urlparse(asset_value.contentBaseURL).hostname 538 | url = '/' + dsPrsID + '/authorizeGet' 539 | pbuf_string = request(host, 'POST', url, body, headers) 540 | 541 | file_groups = FileGroups() 542 | file_groups.ParseFromString(pbuf_string) 543 | 544 | debug(file_groups) 545 | 546 | 547 | #################################################################################################################### 548 | # STEP 11. ChunkServer.FileGroups. 549 | # 550 | # TODO. 551 | #################################################################################################################### 552 | 553 | 554 | #################################################################################################################### 555 | # STEP 12. Assemble assets/ files. 556 | #################################################################################################################### 557 | debug('\nSTEP 12. Assemble assets/files.') 558 | 559 | requestOperation = retrieve_request(220) 560 | # recordRetrieveRequest 561 | qrr = requestOperation.queryRetrieveRequest 562 | record_type = qrr.query.type.add() 563 | record_type.name = 'PrivilegedBatchRecordFetch' 564 | query_filter = qrr.query.filter.add() 565 | query_filter.fieldName.name = '___recordID' 566 | query_filter.fieldValue.type = 5 567 | query_filter.fieldValue.referenceValue.recordIdentifier.value.name = 'K:' + current_keybag_UUID 568 | query_filter.fieldValue.referenceValue.recordIdentifier.value.type = 1 569 | query_filter.fieldValue.referenceValue.recordIdentifier.zoneIdentifier.value.name = 'mbksync' 570 | query_filter.fieldValue.referenceValue.recordIdentifier.zoneIdentifier.value.type = 6 571 | query_filter.fieldValue.referenceValue.recordIdentifier.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 572 | query_filter.fieldValue.referenceValue.recordIdentifier.zoneIdentifier.ownerIdentifier.type = 7 573 | query_filter.type = 1 574 | 575 | qrr.zoneIdentifier.value.name = 'mbksync' 576 | qrr.zoneIdentifier.value.type = 6 577 | qrr.zoneIdentifier.ownerIdentifier.name = cloudkit_user_id 578 | qrr.zoneIdentifier.ownerIdentifier.type = 7 579 | qrr.f6.value = 1 580 | 581 | debug(requestOperation) 582 | body = encode_protobuf_array([requestOperation]) 583 | cloudkit_header['X-Apple-Request-UUID'] = random_guid() 584 | pbuf_string = request(ckdatabase_host, 'POST', '/api/client/query/retrieve', body, cloudkit_header) 585 | record_retrieve_response = decode_protobuf_array(pbuf_string, ResponseOperation)[0] 586 | debug(record_retrieve_response) 587 | 588 | debug('Done') 589 | 590 | 591 | if __name__ == '__main__': 592 | main() 593 | -------------------------------------------------------------------------------- /icloud.proto: -------------------------------------------------------------------------------- 1 | // source https://code.google.com/p/iphonebackupbrowser/ 2 | // modified Ahseya 3 | 4 | message MBSAccount { 5 | optional string AccountID = 1; 6 | repeated bytes backupUDID = 2; 7 | } 8 | 9 | message MBSBackup { 10 | optional bytes backupUDID = 1; 11 | optional uint64 QuotaUsed = 2; 12 | repeated MBSSnapshot Snapshot = 3; 13 | optional MBSBackupAttributes Attributes = 4; 14 | optional uint64 KeysLastModified = 5; 15 | } 16 | 17 | message MBSBackupAttributes { 18 | optional string DeviceClass = 1; 19 | optional string ProductType = 2; 20 | optional string SerialNumber = 3; 21 | optional string DeviceColor = 4; 22 | optional string HardwareModel = 5; 23 | optional string MarketingName = 6; 24 | } 25 | 26 | message MBSFile { 27 | optional bytes FileID = 1; 28 | optional string Domain = 2; 29 | optional string RelativePath = 3; 30 | optional bytes Signature = 4; 31 | optional uint64 Size = 5; 32 | optional MBSFileAttributes Attributes = 6; 33 | } 34 | 35 | message MBSFileAttributes { 36 | optional uint32 KeybagID = 1; 37 | optional string Target = 2; 38 | optional bytes EncryptionKey = 3; 39 | optional uint64 InodeNumber = 4; 40 | optional uint32 Mode = 5; 41 | optional uint32 UserID = 6; 42 | optional uint32 GroupID = 7; 43 | optional uint64 LastModified = 8; 44 | optional uint64 LastStatusChange = 9; 45 | optional uint64 Birth = 10; 46 | optional uint32 ProtectionClass = 12; 47 | optional MBSFileExtendedAttribute ExtendedAttribute = 13; 48 | optional uint32 EncryptionKeyVersion = 14; 49 | optional uint64 DecryptedSize = 15; 50 | } 51 | 52 | message MBSSnapshot { 53 | optional uint32 SnapshotID = 1; 54 | optional uint64 QuotaReserved = 2; 55 | optional uint64 LastModified = 3; 56 | optional MBSSnapshotAttributes Attributes = 5; 57 | optional uint64 Committed = 6; 58 | } 59 | 60 | message MBSSnapshotAttributes { 61 | optional string DeviceName = 1; 62 | optional string ProductVersion = 2; 63 | optional string BuildVersion = 3; 64 | optional uint32 KeybagID = 4; 65 | optional bytes KeybagUUID = 5; 66 | optional int32 BackupReason = 6; 67 | optional int32 BackupType = 7; 68 | } 69 | 70 | message MBSSnapshotID { 71 | optional uint32 SnapshotID = 1; 72 | } 73 | 74 | message MBSFileAuthToken { 75 | required bytes FileID = 1; 76 | optional string AuthToken = 2; 77 | } 78 | message MBSFileAuthTokens { 79 | repeated MBSFileAuthToken tokens = 1; 80 | } 81 | 82 | message MBSFileID { 83 | required bytes FileID = 1; 84 | } 85 | 86 | message MBSKey { 87 | optional uint32 KeyID = 1; 88 | optional bytes KeyData = 2; 89 | } 90 | 91 | message MBSKeySet { 92 | repeated MBSKey Key = 1; 93 | } 94 | 95 | message MBSFileExtendedAttribute { 96 | optional string Name = 1; 97 | optional bytes Value = 2; 98 | } 99 | -------------------------------------------------------------------------------- /icloud_pb2.py: -------------------------------------------------------------------------------- 1 | # Generated by the protocol buffer compiler. DO NOT EDIT! 2 | # source: icloud.proto 3 | 4 | import sys 5 | _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | from google.protobuf import descriptor_pb2 11 | # @@protoc_insertion_point(imports) 12 | 13 | _sym_db = _symbol_database.Default() 14 | 15 | 16 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='icloud.proto', 20 | package='', 21 | serialized_pb=_b('\n\x0cicloud.proto\"3\n\nMBSAccount\x12\x11\n\tAccountID\x18\x01 \x01(\t\x12\x12\n\nbackupUDID\x18\x02 \x03(\x0c\"\x96\x01\n\tMBSBackup\x12\x12\n\nbackupUDID\x18\x01 \x01(\x0c\x12\x11\n\tQuotaUsed\x18\x02 \x01(\x04\x12\x1e\n\x08Snapshot\x18\x03 \x03(\x0b\x32\x0c.MBSSnapshot\x12(\n\nAttributes\x18\x04 \x01(\x0b\x32\x14.MBSBackupAttributes\x12\x18\n\x10KeysLastModified\x18\x05 \x01(\x04\"\x98\x01\n\x13MBSBackupAttributes\x12\x13\n\x0b\x44\x65viceClass\x18\x01 \x01(\t\x12\x13\n\x0bProductType\x18\x02 \x01(\t\x12\x14\n\x0cSerialNumber\x18\x03 \x01(\t\x12\x13\n\x0b\x44\x65viceColor\x18\x04 \x01(\t\x12\x15\n\rHardwareModel\x18\x05 \x01(\t\x12\x15\n\rMarketingName\x18\x06 \x01(\t\"\x88\x01\n\x07MBSFile\x12\x0e\n\x06\x46ileID\x18\x01 \x01(\x0c\x12\x0e\n\x06\x44omain\x18\x02 \x01(\t\x12\x14\n\x0cRelativePath\x18\x03 \x01(\t\x12\x11\n\tSignature\x18\x04 \x01(\x0c\x12\x0c\n\x04Size\x18\x05 \x01(\x04\x12&\n\nAttributes\x18\x06 \x01(\x0b\x32\x12.MBSFileAttributes\"\xd3\x02\n\x11MBSFileAttributes\x12\x10\n\x08KeybagID\x18\x01 \x01(\r\x12\x0e\n\x06Target\x18\x02 \x01(\t\x12\x15\n\rEncryptionKey\x18\x03 \x01(\x0c\x12\x13\n\x0bInodeNumber\x18\x04 \x01(\x04\x12\x0c\n\x04Mode\x18\x05 \x01(\r\x12\x0e\n\x06UserID\x18\x06 \x01(\r\x12\x0f\n\x07GroupID\x18\x07 \x01(\r\x12\x14\n\x0cLastModified\x18\x08 \x01(\x04\x12\x18\n\x10LastStatusChange\x18\t \x01(\x04\x12\r\n\x05\x42irth\x18\n \x01(\x04\x12\x17\n\x0fProtectionClass\x18\x0c \x01(\r\x12\x34\n\x11\x45xtendedAttribute\x18\r \x01(\x0b\x32\x19.MBSFileExtendedAttribute\x12\x1c\n\x14\x45ncryptionKeyVersion\x18\x0e \x01(\r\x12\x15\n\rDecryptedSize\x18\x0f \x01(\x04\"\x8d\x01\n\x0bMBSSnapshot\x12\x12\n\nSnapshotID\x18\x01 \x01(\r\x12\x15\n\rQuotaReserved\x18\x02 \x01(\x04\x12\x14\n\x0cLastModified\x18\x03 \x01(\x04\x12*\n\nAttributes\x18\x05 \x01(\x0b\x32\x16.MBSSnapshotAttributes\x12\x11\n\tCommitted\x18\x06 \x01(\x04\"\xa9\x01\n\x15MBSSnapshotAttributes\x12\x12\n\nDeviceName\x18\x01 \x01(\t\x12\x16\n\x0eProductVersion\x18\x02 \x01(\t\x12\x14\n\x0c\x42uildVersion\x18\x03 \x01(\t\x12\x10\n\x08KeybagID\x18\x04 \x01(\r\x12\x12\n\nKeybagUUID\x18\x05 \x01(\x0c\x12\x14\n\x0c\x42\x61\x63kupReason\x18\x06 \x01(\x05\x12\x12\n\nBackupType\x18\x07 \x01(\x05\"#\n\rMBSSnapshotID\x12\x12\n\nSnapshotID\x18\x01 \x01(\r\"5\n\x10MBSFileAuthToken\x12\x0e\n\x06\x46ileID\x18\x01 \x02(\x0c\x12\x11\n\tAuthToken\x18\x02 \x01(\t\"6\n\x11MBSFileAuthTokens\x12!\n\x06tokens\x18\x01 \x03(\x0b\x32\x11.MBSFileAuthToken\"\x1b\n\tMBSFileID\x12\x0e\n\x06\x46ileID\x18\x01 \x02(\x0c\"(\n\x06MBSKey\x12\r\n\x05KeyID\x18\x01 \x01(\r\x12\x0f\n\x07KeyData\x18\x02 \x01(\x0c\"!\n\tMBSKeySet\x12\x14\n\x03Key\x18\x01 \x03(\x0b\x32\x07.MBSKey\"7\n\x18MBSFileExtendedAttribute\x12\x0c\n\x04Name\x18\x01 \x01(\t\x12\r\n\x05Value\x18\x02 \x01(\x0c') 22 | ) 23 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 24 | 25 | 26 | 27 | 28 | _MBSACCOUNT = _descriptor.Descriptor( 29 | name='MBSAccount', 30 | full_name='MBSAccount', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | fields=[ 35 | _descriptor.FieldDescriptor( 36 | name='AccountID', full_name='MBSAccount.AccountID', index=0, 37 | number=1, type=9, cpp_type=9, label=1, 38 | has_default_value=False, default_value=_b("").decode('utf-8'), 39 | message_type=None, enum_type=None, containing_type=None, 40 | is_extension=False, extension_scope=None, 41 | options=None), 42 | _descriptor.FieldDescriptor( 43 | name='backupUDID', full_name='MBSAccount.backupUDID', index=1, 44 | number=2, type=12, cpp_type=9, label=3, 45 | has_default_value=False, default_value=[], 46 | message_type=None, enum_type=None, containing_type=None, 47 | is_extension=False, extension_scope=None, 48 | options=None), 49 | ], 50 | extensions=[ 51 | ], 52 | nested_types=[], 53 | enum_types=[ 54 | ], 55 | options=None, 56 | is_extendable=False, 57 | extension_ranges=[], 58 | oneofs=[ 59 | ], 60 | serialized_start=16, 61 | serialized_end=67, 62 | ) 63 | 64 | 65 | _MBSBACKUP = _descriptor.Descriptor( 66 | name='MBSBackup', 67 | full_name='MBSBackup', 68 | filename=None, 69 | file=DESCRIPTOR, 70 | containing_type=None, 71 | fields=[ 72 | _descriptor.FieldDescriptor( 73 | name='backupUDID', full_name='MBSBackup.backupUDID', index=0, 74 | number=1, type=12, cpp_type=9, label=1, 75 | has_default_value=False, default_value=_b(""), 76 | message_type=None, enum_type=None, containing_type=None, 77 | is_extension=False, extension_scope=None, 78 | options=None), 79 | _descriptor.FieldDescriptor( 80 | name='QuotaUsed', full_name='MBSBackup.QuotaUsed', index=1, 81 | number=2, type=4, cpp_type=4, label=1, 82 | has_default_value=False, default_value=0, 83 | message_type=None, enum_type=None, containing_type=None, 84 | is_extension=False, extension_scope=None, 85 | options=None), 86 | _descriptor.FieldDescriptor( 87 | name='Snapshot', full_name='MBSBackup.Snapshot', index=2, 88 | number=3, type=11, cpp_type=10, label=3, 89 | has_default_value=False, default_value=[], 90 | message_type=None, enum_type=None, containing_type=None, 91 | is_extension=False, extension_scope=None, 92 | options=None), 93 | _descriptor.FieldDescriptor( 94 | name='Attributes', full_name='MBSBackup.Attributes', index=3, 95 | number=4, type=11, cpp_type=10, label=1, 96 | has_default_value=False, default_value=None, 97 | message_type=None, enum_type=None, containing_type=None, 98 | is_extension=False, extension_scope=None, 99 | options=None), 100 | _descriptor.FieldDescriptor( 101 | name='KeysLastModified', full_name='MBSBackup.KeysLastModified', index=4, 102 | number=5, type=4, cpp_type=4, label=1, 103 | has_default_value=False, default_value=0, 104 | message_type=None, enum_type=None, containing_type=None, 105 | is_extension=False, extension_scope=None, 106 | options=None), 107 | ], 108 | extensions=[ 109 | ], 110 | nested_types=[], 111 | enum_types=[ 112 | ], 113 | options=None, 114 | is_extendable=False, 115 | extension_ranges=[], 116 | oneofs=[ 117 | ], 118 | serialized_start=70, 119 | serialized_end=220, 120 | ) 121 | 122 | 123 | _MBSBACKUPATTRIBUTES = _descriptor.Descriptor( 124 | name='MBSBackupAttributes', 125 | full_name='MBSBackupAttributes', 126 | filename=None, 127 | file=DESCRIPTOR, 128 | containing_type=None, 129 | fields=[ 130 | _descriptor.FieldDescriptor( 131 | name='DeviceClass', full_name='MBSBackupAttributes.DeviceClass', index=0, 132 | number=1, type=9, cpp_type=9, label=1, 133 | has_default_value=False, default_value=_b("").decode('utf-8'), 134 | message_type=None, enum_type=None, containing_type=None, 135 | is_extension=False, extension_scope=None, 136 | options=None), 137 | _descriptor.FieldDescriptor( 138 | name='ProductType', full_name='MBSBackupAttributes.ProductType', index=1, 139 | number=2, type=9, cpp_type=9, label=1, 140 | has_default_value=False, default_value=_b("").decode('utf-8'), 141 | message_type=None, enum_type=None, containing_type=None, 142 | is_extension=False, extension_scope=None, 143 | options=None), 144 | _descriptor.FieldDescriptor( 145 | name='SerialNumber', full_name='MBSBackupAttributes.SerialNumber', index=2, 146 | number=3, type=9, cpp_type=9, label=1, 147 | has_default_value=False, default_value=_b("").decode('utf-8'), 148 | message_type=None, enum_type=None, containing_type=None, 149 | is_extension=False, extension_scope=None, 150 | options=None), 151 | _descriptor.FieldDescriptor( 152 | name='DeviceColor', full_name='MBSBackupAttributes.DeviceColor', index=3, 153 | number=4, type=9, cpp_type=9, label=1, 154 | has_default_value=False, default_value=_b("").decode('utf-8'), 155 | message_type=None, enum_type=None, containing_type=None, 156 | is_extension=False, extension_scope=None, 157 | options=None), 158 | _descriptor.FieldDescriptor( 159 | name='HardwareModel', full_name='MBSBackupAttributes.HardwareModel', index=4, 160 | number=5, type=9, cpp_type=9, label=1, 161 | has_default_value=False, default_value=_b("").decode('utf-8'), 162 | message_type=None, enum_type=None, containing_type=None, 163 | is_extension=False, extension_scope=None, 164 | options=None), 165 | _descriptor.FieldDescriptor( 166 | name='MarketingName', full_name='MBSBackupAttributes.MarketingName', index=5, 167 | number=6, type=9, cpp_type=9, label=1, 168 | has_default_value=False, default_value=_b("").decode('utf-8'), 169 | message_type=None, enum_type=None, containing_type=None, 170 | is_extension=False, extension_scope=None, 171 | options=None), 172 | ], 173 | extensions=[ 174 | ], 175 | nested_types=[], 176 | enum_types=[ 177 | ], 178 | options=None, 179 | is_extendable=False, 180 | extension_ranges=[], 181 | oneofs=[ 182 | ], 183 | serialized_start=223, 184 | serialized_end=375, 185 | ) 186 | 187 | 188 | _MBSFILE = _descriptor.Descriptor( 189 | name='MBSFile', 190 | full_name='MBSFile', 191 | filename=None, 192 | file=DESCRIPTOR, 193 | containing_type=None, 194 | fields=[ 195 | _descriptor.FieldDescriptor( 196 | name='FileID', full_name='MBSFile.FileID', index=0, 197 | number=1, type=12, cpp_type=9, label=1, 198 | has_default_value=False, default_value=_b(""), 199 | message_type=None, enum_type=None, containing_type=None, 200 | is_extension=False, extension_scope=None, 201 | options=None), 202 | _descriptor.FieldDescriptor( 203 | name='Domain', full_name='MBSFile.Domain', index=1, 204 | number=2, type=9, cpp_type=9, label=1, 205 | has_default_value=False, default_value=_b("").decode('utf-8'), 206 | message_type=None, enum_type=None, containing_type=None, 207 | is_extension=False, extension_scope=None, 208 | options=None), 209 | _descriptor.FieldDescriptor( 210 | name='RelativePath', full_name='MBSFile.RelativePath', index=2, 211 | number=3, type=9, cpp_type=9, label=1, 212 | has_default_value=False, default_value=_b("").decode('utf-8'), 213 | message_type=None, enum_type=None, containing_type=None, 214 | is_extension=False, extension_scope=None, 215 | options=None), 216 | _descriptor.FieldDescriptor( 217 | name='Signature', full_name='MBSFile.Signature', index=3, 218 | number=4, type=12, cpp_type=9, label=1, 219 | has_default_value=False, default_value=_b(""), 220 | message_type=None, enum_type=None, containing_type=None, 221 | is_extension=False, extension_scope=None, 222 | options=None), 223 | _descriptor.FieldDescriptor( 224 | name='Size', full_name='MBSFile.Size', index=4, 225 | number=5, type=4, cpp_type=4, label=1, 226 | has_default_value=False, default_value=0, 227 | message_type=None, enum_type=None, containing_type=None, 228 | is_extension=False, extension_scope=None, 229 | options=None), 230 | _descriptor.FieldDescriptor( 231 | name='Attributes', full_name='MBSFile.Attributes', index=5, 232 | number=6, type=11, cpp_type=10, label=1, 233 | has_default_value=False, default_value=None, 234 | message_type=None, enum_type=None, containing_type=None, 235 | is_extension=False, extension_scope=None, 236 | options=None), 237 | ], 238 | extensions=[ 239 | ], 240 | nested_types=[], 241 | enum_types=[ 242 | ], 243 | options=None, 244 | is_extendable=False, 245 | extension_ranges=[], 246 | oneofs=[ 247 | ], 248 | serialized_start=378, 249 | serialized_end=514, 250 | ) 251 | 252 | 253 | _MBSFILEATTRIBUTES = _descriptor.Descriptor( 254 | name='MBSFileAttributes', 255 | full_name='MBSFileAttributes', 256 | filename=None, 257 | file=DESCRIPTOR, 258 | containing_type=None, 259 | fields=[ 260 | _descriptor.FieldDescriptor( 261 | name='KeybagID', full_name='MBSFileAttributes.KeybagID', index=0, 262 | number=1, type=13, cpp_type=3, label=1, 263 | has_default_value=False, default_value=0, 264 | message_type=None, enum_type=None, containing_type=None, 265 | is_extension=False, extension_scope=None, 266 | options=None), 267 | _descriptor.FieldDescriptor( 268 | name='Target', full_name='MBSFileAttributes.Target', index=1, 269 | number=2, type=9, cpp_type=9, label=1, 270 | has_default_value=False, default_value=_b("").decode('utf-8'), 271 | message_type=None, enum_type=None, containing_type=None, 272 | is_extension=False, extension_scope=None, 273 | options=None), 274 | _descriptor.FieldDescriptor( 275 | name='EncryptionKey', full_name='MBSFileAttributes.EncryptionKey', index=2, 276 | number=3, type=12, cpp_type=9, label=1, 277 | has_default_value=False, default_value=_b(""), 278 | message_type=None, enum_type=None, containing_type=None, 279 | is_extension=False, extension_scope=None, 280 | options=None), 281 | _descriptor.FieldDescriptor( 282 | name='InodeNumber', full_name='MBSFileAttributes.InodeNumber', index=3, 283 | number=4, type=4, cpp_type=4, label=1, 284 | has_default_value=False, default_value=0, 285 | message_type=None, enum_type=None, containing_type=None, 286 | is_extension=False, extension_scope=None, 287 | options=None), 288 | _descriptor.FieldDescriptor( 289 | name='Mode', full_name='MBSFileAttributes.Mode', index=4, 290 | number=5, type=13, cpp_type=3, label=1, 291 | has_default_value=False, default_value=0, 292 | message_type=None, enum_type=None, containing_type=None, 293 | is_extension=False, extension_scope=None, 294 | options=None), 295 | _descriptor.FieldDescriptor( 296 | name='UserID', full_name='MBSFileAttributes.UserID', index=5, 297 | number=6, type=13, cpp_type=3, label=1, 298 | has_default_value=False, default_value=0, 299 | message_type=None, enum_type=None, containing_type=None, 300 | is_extension=False, extension_scope=None, 301 | options=None), 302 | _descriptor.FieldDescriptor( 303 | name='GroupID', full_name='MBSFileAttributes.GroupID', index=6, 304 | number=7, type=13, cpp_type=3, label=1, 305 | has_default_value=False, default_value=0, 306 | message_type=None, enum_type=None, containing_type=None, 307 | is_extension=False, extension_scope=None, 308 | options=None), 309 | _descriptor.FieldDescriptor( 310 | name='LastModified', full_name='MBSFileAttributes.LastModified', index=7, 311 | number=8, type=4, cpp_type=4, label=1, 312 | has_default_value=False, default_value=0, 313 | message_type=None, enum_type=None, containing_type=None, 314 | is_extension=False, extension_scope=None, 315 | options=None), 316 | _descriptor.FieldDescriptor( 317 | name='LastStatusChange', full_name='MBSFileAttributes.LastStatusChange', index=8, 318 | number=9, type=4, cpp_type=4, label=1, 319 | has_default_value=False, default_value=0, 320 | message_type=None, enum_type=None, containing_type=None, 321 | is_extension=False, extension_scope=None, 322 | options=None), 323 | _descriptor.FieldDescriptor( 324 | name='Birth', full_name='MBSFileAttributes.Birth', index=9, 325 | number=10, type=4, cpp_type=4, label=1, 326 | has_default_value=False, default_value=0, 327 | message_type=None, enum_type=None, containing_type=None, 328 | is_extension=False, extension_scope=None, 329 | options=None), 330 | _descriptor.FieldDescriptor( 331 | name='ProtectionClass', full_name='MBSFileAttributes.ProtectionClass', index=10, 332 | number=12, type=13, cpp_type=3, label=1, 333 | has_default_value=False, default_value=0, 334 | message_type=None, enum_type=None, containing_type=None, 335 | is_extension=False, extension_scope=None, 336 | options=None), 337 | _descriptor.FieldDescriptor( 338 | name='ExtendedAttribute', full_name='MBSFileAttributes.ExtendedAttribute', index=11, 339 | number=13, type=11, cpp_type=10, label=1, 340 | has_default_value=False, default_value=None, 341 | message_type=None, enum_type=None, containing_type=None, 342 | is_extension=False, extension_scope=None, 343 | options=None), 344 | _descriptor.FieldDescriptor( 345 | name='EncryptionKeyVersion', full_name='MBSFileAttributes.EncryptionKeyVersion', index=12, 346 | number=14, type=13, cpp_type=3, label=1, 347 | has_default_value=False, default_value=0, 348 | message_type=None, enum_type=None, containing_type=None, 349 | is_extension=False, extension_scope=None, 350 | options=None), 351 | _descriptor.FieldDescriptor( 352 | name='DecryptedSize', full_name='MBSFileAttributes.DecryptedSize', index=13, 353 | number=15, type=4, cpp_type=4, label=1, 354 | has_default_value=False, default_value=0, 355 | message_type=None, enum_type=None, containing_type=None, 356 | is_extension=False, extension_scope=None, 357 | options=None), 358 | ], 359 | extensions=[ 360 | ], 361 | nested_types=[], 362 | enum_types=[ 363 | ], 364 | options=None, 365 | is_extendable=False, 366 | extension_ranges=[], 367 | oneofs=[ 368 | ], 369 | serialized_start=517, 370 | serialized_end=856, 371 | ) 372 | 373 | 374 | _MBSSNAPSHOT = _descriptor.Descriptor( 375 | name='MBSSnapshot', 376 | full_name='MBSSnapshot', 377 | filename=None, 378 | file=DESCRIPTOR, 379 | containing_type=None, 380 | fields=[ 381 | _descriptor.FieldDescriptor( 382 | name='SnapshotID', full_name='MBSSnapshot.SnapshotID', index=0, 383 | number=1, type=13, cpp_type=3, label=1, 384 | has_default_value=False, default_value=0, 385 | message_type=None, enum_type=None, containing_type=None, 386 | is_extension=False, extension_scope=None, 387 | options=None), 388 | _descriptor.FieldDescriptor( 389 | name='QuotaReserved', full_name='MBSSnapshot.QuotaReserved', index=1, 390 | number=2, type=4, cpp_type=4, label=1, 391 | has_default_value=False, default_value=0, 392 | message_type=None, enum_type=None, containing_type=None, 393 | is_extension=False, extension_scope=None, 394 | options=None), 395 | _descriptor.FieldDescriptor( 396 | name='LastModified', full_name='MBSSnapshot.LastModified', index=2, 397 | number=3, type=4, cpp_type=4, label=1, 398 | has_default_value=False, default_value=0, 399 | message_type=None, enum_type=None, containing_type=None, 400 | is_extension=False, extension_scope=None, 401 | options=None), 402 | _descriptor.FieldDescriptor( 403 | name='Attributes', full_name='MBSSnapshot.Attributes', index=3, 404 | number=5, type=11, cpp_type=10, label=1, 405 | has_default_value=False, default_value=None, 406 | message_type=None, enum_type=None, containing_type=None, 407 | is_extension=False, extension_scope=None, 408 | options=None), 409 | _descriptor.FieldDescriptor( 410 | name='Committed', full_name='MBSSnapshot.Committed', index=4, 411 | number=6, type=4, cpp_type=4, label=1, 412 | has_default_value=False, default_value=0, 413 | message_type=None, enum_type=None, containing_type=None, 414 | is_extension=False, extension_scope=None, 415 | options=None), 416 | ], 417 | extensions=[ 418 | ], 419 | nested_types=[], 420 | enum_types=[ 421 | ], 422 | options=None, 423 | is_extendable=False, 424 | extension_ranges=[], 425 | oneofs=[ 426 | ], 427 | serialized_start=859, 428 | serialized_end=1000, 429 | ) 430 | 431 | 432 | _MBSSNAPSHOTATTRIBUTES = _descriptor.Descriptor( 433 | name='MBSSnapshotAttributes', 434 | full_name='MBSSnapshotAttributes', 435 | filename=None, 436 | file=DESCRIPTOR, 437 | containing_type=None, 438 | fields=[ 439 | _descriptor.FieldDescriptor( 440 | name='DeviceName', full_name='MBSSnapshotAttributes.DeviceName', index=0, 441 | number=1, type=9, cpp_type=9, label=1, 442 | has_default_value=False, default_value=_b("").decode('utf-8'), 443 | message_type=None, enum_type=None, containing_type=None, 444 | is_extension=False, extension_scope=None, 445 | options=None), 446 | _descriptor.FieldDescriptor( 447 | name='ProductVersion', full_name='MBSSnapshotAttributes.ProductVersion', index=1, 448 | number=2, type=9, cpp_type=9, label=1, 449 | has_default_value=False, default_value=_b("").decode('utf-8'), 450 | message_type=None, enum_type=None, containing_type=None, 451 | is_extension=False, extension_scope=None, 452 | options=None), 453 | _descriptor.FieldDescriptor( 454 | name='BuildVersion', full_name='MBSSnapshotAttributes.BuildVersion', index=2, 455 | number=3, type=9, cpp_type=9, label=1, 456 | has_default_value=False, default_value=_b("").decode('utf-8'), 457 | message_type=None, enum_type=None, containing_type=None, 458 | is_extension=False, extension_scope=None, 459 | options=None), 460 | _descriptor.FieldDescriptor( 461 | name='KeybagID', full_name='MBSSnapshotAttributes.KeybagID', index=3, 462 | number=4, type=13, cpp_type=3, label=1, 463 | has_default_value=False, default_value=0, 464 | message_type=None, enum_type=None, containing_type=None, 465 | is_extension=False, extension_scope=None, 466 | options=None), 467 | _descriptor.FieldDescriptor( 468 | name='KeybagUUID', full_name='MBSSnapshotAttributes.KeybagUUID', index=4, 469 | number=5, type=12, cpp_type=9, label=1, 470 | has_default_value=False, default_value=_b(""), 471 | message_type=None, enum_type=None, containing_type=None, 472 | is_extension=False, extension_scope=None, 473 | options=None), 474 | _descriptor.FieldDescriptor( 475 | name='BackupReason', full_name='MBSSnapshotAttributes.BackupReason', index=5, 476 | number=6, type=5, cpp_type=1, label=1, 477 | has_default_value=False, default_value=0, 478 | message_type=None, enum_type=None, containing_type=None, 479 | is_extension=False, extension_scope=None, 480 | options=None), 481 | _descriptor.FieldDescriptor( 482 | name='BackupType', full_name='MBSSnapshotAttributes.BackupType', index=6, 483 | number=7, type=5, cpp_type=1, label=1, 484 | has_default_value=False, default_value=0, 485 | message_type=None, enum_type=None, containing_type=None, 486 | is_extension=False, extension_scope=None, 487 | options=None), 488 | ], 489 | extensions=[ 490 | ], 491 | nested_types=[], 492 | enum_types=[ 493 | ], 494 | options=None, 495 | is_extendable=False, 496 | extension_ranges=[], 497 | oneofs=[ 498 | ], 499 | serialized_start=1003, 500 | serialized_end=1172, 501 | ) 502 | 503 | 504 | _MBSSNAPSHOTID = _descriptor.Descriptor( 505 | name='MBSSnapshotID', 506 | full_name='MBSSnapshotID', 507 | filename=None, 508 | file=DESCRIPTOR, 509 | containing_type=None, 510 | fields=[ 511 | _descriptor.FieldDescriptor( 512 | name='SnapshotID', full_name='MBSSnapshotID.SnapshotID', index=0, 513 | number=1, type=13, cpp_type=3, label=1, 514 | has_default_value=False, default_value=0, 515 | message_type=None, enum_type=None, containing_type=None, 516 | is_extension=False, extension_scope=None, 517 | options=None), 518 | ], 519 | extensions=[ 520 | ], 521 | nested_types=[], 522 | enum_types=[ 523 | ], 524 | options=None, 525 | is_extendable=False, 526 | extension_ranges=[], 527 | oneofs=[ 528 | ], 529 | serialized_start=1174, 530 | serialized_end=1209, 531 | ) 532 | 533 | 534 | _MBSFILEAUTHTOKEN = _descriptor.Descriptor( 535 | name='MBSFileAuthToken', 536 | full_name='MBSFileAuthToken', 537 | filename=None, 538 | file=DESCRIPTOR, 539 | containing_type=None, 540 | fields=[ 541 | _descriptor.FieldDescriptor( 542 | name='FileID', full_name='MBSFileAuthToken.FileID', index=0, 543 | number=1, type=12, cpp_type=9, label=2, 544 | has_default_value=False, default_value=_b(""), 545 | message_type=None, enum_type=None, containing_type=None, 546 | is_extension=False, extension_scope=None, 547 | options=None), 548 | _descriptor.FieldDescriptor( 549 | name='AuthToken', full_name='MBSFileAuthToken.AuthToken', index=1, 550 | number=2, type=9, cpp_type=9, label=1, 551 | has_default_value=False, default_value=_b("").decode('utf-8'), 552 | message_type=None, enum_type=None, containing_type=None, 553 | is_extension=False, extension_scope=None, 554 | options=None), 555 | ], 556 | extensions=[ 557 | ], 558 | nested_types=[], 559 | enum_types=[ 560 | ], 561 | options=None, 562 | is_extendable=False, 563 | extension_ranges=[], 564 | oneofs=[ 565 | ], 566 | serialized_start=1211, 567 | serialized_end=1264, 568 | ) 569 | 570 | 571 | _MBSFILEAUTHTOKENS = _descriptor.Descriptor( 572 | name='MBSFileAuthTokens', 573 | full_name='MBSFileAuthTokens', 574 | filename=None, 575 | file=DESCRIPTOR, 576 | containing_type=None, 577 | fields=[ 578 | _descriptor.FieldDescriptor( 579 | name='tokens', full_name='MBSFileAuthTokens.tokens', index=0, 580 | number=1, type=11, cpp_type=10, label=3, 581 | has_default_value=False, default_value=[], 582 | message_type=None, enum_type=None, containing_type=None, 583 | is_extension=False, extension_scope=None, 584 | options=None), 585 | ], 586 | extensions=[ 587 | ], 588 | nested_types=[], 589 | enum_types=[ 590 | ], 591 | options=None, 592 | is_extendable=False, 593 | extension_ranges=[], 594 | oneofs=[ 595 | ], 596 | serialized_start=1266, 597 | serialized_end=1320, 598 | ) 599 | 600 | 601 | _MBSFILEID = _descriptor.Descriptor( 602 | name='MBSFileID', 603 | full_name='MBSFileID', 604 | filename=None, 605 | file=DESCRIPTOR, 606 | containing_type=None, 607 | fields=[ 608 | _descriptor.FieldDescriptor( 609 | name='FileID', full_name='MBSFileID.FileID', index=0, 610 | number=1, type=12, cpp_type=9, label=2, 611 | has_default_value=False, default_value=_b(""), 612 | message_type=None, enum_type=None, containing_type=None, 613 | is_extension=False, extension_scope=None, 614 | options=None), 615 | ], 616 | extensions=[ 617 | ], 618 | nested_types=[], 619 | enum_types=[ 620 | ], 621 | options=None, 622 | is_extendable=False, 623 | extension_ranges=[], 624 | oneofs=[ 625 | ], 626 | serialized_start=1322, 627 | serialized_end=1349, 628 | ) 629 | 630 | 631 | _MBSKEY = _descriptor.Descriptor( 632 | name='MBSKey', 633 | full_name='MBSKey', 634 | filename=None, 635 | file=DESCRIPTOR, 636 | containing_type=None, 637 | fields=[ 638 | _descriptor.FieldDescriptor( 639 | name='KeyID', full_name='MBSKey.KeyID', index=0, 640 | number=1, type=13, cpp_type=3, label=1, 641 | has_default_value=False, default_value=0, 642 | message_type=None, enum_type=None, containing_type=None, 643 | is_extension=False, extension_scope=None, 644 | options=None), 645 | _descriptor.FieldDescriptor( 646 | name='KeyData', full_name='MBSKey.KeyData', index=1, 647 | number=2, type=12, cpp_type=9, label=1, 648 | has_default_value=False, default_value=_b(""), 649 | message_type=None, enum_type=None, containing_type=None, 650 | is_extension=False, extension_scope=None, 651 | options=None), 652 | ], 653 | extensions=[ 654 | ], 655 | nested_types=[], 656 | enum_types=[ 657 | ], 658 | options=None, 659 | is_extendable=False, 660 | extension_ranges=[], 661 | oneofs=[ 662 | ], 663 | serialized_start=1351, 664 | serialized_end=1391, 665 | ) 666 | 667 | 668 | _MBSKEYSET = _descriptor.Descriptor( 669 | name='MBSKeySet', 670 | full_name='MBSKeySet', 671 | filename=None, 672 | file=DESCRIPTOR, 673 | containing_type=None, 674 | fields=[ 675 | _descriptor.FieldDescriptor( 676 | name='Key', full_name='MBSKeySet.Key', index=0, 677 | number=1, type=11, cpp_type=10, label=3, 678 | has_default_value=False, default_value=[], 679 | message_type=None, enum_type=None, containing_type=None, 680 | is_extension=False, extension_scope=None, 681 | options=None), 682 | ], 683 | extensions=[ 684 | ], 685 | nested_types=[], 686 | enum_types=[ 687 | ], 688 | options=None, 689 | is_extendable=False, 690 | extension_ranges=[], 691 | oneofs=[ 692 | ], 693 | serialized_start=1393, 694 | serialized_end=1426, 695 | ) 696 | 697 | 698 | _MBSFILEEXTENDEDATTRIBUTE = _descriptor.Descriptor( 699 | name='MBSFileExtendedAttribute', 700 | full_name='MBSFileExtendedAttribute', 701 | filename=None, 702 | file=DESCRIPTOR, 703 | containing_type=None, 704 | fields=[ 705 | _descriptor.FieldDescriptor( 706 | name='Name', full_name='MBSFileExtendedAttribute.Name', index=0, 707 | number=1, type=9, cpp_type=9, label=1, 708 | has_default_value=False, default_value=_b("").decode('utf-8'), 709 | message_type=None, enum_type=None, containing_type=None, 710 | is_extension=False, extension_scope=None, 711 | options=None), 712 | _descriptor.FieldDescriptor( 713 | name='Value', full_name='MBSFileExtendedAttribute.Value', index=1, 714 | number=2, type=12, cpp_type=9, label=1, 715 | has_default_value=False, default_value=_b(""), 716 | message_type=None, enum_type=None, containing_type=None, 717 | is_extension=False, extension_scope=None, 718 | options=None), 719 | ], 720 | extensions=[ 721 | ], 722 | nested_types=[], 723 | enum_types=[ 724 | ], 725 | options=None, 726 | is_extendable=False, 727 | extension_ranges=[], 728 | oneofs=[ 729 | ], 730 | serialized_start=1428, 731 | serialized_end=1483, 732 | ) 733 | 734 | _MBSBACKUP.fields_by_name['Snapshot'].message_type = _MBSSNAPSHOT 735 | _MBSBACKUP.fields_by_name['Attributes'].message_type = _MBSBACKUPATTRIBUTES 736 | _MBSFILE.fields_by_name['Attributes'].message_type = _MBSFILEATTRIBUTES 737 | _MBSFILEATTRIBUTES.fields_by_name['ExtendedAttribute'].message_type = _MBSFILEEXTENDEDATTRIBUTE 738 | _MBSSNAPSHOT.fields_by_name['Attributes'].message_type = _MBSSNAPSHOTATTRIBUTES 739 | _MBSFILEAUTHTOKENS.fields_by_name['tokens'].message_type = _MBSFILEAUTHTOKEN 740 | _MBSKEYSET.fields_by_name['Key'].message_type = _MBSKEY 741 | DESCRIPTOR.message_types_by_name['MBSAccount'] = _MBSACCOUNT 742 | DESCRIPTOR.message_types_by_name['MBSBackup'] = _MBSBACKUP 743 | DESCRIPTOR.message_types_by_name['MBSBackupAttributes'] = _MBSBACKUPATTRIBUTES 744 | DESCRIPTOR.message_types_by_name['MBSFile'] = _MBSFILE 745 | DESCRIPTOR.message_types_by_name['MBSFileAttributes'] = _MBSFILEATTRIBUTES 746 | DESCRIPTOR.message_types_by_name['MBSSnapshot'] = _MBSSNAPSHOT 747 | DESCRIPTOR.message_types_by_name['MBSSnapshotAttributes'] = _MBSSNAPSHOTATTRIBUTES 748 | DESCRIPTOR.message_types_by_name['MBSSnapshotID'] = _MBSSNAPSHOTID 749 | DESCRIPTOR.message_types_by_name['MBSFileAuthToken'] = _MBSFILEAUTHTOKEN 750 | DESCRIPTOR.message_types_by_name['MBSFileAuthTokens'] = _MBSFILEAUTHTOKENS 751 | DESCRIPTOR.message_types_by_name['MBSFileID'] = _MBSFILEID 752 | DESCRIPTOR.message_types_by_name['MBSKey'] = _MBSKEY 753 | DESCRIPTOR.message_types_by_name['MBSKeySet'] = _MBSKEYSET 754 | DESCRIPTOR.message_types_by_name['MBSFileExtendedAttribute'] = _MBSFILEEXTENDEDATTRIBUTE 755 | 756 | MBSAccount = _reflection.GeneratedProtocolMessageType('MBSAccount', (_message.Message,), dict( 757 | DESCRIPTOR = _MBSACCOUNT, 758 | __module__ = 'icloud_pb2' 759 | # @@protoc_insertion_point(class_scope:MBSAccount) 760 | )) 761 | _sym_db.RegisterMessage(MBSAccount) 762 | 763 | MBSBackup = _reflection.GeneratedProtocolMessageType('MBSBackup', (_message.Message,), dict( 764 | DESCRIPTOR = _MBSBACKUP, 765 | __module__ = 'icloud_pb2' 766 | # @@protoc_insertion_point(class_scope:MBSBackup) 767 | )) 768 | _sym_db.RegisterMessage(MBSBackup) 769 | 770 | MBSBackupAttributes = _reflection.GeneratedProtocolMessageType('MBSBackupAttributes', (_message.Message,), dict( 771 | DESCRIPTOR = _MBSBACKUPATTRIBUTES, 772 | __module__ = 'icloud_pb2' 773 | # @@protoc_insertion_point(class_scope:MBSBackupAttributes) 774 | )) 775 | _sym_db.RegisterMessage(MBSBackupAttributes) 776 | 777 | MBSFile = _reflection.GeneratedProtocolMessageType('MBSFile', (_message.Message,), dict( 778 | DESCRIPTOR = _MBSFILE, 779 | __module__ = 'icloud_pb2' 780 | # @@protoc_insertion_point(class_scope:MBSFile) 781 | )) 782 | _sym_db.RegisterMessage(MBSFile) 783 | 784 | MBSFileAttributes = _reflection.GeneratedProtocolMessageType('MBSFileAttributes', (_message.Message,), dict( 785 | DESCRIPTOR = _MBSFILEATTRIBUTES, 786 | __module__ = 'icloud_pb2' 787 | # @@protoc_insertion_point(class_scope:MBSFileAttributes) 788 | )) 789 | _sym_db.RegisterMessage(MBSFileAttributes) 790 | 791 | MBSSnapshot = _reflection.GeneratedProtocolMessageType('MBSSnapshot', (_message.Message,), dict( 792 | DESCRIPTOR = _MBSSNAPSHOT, 793 | __module__ = 'icloud_pb2' 794 | # @@protoc_insertion_point(class_scope:MBSSnapshot) 795 | )) 796 | _sym_db.RegisterMessage(MBSSnapshot) 797 | 798 | MBSSnapshotAttributes = _reflection.GeneratedProtocolMessageType('MBSSnapshotAttributes', (_message.Message,), dict( 799 | DESCRIPTOR = _MBSSNAPSHOTATTRIBUTES, 800 | __module__ = 'icloud_pb2' 801 | # @@protoc_insertion_point(class_scope:MBSSnapshotAttributes) 802 | )) 803 | _sym_db.RegisterMessage(MBSSnapshotAttributes) 804 | 805 | MBSSnapshotID = _reflection.GeneratedProtocolMessageType('MBSSnapshotID', (_message.Message,), dict( 806 | DESCRIPTOR = _MBSSNAPSHOTID, 807 | __module__ = 'icloud_pb2' 808 | # @@protoc_insertion_point(class_scope:MBSSnapshotID) 809 | )) 810 | _sym_db.RegisterMessage(MBSSnapshotID) 811 | 812 | MBSFileAuthToken = _reflection.GeneratedProtocolMessageType('MBSFileAuthToken', (_message.Message,), dict( 813 | DESCRIPTOR = _MBSFILEAUTHTOKEN, 814 | __module__ = 'icloud_pb2' 815 | # @@protoc_insertion_point(class_scope:MBSFileAuthToken) 816 | )) 817 | _sym_db.RegisterMessage(MBSFileAuthToken) 818 | 819 | MBSFileAuthTokens = _reflection.GeneratedProtocolMessageType('MBSFileAuthTokens', (_message.Message,), dict( 820 | DESCRIPTOR = _MBSFILEAUTHTOKENS, 821 | __module__ = 'icloud_pb2' 822 | # @@protoc_insertion_point(class_scope:MBSFileAuthTokens) 823 | )) 824 | _sym_db.RegisterMessage(MBSFileAuthTokens) 825 | 826 | MBSFileID = _reflection.GeneratedProtocolMessageType('MBSFileID', (_message.Message,), dict( 827 | DESCRIPTOR = _MBSFILEID, 828 | __module__ = 'icloud_pb2' 829 | # @@protoc_insertion_point(class_scope:MBSFileID) 830 | )) 831 | _sym_db.RegisterMessage(MBSFileID) 832 | 833 | MBSKey = _reflection.GeneratedProtocolMessageType('MBSKey', (_message.Message,), dict( 834 | DESCRIPTOR = _MBSKEY, 835 | __module__ = 'icloud_pb2' 836 | # @@protoc_insertion_point(class_scope:MBSKey) 837 | )) 838 | _sym_db.RegisterMessage(MBSKey) 839 | 840 | MBSKeySet = _reflection.GeneratedProtocolMessageType('MBSKeySet', (_message.Message,), dict( 841 | DESCRIPTOR = _MBSKEYSET, 842 | __module__ = 'icloud_pb2' 843 | # @@protoc_insertion_point(class_scope:MBSKeySet) 844 | )) 845 | _sym_db.RegisterMessage(MBSKeySet) 846 | 847 | MBSFileExtendedAttribute = _reflection.GeneratedProtocolMessageType('MBSFileExtendedAttribute', (_message.Message,), dict( 848 | DESCRIPTOR = _MBSFILEEXTENDEDATTRIBUTE, 849 | __module__ = 'icloud_pb2' 850 | # @@protoc_insertion_point(class_scope:MBSFileExtendedAttribute) 851 | )) 852 | _sym_db.RegisterMessage(MBSFileExtendedAttribute) 853 | 854 | 855 | # @@protoc_insertion_point(module_scope) 856 | -------------------------------------------------------------------------------- /pbuf.py: -------------------------------------------------------------------------------- 1 | def decode_protobuf_array(data, obj_class): 2 | n = len(data) 3 | i = 0 4 | res = [] 5 | while i < n: 6 | (length, i) = _DecodeVarint(data, i) 7 | l3 = obj_class() 8 | l3.ParseFromString(data[i:i+length]) 9 | res.append(l3) 10 | i += length 11 | return res 12 | 13 | def encode_protobuf_array(res): 14 | z = "" 15 | for o in res: 16 | d = o.SerializeToString() 17 | z += _EncodeVarint(len(d)) 18 | z += d 19 | return z 20 | 21 | #decoder.py 22 | def _VarintDecoder(mask): 23 | local_ord = ord 24 | def DecodeVarint(buffer, pos): 25 | result = 0 26 | shift = 0 27 | while 1: 28 | b = local_ord(buffer[pos]) 29 | result |= ((b & 0x7f) << shift) 30 | pos += 1 31 | if not (b & 0x80): 32 | result &= mask 33 | return (result, pos) 34 | shift += 7 35 | if shift >= 64: 36 | raise _DecodeError('Too many bytes when decoding varint.') 37 | return DecodeVarint 38 | 39 | _DecodeVarint = _VarintDecoder((1 << 64) - 1) 40 | 41 | 42 | def _VarintEncoder(): 43 | """Return an encoder for a basic varint value (does not include tag).""" 44 | 45 | local_chr = chr 46 | def EncodeVarint( value): 47 | bits = value & 0x7f 48 | value >>= 7 49 | z="" 50 | while value: 51 | z += local_chr(0x80|bits) 52 | bits = value & 0x7f 53 | value >>= 7 54 | return z + local_chr(bits) 55 | 56 | return EncodeVarint 57 | 58 | _EncodeVarint = _VarintEncoder() 59 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | docopt==0.6.2 2 | protobuf==2.6.1 3 | requests==2.8.1 4 | wheel==0.24.0 5 | --------------------------------------------------------------------------------